据我所知,大多数具有身份验证的网站都以这种方式工作:
它会导致一些问题,例如CSRF。我知道它们都不是无法解决的,但请考虑这种方法:
http://www.myapp.com/articles?session_key=af18db9c10a916ec12
)这种方法在安全性方面是否更好?它的缺点是什么?
答案 0 :(得分:0)
这是一个很好的主意。两个快速的事情浮现在脑海中(虽然我确信还有更多要说的):
最后,您仍在从浏览器向服务器发送会话密钥,您只是使用GET ...
标题行而不是Cookie: ...
行。黑客仍然可以通过欺骗整个请求来打破这一点。但是,特别是对于黑客欺骗用户无意中在可信站点上提交表单的XSRF攻击,您的方案可能通过仅为正在运行的应用程序中的链接提供会话密钥来降低风险(而不是在每个页面加载时)用饼干)。太酷了!
出于安全原因,某些浏览器(特别是在企业界)完全禁用了javascript。它占整个网络使用人口的一小部分,但您必须考虑到您的受众。通常,更改默认浏览器行为是一种风险。
<强>附录:强>
阻止XSRF攻击的一种“标准”方法是在提供包含表单的任何页面时随机生成令牌。令牌存储在服务器上的会话中,并存储在正在提供的表单中的隐藏字段中。提交表单时,检查它是否包含与服务器会话中的标记匹配的标记。这与您的解决方案基本相同(它保证表单是从您的应用程序提供的页面提交的),但不需要更改默认的浏览器行为。