我已经对HttpOnly cookie和存在的问题进行了一些研究,可以将XHR请求与TRACE方法结合使用,以便从服务器回送cookie值。
对于安全的Web应用程序,我目前有以下设置:
为避免跨站点请求伪造,我在表单的隐藏字段中添加了一个随机键。必须在每个POST请求中返回此密钥才能接受请求。
除此之外,所有HTML都默认使用白名单进行转义,以选择允许的标签和属性,但要说明为什么这还不够:我们之前允许使用span上的style-attribute(例如为文本着色) ),可用于通过以下方式在Internet Explorer中传递javascript:
<span style="width: expression(alert('Example'));"> </span>
然后是最后一个问题:有人能指出这个设置中可能出现的缺陷的任何缺陷或建议吗?或者你使用相同或完全不同的方法?
已知问题:
答案 0 :(得分:5)
基于你的帖子(标题有点误导)我假设你明白Httponly属性阻止了通过document.cookie访问cookie,并且没有做任何其他事情来防止XSS允许包括模仿用户的其他讨厌的事情(即,'don'需要窃取cookie并可以使用检索到的CSRF令牌,检查浏览器上的易受攻击的插件以安装恶意软件,安装javascript密钥记录器,扫描内部网络等,重写页面等。
正如您所说,每个标签的白名单标签和属性是不够的。您必须通过白名单正则表达式对属性值应用更严格的验证。
其他需要考虑的其他事项的不完整列表与XSS或CSRF没有直接关系:
答案 1 :(得分:1)
HttpOnly Cookies是一个很好的安全措施,但它不是为了阻止XSS,只是让攻击者更难以利用xss漏洞。让我详细说明一下。
基于令牌的xsrf secuirty系统可以使用XSS绕过,因此攻击者不需要知道cookie来利用xss漏洞。
避免跨站点请求伪造我 在隐藏中添加了一个随机密钥 字段到表格。这个关键是必须的 在每个POST请求中返回 请求被接受。
例如,使用XSS攻击者可以执行JavaScript,可以使用xmlhttprequest读取域上的任何页面。因此,通过使用xmlhttprequest,攻击者可以读取XSRF令牌,然后使用它来伪造POST请求。这是因为XSS的一个属性是允许Same Origin Policy中断。作为一个例子,Here是我写的一个现实世界的漏洞,它完成了我刚才解释的内容。
阻止XSS的最佳方法是将像<>
这样的通用字符转换为相应的html实体。在PHP中我建议:
$var=htmlspeicalchars($var,ENT_QUOTES);
这将修复单引号和双引号,以便它可以停止大多数 xss。即使产生的刺痛是在html标签中。例如,如果替换引号,攻击者就无法使用此漏洞。这是因为攻击者必须打破引号才能执行“onload =”。
$var="' onload='alert(document.cookie)'";
进入这个html:
print("<img src='http://HOST/img.php?=".$var."'>");
HOWEVER ,您使用<span>
标记列出的特定情况仍然可能存在问题,因为攻击者不需要引号!如果你放入<script>
标签,你也会有一个xss漏洞。只要确保放置用户输入的位置,就没有针对所有漏洞的“全部捕获”或“银弹”。
利用HTTP“TRACE”方法的“XST”攻击在实践中并不是一种现实的攻击。原因是攻击者无法强制Web浏览器发出“TRACE”http请求。在“GET”的情况下,攻击者可以使用javascript或<img>
标记强制执行“GET”和“POST”方法,但HTTP标头的其余部分不受限制。请记住,几乎所有Apache系统都默认启用TRACE,如果它真的很危险,它将被一起删除。如果Apache支持TRACE,许多安全测试工具(如Nessus)将抛出错误,也可以轻松禁用它。