如何防止AJAX请求入侵?

时间:2016-09-03 17:17:44

标签: mysql ajax

我有一个MySQL表,用于存储大量用户。每次用户正确回答问题时,我都会使用AJAX请求将他或她的分数加一。请求只发送一个整数,这是问题的ID。

我的问题是:如何防止虚假的AJAX请求?

由于它只是一个整数,我无法检查它是否是假的请求。所以我提出的唯一解决方案是在我的表中添加一个名为“yesterday_score”的额外列,因为它的名称描述它是一个在00:00时更改的列并保存用户得分。如果一个用户每天将他的分数增加到300以上,我认为这是一个黑客,我会阻止它。

4 个答案:

答案 0 :(得分:1)

检查然后使用后端进行回答,而不是使用前端。

永远不要相信用户输入规则第一!

答案 1 :(得分:1)

您可以使用数据库用来更新数字的语言,而不是将数字发送到数据库。所以在MySQL中

UPDATE users SET score = score + 1 WHERE user_id = 12

user_id可以通过将其与会话或某种类型进行比较来验证。一定要使用准备好的陈述。

答案 2 :(得分:0)

我阅读了很多相关的页面,一些用户提出了一些类似的解决方案:“如果用户在10ms内点击10次爆头,那么你就踢他了。写一个聪明的作弊检测算法。” 在同一个问题上有一个答案:

  

在这种情况下,作为客户端,无法避免伪造请求   浏览器已经拥有了发出请求所需的一切;它是   只是对恶意用户进行一些调试以找出方法   向你的后端发出任意请求,甚至可能使用   您自己的代码,以使其更容易。你不需要“加密   “技巧”,你只需要混淆,而且只会伪造一个   有点不方便,但仍然不是不可能。

在此页面中

How to block external http requests? (securing AJAX calls)

我也可以使用PHPIDS。但是因为知道我认为我会坚持我的解决方案,我添加另一个专栏并保持用户的“昨天得分”,如果用户今天获得超过100分,我将知道他是在做出绝对欺骗,所以我不会增加额外得分

答案 3 :(得分:-1)

添加隐藏字段以形成,并输入 - md5(session_id())

如果答案是正确的 - session_regenerate_id();