2011-01-31 72 views
0

我正在使用Ajax进行JQUERY处理。 Data_string被发送到我的process.php页面,保存它。如何防止篡改AJAX进程页面?

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

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

回答

1

虽然Jason LeBrun表示几乎不可能阻止人们模拟表单提交,但您至少可以停止偶然的尝试。除了实现Nazariy的建议(如果你真的想要这些建议都容易得到),你也可以在服务器端产生一些独特的价值(我称之为令牌),它将被插入到你的同一页面中阿贾克斯。然后,Ajax会将此令牌与其他参数一起传递给process.php页面,因此您可以检查该令牌是否有效。

UPDATE

看到在这个问题上的令牌

anti-CSRF token and Javascript

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有关职位之间的差异,并得到

0

你不能阻止人们对人工模拟提交表单数据你的网页。你可以使它变得更加困难,但是你将无法完全防止它。