除了从文本字段找到返回页面的未经处理的输入之外,还有哪些常见的XSS向量?试图阻止恶意访问cookie中的csrf令牌。我正在转义文本输入中的不安全字符(可能在Java servlet中也会在数据库插入或打印到UI之前添加不安全字符)。我还应该在哪里寻找进入站点的XSS ?
如果我正确理解了这个问题,您通过对UI上输入字段的用户输入进行编码,减轻了某些形式的反射和存储XSS。
你应该注意以下几点:
- 并非所有用户输入都是通过UI输入字段。cookie和请求头也是用户输入的例子,当然还有隐藏字段或json/xml/任何其他类型的参数。如果您的应用程序处理任何文件或接收http以外的外部请求,这些也是用户输入。甚至数据库的字段也最好作为用户输入处理,并在将其写入页面时进行编码,特别是当其他组件也写入数据库时。 也许在您的应用程序中已经出现了这种情况,但是为了使这个答案更全面:XSS更多的是一个输出问题,不管用户输入来自何处,解决方案大多数时候是输出编码(而不是输入验证/清理本身,特别是没有黑名单)。当然,也可能有谨慎的例外,输入验证确实很好地补充了正确的输出编码。
- 应根据写入数据的上下文选择编码方法(即。在编写javascript块或纯html时,您需要不同的编码;还要注意,javascript块不仅在脚本标签中,而且在事件属性(如onclick和其他)中。
- DOM XSS完全在客户端上,必须在Javascript中减轻。参见下面的相关OWASP指南。
- 存储和反射XSS防范小抄
- DOM XSS防范备忘单
- 测试反射、存储和DOM XSS。