我正在构建一个浏览器游戏,即时通讯使用了大量的Ajax而不是页面刷新。我正在使用php和javascript。经过大量工作后,我注意到ajax并不完全安全。我担心的威胁是,某人想要在我的SQL Server上查找某人的信息,他们只需要在正确的信息中键入与我的Ajax调用关联的.php文件即可。我正在使用GET风格的ajax调用,这是一个坏主意。无论如何,经过大量研究,我已经采取了以下安全措施。我切换到了POST(实际上并没有任何安全性,但是有较小的威慑力)。我也有一个推荐的地方,它可以再次被伪造,但又是另一个威慑作用。

我已经采取的最终措施是该问题的焦点,当加载我的网站时,我在 session 中生成并保存了一个80字符的十六进制 key ,而当我发送ajax调用时,我也在以下位置发送了质询 key 形式

challenge= <?php $_SESSION["challenge"]; ?>

现在,当ajax php文件读取此内容时,它会检查发送的质询是否与 session 质询匹配。现在,这本身并不会做很多事情,因为您可以简单地打开 Firebug 并查看正在轻松发送的挑战。所以我要做的就是一旦使用了挑战,它就会在 session 中生成一个新的挑战。

因此,我的问题是,从当前位置看,这种安全性如何?在发送挑战 key 后,只能看到挑战 key 是什么,然后进行续订,并且在发送之前,他们无法再次看到它,从而无法发送伪造的 key 。来自另一个来源的请求。因此,没有人看到此安全方法有任何漏洞或有任何其他想法或想法。

最佳答案

请参阅“meagar”的答案。

我想提一下:

通过在Session中传递标识符,您可以执行Session已经在做的事情。通常有一个cookie,其唯一标识符与您所生成的标识符相似,实际上是在告诉您的应用程序该人是谁。通常,这就是PHP session 的工作方式。

在这种情况下,您需要做的是检查给定的请求-POST还是GET-特定用户(其唯一用户ID或类似名称存储在Session中)是否有权添加/更改/删除/与该特定请求无关。

因此,对于“搜索”请求,您将仅返回用户X有权查看的结果。这样,您不必担心他们发送的内容-如果用户没有权限执行某项操作,则系统知道不会让他们这样做。

因此,“您应该对所有请求进行身份验证”。

有人可以随意添加。

09-25 19:58
查看更多