我使用Ajax进行JQUERY处理。 Data_string将发送到我的process.php页面,并保存在该页面中。
问题:现在任何人都可以直接输入example.com/process.php来访问我的流程页面,或者输入example.com/process.php/var1=foo1&var2=foo2来模拟表单提交。我该如何防止这种情况发生?
另外,在Ajax代码中我指定了POST。 POST和GET有什么区别?
答案 0 :(得分:2)
首先通过POST提交您的AJAX表单,并在服务器端确保请求来自同一个域并通过AJAX调用。
我的库中有几个函数用于此任务
function valid_referer()
{
if(isset($_SERVER['HTTP_REFERER']))
return parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST) == $_SERVER['SERVER_NAME'];
else
return false;
}
function is_ajax()
{
$key = 'HTTP_X_REQUESTED_WITH';
return isset($_SERVER[$key]) && strtolower($_SERVER[$key]) == 'xmlhttprequest';
}
关于帖子与获取
之间的区别,您可能会阅读this post答案 1 :(得分:1)
虽然Jason LeBrun说防止人们模拟表单提交几乎是不可能的,但至少可以阻止随意尝试。除了实现Nazariy的建议(如果你真的想要这些建议都很容易),你还可以在服务器端生成一些独特的值(我称之为令牌),它会插入与你的相同的页面阿贾克斯。然后,Ajax会将此令牌与您的其他参数一起传递到process.php页面,以便您可以检查此令牌是否有效。
更新
关于令牌
,请参阅此问题答案 2 :(得分:0)
您无法阻止人们手动模拟您网站上的表单数据提交。你可以任意地使它变得更加困难,但你无法完全阻止它。