2012-09-25 230 views
1

我有2個腳本。這就是:防止直接訪問PHP

  1. registration.html
  2. process_registration.php

有時有人打開該鏈接直接進入process_registration.php,所以我怎麼能預防呢?

Process_registration.php功能是保存從registration.html輸入獲得的數據。

有什麼想法?

+0

可能的dublicate:http://stackoverflow.com/questions/1101895/how-to-stop-direct-execution-of-a-php-page-using-htaccess-rules – Peon

回答

4

您可以使用:

if (!isset($_POST['field'])) { 
    die(); 
} 

你process_registration.php文件的頂部。

當然,您的表單中的一個現有字段替換field

如果您針對使用腳本註冊多個帳戶的flooders,您可以在註冊表中使用captcha字段,或使用protections against crawling

+0

$ _POST也可以用PHP發送捲曲,所以我不認爲這是最有效的解決方案..爲了更好的安全我想你也可以驗證引用者 –

+0

引用者也可以通過cURL設置 –

+0

謝謝@Ninsuo –

1

您可以檢查當前的請求是POST類型(如果你使用的一種形式)

if($_SERVER['REQUEST_METHOD'] == 'POST') 

,你也可以檢查是否所有必需的變量設置。

3

只是另一種方法:

if (empty($_POST)) { 
    exit("Direct access not allowed"); 
} 

只是更靈活的對象名稱。對於額外的安全,你應該把這個在您的形式:

<input type="hidden" value="9957374" name="hiddenvalidate" /> 

,並在你的腳本:

if (!isset($_POST['hiddenvalidate']) || $_POST['hiddenvalidate'] != 9957374) { 
    exit("Direct access not allowed"); 
} 
+0

感謝您的代碼。 :) –

1

您可以使用process_registration.php $_POST陣列此類似:

if(!isset($_POST['yourvariable'])){ 
//Redirect to registration page 
} 

您也可以使用PHP Session。如果沒有設置會話,則將用戶重定向到註冊頁面。

1

我喜歡Joomla處理此問題的方式。

論的Joomla每個PHP頁面,你會看到下面的代碼:

// No direct access 
defined('_JEXEC') or die; // it's a config setting 

只有頂級頁面都有這個變量包含在其中。所有其他文件,如果直接打開,關閉,從而防止任何意外的誤用/數據丟失。