使用Javascript XmlHttpRequest和PHP保护Web服务调用

Moa*_*Plz 3 php security authentication web-services

因此,在游戏中,我希望能够让客户端(Web浏览器)和服务器之间的所有功能通过AJAX调用与PHP Web服务进行交互.这是实现此类功能的一种非常简单的方法,除了它有一些主要缺点:

  1. 使用网络嗅探器的任何人都可以看到请求的格式(除非他们使用SSL)并复制它们
  2. 任何使用浏览器玩游戏的人都可以查看包含的Javascript文件,看看提交XHR的情况

因此,为了解决这些问题中的第一个问题,我将使用与服务器的HTTPS连接(这是我如何实现SSL的正确性?),对于这两个问题中的第二个,我能想到的是混淆/最小化我的Javascript码.

有没有人对我如何验证我的PHP文件正在使用的Web服务调用有任何想法?如果我在客户端使用用户名/ PW,则攻击者只需查看Javascript文件即可查找凭据.如果我尝试使用IP地址作为一种身份验证方法,那么我觉得这只会打开另外一堆蠕虫.我基本上想确保Web服务调用来自游戏客户端.

Bai*_*ker 7

Sneaky:在游戏情况下验证用户生成内容的真实性并不容易.我建议在JavaScript和服务器之间发送混乱的乱码命令.例如,如果您要将用户的x坐标发送到服务器而不是:

ajax.send('userXLocation=80');
Run Code Online (Sandbox Code Playgroud)

尝试一些不是简单英语的东西:

ajax.send('J{};;%FI=80');
Run Code Online (Sandbox Code Playgroud)

肯定不是防弹,但是如果用一些好的JS缩小/混淆,用户将难以区分发送的命令,如果他们能够理解的是数字.在您的JS代码中,乱码必须是硬编码的,但在PHP中,您可以使用一个将乱码映射到实际命令的数组.

额外鬼鬼祟祟:使用固定长度预先插入的数字作为命令,而不是乱码.用户X移动到80可能是:24080


Sneaky:您还可以尝试偶尔发送一个唯一的会话标识符(类似于半公钥),并指示JS使用该会话标识符对所有消息进行编码.这可能会被破解,但它增加了任何破解尝试的时间.

额外偷偷摸摸:这个会话标识符可能是服务器最后一次响应的文本,所以每次请求都会改变,但黑客不会看到任何明显的消息告诉JS密钥已经改变.这将只是JS和PHP之间无害的沟通.


Sneaky:这是另一个临时解决方案,但是为了混淆数字,您可以决定在发送之前添加或减去每个数字的常量(可能是会话中唯一的一个).因此,如果黑客知道他在X位置80并且寻找包含80的通信他/她将不会看到任何因为JS和PHP已经决定在每个数字上添加5.85将能够通过未被发现的.

Super Sneaky:与上面类似,不是同意数字混淆常量,而是使用服务器最后发送给JS的数字.黑客再次感到困惑,为什么数字不断变化,但没有消息通知JS改变其数字.


Sneaky:再次暂时,但是当混淆代码尝试混合逻辑与基础东西(创建一个ajax对象)时,即使对于Chrome黑客的漂亮打印也会发现你的代码难以破译.要考虑的其他事情可能是完全放弃在帖子中放置变量.它不会持续很长时间,但通过cookie(将与ajax请求一起发送)传递命令将是偷偷摸摸的.为了更加偷偷摸摸,你可以让PHP和JavaScript决定何时在post和cookie通信之间来回切换,或者只使用post来表示非敏感的东西.

超级偷偷摸摸:将核心游戏逻辑和通信放在一个名为的文件中jquery-1.6.2.min.js.我保证大多数试图破解你的脚本的人会忽略它.

Ninja Worthy:如果您选择在cookie和发布请求之间切换,请在未使用的传输上创建蜜罐.因此,在PHP发送响应后说:"嘿,让我们转向cookie!" 和JavaScript说,"当然,"PHP应该监听通过POST进行通信的尝试.它应该假设,因为JS正在通过cookie进行通信(现在)如果尝试发布请求,则涉及一些黑客行为.然后它应该用"你被破坏"的消息吓唬用户,甚至暂时禁止.这当然应该在他们切换回POST通信时翻转.

超越忍者:您还可以发送与POST/Cookie相同的GET请求,这些请求将永久保存为蜂蜜.如果GET和POST/COOKIE之间存在差异,那么黑客就会认为它就像更改一些获取变量一样简单,并且您可以显示相同的"你被抓住"消息,可能会暂时或永久禁止你的游戏.


最后几件事:

  • 利用新的网络技术.如果可用,您可以使用Web套接字作为传输,使其成为蜜罐四方(WebSockets,POST,Cookies和GET).您还可以使用Web worker隐藏特殊代码的执行.虽然您可以为工作人员打开JS文件,但我无论如何都不知道从控制台或FireBug直接访问worker的范围.
  • 使用愚蠢的黑客对您有利.置于黑客所期望的愚蠢事物中.如果某些安全措施看起来很糟糕或容易破解,那么黑客可能会变得孤独或认为你是一个糟糕的程序员.然后,他们会继续搞乱像蜜罐运输系统这样的事情并被破坏!
  • 最后,始终关注奇怪的请求模式.如果一个玩家的最大速度是每秒10个像素,但是在两个请求中,彼此间隔只有一秒,行进的距离是20个像素,PHP应该知道某些东西已经上升.您甚至可以通过发送快速AJAX消息来允许PHP跟踪消息操作和发送时间,嘿嘿我即将向您发送消息.如果用户篡改实际消息,则第一条消息与包含数据的消息之间的时间将在几秒钟内变化.PHP可以注意这一点,因为它通常不会花费5秒多的时间来处理数据并发送AJAX请求.