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


How to protect from malicious use of jQuery post handler?

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

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

我怎么能阻止用户张贴到脚本,试图检索数据,他们不应该能够?例如,我知道我可以验证数据是否属于当前登录的用户,但我如何阻止用户"猜测"可能存在"get_some_info"的处理程序?

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

我想我可以开始用一个随机字符串命名我的每个处理程序标识符,但我宁愿不损害我的代码的易读性。

用一个随机字符串命名你的处理程序是通过模糊的安全性,虽然它可能会减慢某些人的速度,但它不会阻止他们。

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

对于每个用户,您可以在数据库中存储他可以查看哪些数据,不可以查看哪些数据。每次你得到一个请求,例如get_order_details,你应该调用一个函数来做你的安全检查,以确保用户登录,他有访问'get_order_details'方法或任何其他方法,他试图访问。

你想做的事情与互联网的运作方式完全背道而驰。您不能也不应该试图限制用户向您的服务发出请求的方式。这是一种非常过时和落后的思维方式。与其试图限制用户使用你的服务的方式,不如感谢他们一开始就在使用你的服务。

你所能做的就是确保用户是经过认证的,并且有权限访问他们请求的记录。如果您正在使用一个没有身份验证的系统,并且您希望防止用户"猜测"下一条记录的ID,那么不要使用顺序ID。使用随机生成的字符串作为标识符。让它们足够长,这样用户就很难偶然发现其他记录。