【发布时间】:2012-09-16 15:40:40
【问题描述】:
我有 2 个脚本。那是:
- registration.html
- process_registration.php
有时有人打开链接直接进入 process_registration.php,我该如何防止呢?
Process_registration.php 功能是保存从registration.html 输入的数据。
有什么想法吗?
【问题讨论】:
标签: php
我有 2 个脚本。那是:
有时有人打开链接直接进入 process_registration.php,我该如何防止呢?
Process_registration.php 功能是保存从registration.html 输入的数据。
有什么想法吗?
【问题讨论】:
标签: php
你可以使用:
if (!isset($_POST['field'])) {
die();
}
在您的 process_registration.php 文件的顶部。
当然,将field 替换为表单中现有的字段之一。
如果您反对使用脚本注册多个帐户的洪水泛滥,您可以在注册表单上使用captcha 字段,或使用protections against crawling。
【讨论】:
只是另一种方法:
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");
}
【讨论】:
您可以检查当前请求是否为POST类型(如果您使用表单)
if($_SERVER['REQUEST_METHOD'] == 'POST')
您还可以检查是否设置了所有必需的变量。
【讨论】:
您可以在 process_registration.php 中使用 $_POST 数组,例如:
if(!isset($_POST['yourvariable'])){
//Redirect to registration page
}
您也可以使用PHP Session。如果没有设置会话,则将用户重定向到注册页面。
【讨论】:
我喜欢Joomla 处理这个问题的方式。
在 Joomla 的每个 php 页面上,您都会看到以下代码:
// No direct access
defined('_JEXEC') or die; // it's a config setting
只有顶级页面包含此变量。所有其他文件,如果直接打开,则会关闭,从而防止任何意外误用/数据丢失。
【讨论】: