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

如何防止篡改AJAX进程页面?,ajax,post,Ajax,Post,我使用Ajax处理JQUERY。数据字符串被发送到my process.php页面,并保存在那里 问题:现在任何人都可以直接键入example.com/process.php来访问我的流程页面,或者键入example.com/process.php/var1=foo1&var2=foo2来模拟表单提交。如何防止这种情况发生 另外,在Ajax代码中,我指定了POST。POST和GET之间的区别是什么?首先,通过POST提交AJAX表单,并在服务器端确保请求位于同一个域中,并通过AJAX调用 我的库

我使用Ajax处理JQUERY。数据字符串被发送到my process.php页面,并保存在那里

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


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

首先,通过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之间区别的文章,首先通过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之间差异的文章

您无法阻止人们在您的网站上手动模拟表单数据的提交。您可以任意增加难度,但无法完全阻止。

您无法阻止人们在您的网站上手动模拟表单数据的提交。你可以任意增加表单提交的难度,但你无法完全阻止它。

正如Jason LeBrun所说,阻止人们模拟表单提交几乎是不可能的,你至少可以停止随意尝试提交表单。除了实现Nazary的建议(如果您真的愿意,这两个建议都很容易被接受),您还可以在服务器端生成一些独特的值(我称之为令牌),这些值将插入到与Ajax相同的页面中。Ajax会将这个令牌和其他参数一起传递到process.php页面,然后您可以检查这个令牌是否有效

更新

有关令牌,请参见此问题


正如Jason LeBrun所说,要阻止人们模拟表单提交几乎是不可能的,但至少可以停止随意尝试提交表单。除了实现Nazary的建议(如果您真的愿意,这两个建议都很容易被接受),您还可以在服务器端生成一些独特的值(我称之为令牌),这些值将插入到与Ajax相同的页面中。Ajax会将这个令牌和其他参数一起传递到process.php页面,然后您可以检查这个令牌是否有效

更新

有关令牌,请参见此问题