我正在构建一个浏览器游戏,并使用大量的ajax代替页面刷新。我使用的是PHP和JavaScript。在做了很多工作之后,我注意到ajax并不完全安全。我担心的威胁是说某人想要查看我的SQL服务器上的某些信息,他们只需将正确的信息输入到与我的ajax调用相关联的.php文件中即可。我正在使用GET风格的ajax调用,这是一个坏主意。无论如何,经过大量的研究,我有以下安全措施。我切换到POST(这不是真的更安全,但它是一个小错误)。我也有一个提到的地方,它又是伪造的,但又是另一个威慑力量。Ajax安全(我希望)
最后的措施我已经到位,并且是这个问题的焦点,当我的网站被加载时,我有一个80个字符的十六进制密钥生成并保存在会话中,当我发送ajax调用时,我也发送在
challenge= <?php $_SESSION["challenge"]; ?>
形式的挑战,现在关键当AJAX的PHP文件中读取这一点,检查是否发送的询问配衬会话的挑战。现在这本身不会做太多,因为你可以简单地打开萤火虫,看看发送的问题很容易。所以我所做的就是一旦使用了这个挑战,它会在会话中产生一个新的挑战。
所以我的问题是,从这个地方看,只有看到挑战关键字发送后什么时候才能看到什么,然后它会更新并且在发送之前再也看不到它,这使得它成为不可能从另一个来源发送伪造的请求。所以没有人看到任何这种安全方法的循环漏洞或有任何额外的想法或想法。
这听起来就像我想要的那样,你能给我一些关于如何使用这个唯一标识符来验证他人的信息吗? – tye 2011-03-17 13:53:10
如果您正在制作游戏,我会假设您可能已经制定了用户和注册。除此之外,你正在寻找通常被称为“ACL”的东西。从本质上讲,用户(或用户组)被赋予许可权限(“可以添加小部件”,“可以编辑*自己的小部件”,“不能删除小部件”等)。对另一个问题来说,这是一个很好的话题,而且这个问题可能已经被很好地提出来了。 – 2011-03-17 14:08:01