我们的应用程序中有一些纯文本字段,我们试图防止XSS。例如,供用户评论帖子的评论字段(纯字段)。不应期望用户具有更改格式的能力,但是他们应该能够以纯文本形式编写任何内容,包括不同的语言,特殊字符,例如@,&,',*等。 我们也不允许使用“ <”和“>”。
因此,如果我在服务器端(Java)中检查输入String并通过验证而失败,用户应该使用“>”还是“ <”,就足够了吗?会暴露出任何安全隐患或限制吗?
public boolean isValid(String value) {
if (value == null) {
return true;
}
// Setting an arbitrary large number (should be enough for any article/text)
if (value.length() > 50000) {
return false;
}
return !value.contains(">") && !value.contains("<");
}
答案 0 :(得分:0)
通常,输入验证不足以抵御XSS。这个问题缺乏足够的细节来说明在这种特定情况下是否可以利用,但是无论哪种方式,仅依靠输入验证都不是一个好主意。
如果您打算针对XSS针对应用程序中的多个视图实施此通用措施,则几乎可以肯定会失败。
请考虑输入" onclick="alert(1)" x="
或javascript:alert(1)
作为href等等。而且,我们甚至都没有提到<script> var myvar = {{variable}}; </script>
和类似视图模板的最终案例。这是一堆无尽的蠕虫。
实际上防止XSS的唯一方法是根据上下文实现正确的输出编码 输出的内容写入(html,属性,javascript等),即使如此,您仍然必须要小心关于javascript:
以及直接写到Javascript上下文中的内容。