我正在使用Ajax来处理JQUERY。Data_string被发送到我的process.php页面,并保存在那里。
问题:现在任何人都可以直接输入example.com/process.php来访问我的流程页面,或者输入example.com/process.php/var1=foo1&var2=foo2来模拟表单提交。如何防止这种情况发生?
另外,在Ajax代码中,我指定了POST。这里POST和GET的区别是什么?
发布于 2011-01-31 09:55:23
正如Jason LeBrun所说,阻止人们模拟表单提交几乎是不可能的,但你至少可以停止这种不经意的尝试。除了实现Nazariy的建议(如果您真的想要的话,这两个建议都很容易实现),您还可以在服务器端生成一些惟一的值(我称之为令牌),将其插入到与Ajax相同的页面中。然后,Ajax会将该令牌与其他参数一起传递给process.php页面,这样您就可以检查该令牌是否有效。
更新
有关令牌,请参阅此问题
发布于 2011-01-31 09:28:23
首先,通过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';
}您可以阅读有关post和get之间区别的this post
发布于 2011-01-31 09:40:59
您不能阻止他人在您的网站上手动模拟表单数据的提交。你可以任意地让它变得更难,但你不能完全阻止它。
https://stackoverflow.com/questions/4846852
复制相似问题