我有一个简单的表单,该表单将表单数据发送到update.php,然后将数据插入MySQL数据库的表中。
$.ajax({
url: '/actions/update.php',
type: 'post',
data: {
name: 'name-data',
description:'description-data'
},
success: function( data, textStatus, jQxhr ){
console.log(data);
},
error: function( jqXhr, textStatus, errorThrown ){
console.log(errorThrown);
}
});
该表单有效,并且数据完美地添加到了数据库中。问题在于,从理论上讲,如果用户知道将数据发布到的URL(如果查看源代码,他们可能会知道),那么他们可以访问该URL并绕过表单添加记录。例如访问/actions/update.php会将空白记录添加到数据库中。
是否可以阻止用户访问该文件/目录,同时仍然允许将数据发布到该文件/目录?
答案 0 :(得分:3)
是否仍然可以阻止用户访问该文件/目录 允许将数据发布到其中?
这是对问题的错误思考方式。
如果客户端JavaScript可以发出该请求,则用户可以对同一PHP文件发出任何请求。
相反,在您的PHP中,您需要验证传递的参数是否符合可接受的定义。
例如,您可能需要检查name
和description
参数是否在某个字符长度以下,或者当前登录的用户是否有权更新相关记录。
请仔细考虑什么是可以接受的。添加完这些检查后,用户是否“访问该URL并绕过表单添加记录”就没关系了。
答案 1 :(得分:1)
我认为可能的解决方案是,如果未通过name
请求设置变量description
和post
,则可以阻止用户
if(isset($_POST['name']) && isset($_POST['description']))
{
//do your task
}
else
{
header('Location:otherpage.php')// redirecting it to other page if user visits it directly
}
答案 2 :(得分:0)
如果用户可以访问URL,则表示允许GET请求。您只需要接受POST请求。