用于防止XSS攻击的java纯文本字段验证
我们在应用程序中有几个普通的文本字段,我们正试图保护它们免受XSS攻击。例如,用户对帖子发表评论的评论字段是普通字段。用户不需要更改格式,但他们应该能够用纯文本编写任何内容,包括不同的语言、特殊字符,如@、&;、'、*,等 我们也同意不允许“<以及“>;”
因此,考虑到这一点,如果我在服务器端(Java)检查输入字符串,如果用户使用“>;”则验证失败,这就足够了吗还是“<;”?这会暴露出任何安全问题或限制吗
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("<");
}
# 1 楼答案
一般来说,输入验证并不能充分防止XSS。这个问题缺乏足够的细节来说明它在这种特定情况下是否可以被利用,但不管怎样,仅仅依靠输入验证都不是一个好主意
如果您计划将其作为针对跨应用程序的多个视图的XSS的通用措施来实现,那么它几乎肯定会失败
考虑HLEF等的输入,如^ {CD1>},或^ {CD2>}。我们甚至没有提到带有
<script> var myvar = {{variable}}; </script>
和类似内容的视图模板的最终情况。这是一罐无穷无尽的虫子真正防止XSS的唯一方法是根据写入输出的上下文(html、属性、javascript等)实现适当的输出编码。即使如此,您仍然必须小心
javascript:
和直接写入javascript上下文的内容