使用HttpOnly Cookies的XSS保护是否有效?

Tom*_*mas 3 security cookies httponly xmlhttprequest

我已经对HttpOnly cookie和存在的问题进行了一些研究,可以将XHR请求与TRACE方法结合使用,以获得从服务器回送的cookie值.

对于安全的Web应用程序,我目前有以下设置:

  • 会话cookie在登录时发送,其中设置了安全和httpOnly属性
  • 对完整域禁用TRACE http方法(返回"405 Method not allowed")

为了避免跨站点请求伪造,我在表单的隐藏字段中添加了一个随机键.必须在每个POST请求中返回此密钥才能接受请求.

除此之外,所有HTML都默认使用白名单进行转义,以选择允许的标签和属性,但要说明为什么这还不够:我们之前允许使用span上的style-attribute(例如为文本着色),可以用以下方式在Internet Explorer中传递javascript:

<span style="width: expression(alert('Example'));"> </span>
Run Code Online (Sandbox Code Playgroud)

然后是最后一个问题:有人能指出这个设置中可能存在缺陷的任何缺陷或建议吗?或者您使用相同或完全不同的方法?

已知问题:

  • 并非所有浏览器都支持httpOnly
  • 过滤css JS表达式是不够的,@ import(外部样式表)也可以工作

mar*_*mar 6

基于你的帖子(标题有点误导)我假设你明白Httponly属性阻止通过document.cookie访问cookie并且没有做任何其他事情来防止XSS允许包括模仿用户的其他讨厌的东西(即,不需要窃取cookie并可以使用检索到的CSRF令牌),检查浏览器上的易受攻击的插件以安装恶意软件,安装javascript密钥记录器,扫描内部网络等,重写页面等.

正如您所说,每个标签的白名单标签和属性是不够的.您必须通过白名单正则表达式对属性值应用更严格的验证.

其他需要考虑的其他事项的不完整列表与XSS或CSRF没有直接关系:

  • 你如何处理不完整的HTML,如缺少结束标签?
  • 如何在用户输入中处理单引号,双引号和反斜杠?
  • 如何处理在不同上下文中输出的用户输入 - 例如在url链接,属性值等中?
  • 你检查输入实际匹配输入字符集编码吗?
  • 您是否在响应标头和元标记中明确设置了Content-Type?
  • 对于通过HTTP提供的中等敏感用户页面,如果有的话,您是否设置了适当的Cache-Control标头?
  • 您如何确保用户输入沙盒?具体来说,如果您允许CSS,您如何确保样式仅应用于受限区域并且不能更改其他区域?
  • 你有网站上的第三方javascript包括广告吗?
  • 如果会话cookie应该被保护以防止被篡改吗?
  • 您是否清理所有输入,包括可由用户修改的HTTP标头?
  • CSRF令牌是否真的是随机的 - 如果是,您如何生成随机令牌?如果没有,你如何构建它?
  • 您是否使用预准备语句和绑定参数?
  • 用户可以上传文件吗?
  • 您是否为用户上传的内容(如图片等)提供服务?如果是,您如何验证文件内容(GIFAR缺陷)并且是从同一域提供的文件?
  • 您是否提供API访问权限?如果是,它是否托管在同一个域中?你有什么跨域限制?