我正在使用JQuery Mobile制作移动游戏,这是一个多页模板(所以1个html文件中的所有页面都可以使用PhoneGap)。
因为它是HTML我使用JQuerys $ .post函数将数据发送到php脚本,例如login.php,register.php,它从MySQL数据库添加/更新/删除数据。
当我$ .post到login.php时,在验证时我返回用户ID,然后使用CryptoJS AES对客户端进行加密,将其存储在HTML5的localStorage中,当我需要向受保护页面发出请求时,发送此加密userID,解密服务器端,并在假设用户通过身份验证的情况下执行MySQL命令。
这个问题与cookies不同,localStorage变量可以持续很长一段时间,如果可以执行XSS,我认为这会使我的应用程序容易受到会话劫持的攻击。</ p>
我想代表我的用户尽可能保证安全,有人可以告诉我如何正确实施防止会话劫持我所描述的弱点的安全措施吗?
答案 0 :(得分:1)
通常的PHP session_start()
方法可以通过HTTPS使用,我认为这是最好的解决方案。让服务器为您处理会话。正如SilverlightFox指出的那样,使用http only session cookies是个好主意。在开始会话之前,请使用session_set_cookie_params之类的内容。
//10 minute session, forces https only and attempts to set the httponly flag
session_set_cookie_params(600, '/', '.domain.com', true, true);
session_start();
您还应该查看基于令牌的身份验证,因为它也涵盖了“访问控制”。
注意:为了防止“中间人”攻击,这两种方法都要求通过HTTPS发送/接收任何cookie /令牌。
这是网络应用的常见问题。我真的推荐this blog article,因为它更深入地解释了这个问题。但我也必须指出你的方法中的一些主要安全漏洞。
首先,在客户端进行任何类型的加密被认为是不安全的,因为客户端必须在加密之前处理“敏感”明文数据。任何人都可以查看客户端代码并查看最新情况。
此外,攻击者可能能够找出如何加密(并因此欺骗)他们想要的任何ID,因为共享的AES密钥需要对客户端加密代码可用。
HTML5 localStorage / sessionStorage只是一个可以跨请求保留的数据存储区。由于浏览器无论如何都不会导航,你不会比普通的javascript变量获得任何好处(除了可能在用户决定刷新/重置时能够重新加载状态)。它在认证方面没有实际用途。