我正在设计一个身份验证系统,在客户端计算机上将一些哈希字符串存储为“令牌”
localStorage [‘tokens’] = [username,string1,string2,….]并且那些……
这种方法的主要问题是本地存储容易受到XSS的攻击,因为它可以通过JavaScript访问(当然,有一个易受XSS攻击的页面本身就是一个问题)。如果你的tokes足够小以适应饼干,那么这是放置它们的最佳位置。
如果在cookie上设置仅HTTP标志,则浏览器将不允许JavaScript访问它。如果您在cookie上设置安全标志,浏览器将仅使用HTTPS请求发送它。如果要发送与安全性相关的令牌,则应该使用两个标志。
如果用户数据很小(或可以压缩)并且适合用户cookie,则应使用cookie。这避免了对本地存储的需求以及随之而来的安全问题。
如果不是这种情况,那么您将被迫使用本地/集中存储,您应该注意的主要项目是 sql注入 当你从http参数读取令牌并直接在mysql查询中使用时。通常 mysql_real_escape_string 或参数化查询用于防止这种情况(细节 这里 )。你也应该逃避你的输入以防止 XSS 独立于会话存储策略。
需要注意的一些细节:
您的浏览器使用相同的源策略保护本地存储,因此Javascript代码在托管的页面上运行 http://a.com 无法访问由页面上运行的Javascript代码存储的本地存储 http://b.com 。如果您的网页存在XSS漏洞且人们可以将Javascript代码注入其中,则他们可以访问您的本地存储。
http://a.com
http://b.com
话虽如此,你的计划似乎是合理的。花一点时间来确保您的页面没有任何XSS漏洞似乎很好地利用了时间。