如何防止恶意使用jQuery post处理程序?

时间:2011-04-27 20:16:25

标签: php jquery post

我使用jquery POST调用来获取数据以显示在我网站的各个部分。

通常,他们POST到单个'ajax_handler.php'页面,该页面读取所请求的参数并返回相关数据。典型参数可能是'get_order_details',123

如何阻止用户发布到脚本以尝试检索他们无法访问的数据?我知道我可以验证数据是否属于当前登录的用户,但是我怎么能阻止用户猜测'get_some_info'可能有处理程序?

由于用户甚至可以直接从URL运行javascript,这对我来说似乎是一个主要的安全问题,因为客户端可以访问SESSION和COOKIE数据(否则我将用于安全性)。

我想我可以先用随机字符串命名每个处理程序标识符,但我不想牺牲我的代码的易读性。

3 个答案:

答案 0 :(得分:3)

使用随机字符串命名您的处理程序是通过默默无闻的安全性,虽然它可能会使某人放慢速度,但它不会阻止它们。

最好的办法是每次访问页面时都存储会话或数据库校验和。然后还发送相同的校验和以及POST内容。通过AJAX或其他方式提交表单时,您需要比较校验和。如果它们不匹配,那么您知道用户不在相应的页面上并且正在尝试通过其他方法访问该处理程序。

答案 1 :(得分:1)

对于每个用户,您可以在数据库中存储他应该能够查看哪些数据以及哪些数据不应该查看。每次收到请求时,例如get_order_details,都应调用一个执行安全检查的函数,以确保用户已登录,并且他可以访问'get_order_details'方法或他尝试的任何其他方法访问。

答案 2 :(得分:0)

您尝试做的事情与互联网的运作方式基本上是对立的。您不能也不应该尝试限制用户向您的服务发出请求的方式。这是一种极其过时和倒退的思维方式。不要试图限制用户使用您服务的方式,而要感谢他们首先使用您的服务。

您所能做的就是确保用户经过身份验证,并且可以访问他们要求的记录。如果您使用的系统没有身份验证,并且您希望阻止用户“猜测”下一条记录的ID,请不要使用顺序ID。使用随机生成的字符串作为标识符。使它们足够长,以至于用户很难偶然发现其他记录。