2012-09-25 185 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 

只有顶级页面都有这个变量包含在其中。所有其他文件,如果直接打开,关闭,从而防止任何意外的误用/数据丢失。