作为PHP的新手,我可能不会采取正确的表单路线,但这种方式在某种程度上对我有用。以下是我的设置示例/
我在 www.foo.com/add.php 有一个表单,需要管理员登录会话。表单将数据插入数据库。提交后,操作将设置为 action="scripts/add.php"
,然后使用 PHP 标头函数将其重定向到 www.foo.com/done.php
。
我想知道的是,您能否直接拒绝访问脚本文件,例如,如果您在 Web 浏览器中访问脚本文件,它可能会在数据库中输入空行或可能导致其他一些安全问题?
方法提交表单(属性method="post"
在 <form>
中),您仍然可以仅在 POST 请求上执行脚本,方法是在顶部添加以下内容:
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
exit;
}
有几个选项可供您使用:
- 在插入数据库之前验证表单发布数据
- 在提交之前包括仅在表单中存在的随机数或其他生成的值
您尝试解决的问题听起来确实像是您要禁止将空白记录插入数据库 - 不一定是您要阻止访问 add.php。 这就是选项 #1 发挥作用的地方。
在您当前的 add.php 中,听起来需要一些输入验证。 基本上,您将检查脚本接收的值以确保它们存在。 例如,如果 add.php 接受名字作为电话簿应用的一部分,你将拥有类似于以下内容的代码:
$firstName = '';
if(isset($_GET['firstName']))
$firstName = $isset($_GET['firstName']);
// ...
if(trim($firstName) == '')
//do something to handle an error, either set an error flag or die() with an appropriate message
这是输入验证的一个基本示例,PHP 有一个你可能想要熟悉的验证库:http://www.php.net/manual/en/intro.filter.php
完成此输入验证后,有人可以导航到 add.php并且应该会收到错误。 它还将检测是否有人也提交了空白表单。
#2 要求表单在生成时接收一个称为随机数的唯一值。 随机数是特定于表单实例的唯一值。 后续调用 add.php 仅在随机数有效时接受请求。 一种方法可能是将随机数存储在用户的会话中。
问题范围之外的另一个注意事项是,由于您要将数据插入数据库,因此应确保对插入的数据进行正确转义。 如果您使用的是 MySQL,请参阅此处:http://www.php.net/manual/en/mysqli.real-escape-string.php。 如果使用其他数据库引擎,则需要查找特定库以查看如何转义字符串。
> Yuu 可以尝试这样做来检查请求是否通过邮寄发送
if(isset($_POST)){
continue.......
}
保护这些页面,我应用了下面的代码。
除请求方法外,它还检查请求是否仅来自特定域。
$live_site_regex = '/http:'/'/(w{3}|w*).?yourdomain.ext/';
if($_POST && preg_match($live_site_regex,$_SERVER['HTTP_REFERER']) == 1){
//everything is ok
}