如何防止篡改AJAX流程页面?

时间:2011-01-31 00:57:47

标签: ajax post

我使用Ajax进行JQUERY处理。 Data_string将发送到我的process.php页面,并保存在该页面中。

问题:现在任何人都可以直接输入example.com/process.php来访问我的流程页面,或者输入example.com/process.php/var1=foo1&var2=foo2来模拟表单提交。我该如何防止这种情况发生?

另外,在Ajax代码中我指定了POST。 POST和GET有什么区别?

3 个答案:

答案 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页面,以便您可以检查此令牌是否有效。

更新

关于令牌

,请参阅此问题

anti-CSRF token and Javascript

答案 2 :(得分:0)

您无法阻止人们手动模拟您网站上的表单数据提交。你可以任意地使它变得更加困难,但你无法完全阻止它。