作为PHP的新手,我可能没有采用正确的路线表格,但这种方式对我来说很有用。以下是我的设置/
的示例我在www.foo.com/add.php上有一个表格,需要管理员登录会话。表单将数据插入数据库。提交后,操作将设置为action="scripts/add.php"
,然后使用PHP标头功能将其重定向到www.foo.com/done.php
。
我想知道的是,您是否可以直接拒绝访问脚本文件,例如如果您在Web浏览器中转到脚本文件,它可能会在数据库中输入一个空行或可能导致其他一些安全问题?
答案 0 :(得分:4)
您可以选择几种方式:
您尝试解决的问题实际上听起来像是要禁止将空白记录插入数据库 - 不一定是您要阻止访问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要求您的表单在生成时称为nonce时会收到唯一值。 nonce是一个特定于该表单实例的唯一值。随后对add.php的调用仅在nonce有效时才接受请求。一种方法可能是将nonce存储在用户的会话中。
除问题范围之外的另一个注意事项,因为您要将数据插入数据库,所以应确保正确转换插入的数据。如果您使用的是MySQL,请参阅此处:http://www.php.net/manual/en/mysqli.real-escape-string.php。如果使用其他数据库引擎,您将需要查找特定库以查看如何转义字符串。
答案 1 :(得分:3)
如果使用 POST 方法(在method="post"
中使用属性<form>
)提交表单,您仍然可以仅在POST请求上执行脚本,方法是在顶部:
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
exit;
}
答案 2 :(得分:0)
Yuu可以尝试这个来检查请求是否通过邮寄发送
if(isset($_POST)){
continue.......
}
答案 3 :(得分:0)
为了保护这些页面我已经应用了以下代码。
除了请求方法,它还会检查请求是否仅来自特定域。
$live_site_regex = '/http:\/\/(w{3}|w*).?yourdomain.ext/';
if($_POST && preg_match($live_site_regex,$_SERVER['HTTP_REFERER']) == 1){
//everything is ok
}