我正在构建一个浏览器游戏,我正在使用大量的ajax而不是页面刷新.我正在使用PHP和
javascript.经过大量的工作,我注意到ajax并不完全安全.我担心的威胁是说有人想在我的sql服务器上查找某些信息,他们只需要将正确的信息输入到与我的ajax调用关联的.PHP文件中.我正在使用GET样式的ajax调用,这是个坏主意.无论如何经过大量的研究后,我有以下安全措施.我切换到POST(这不是更安全,但它是一个小问题).我也有一个提到的地方,它也可以伪造,但又是另一种威慑力.
最后的措施我已经到位并且是这个问题的焦点,当我的网站被加载时,我生成并保存在会话中的80字符六角密钥,当我发送ajax调用时,我也发送了挑战密钥的形式
challenge= <?PHP $_SESSION["challenge"]; ?>
现在,当ajax PHP文件读取此信息时,它会检查发送的质询是否与会话质询相匹配.现在这本身不会做太多,因为你可以简单地打开萤火虫,看看容易发送什么挑战.所以我所做的就是一旦使用了挑战,它就会在会话中生成一个新挑战.
所以我的问题是这是多么安全,从我站在它看起来只能看到挑战键发送后然后它更新,他们再也看不到它,直到它被发送,使得不可能发送伪造来自其他来源的请求.所以有人看到这个安全方法的任何循环漏洞或有任何额外的想法或想法.
请参阅’meagar’的答案.
我想提一下:
通过传递Session中的标识符,您正在执行Session已经在做的事情.通常会有一个cookie,其中包含与您正在生成的标识符类似的唯一标识符,它基本上告诉您的应用程序,该人是谁.这就是PHP会话的工作方式.
在这种情况下,您需要做的是检查给定的请求 – POST或GET – 特定用户(其唯一用户ID或类似内容存储在会话中)是否有权添加/更改/删除/无论有什么特殊要求.
因此,对于“搜索”请求,您只会返回用户X有权查看的结果.这样,你不必担心他们发送的内容 – 如果用户没有权限做某事,系统就知道不让他们这样做.
因此“你应该验证所有请求”.
有人可以随意添加.