【问题标题】:How to add not valid pattern to Hibernate Validator?如何向 Hibernate Validator 添加无效模式?
【发布时间】:2019-05-15 11:18:18
【问题描述】:

我阅读了owasp.org 关于 XSS 攻击以及如何防止它们的文章。

在示例 2 中,他们说:

如果他们正在过滤

<script src=http://www.example.com/malicious-code.js></script>

%3cscript src=http://www.example.com/malicious-code.js%3e%3c/script%3e

\x3cscript src=http://www.example.com/malicious-code.js\x3e\x3c/script\x3e

我使用 Bean Validation 2.0 (JSR 380) 来保护应用程序并使用 @SafeHtml 注释来保护每个 String 字段。

问题是当我尝试从 owasp 示例中测试各种模式时:

User user = new User();
user.setFirstName("aaa<img src=`~`onerror=prompt(666)>a");
user.setMiddleInitial("<script>alert(document.cookie);</script>");
user.setLastName("\"><ScRiPt>alert(document.cookie)</ScRiPt>");
user.setPhone("<scr<script>ipt>alert(document.cookie)</script>");
user.setFax("<script src=\"http://attacker/xss.js\"></script>");
user.setCellular("<script type=\"text/vbscript\">alert(DOCUMENT.COOKIE)</script>");
user.setEmail("<script src=http://www.example.com/malicious-code.js></script>");
user.setAlertMethodCd("%3cscript src=http://www.example.com/malicious-code.js%3e%3c/script%3e");
user.setHrid("\\x3cscript src=http://www.example.com/malicious-code.js\\x3e\\x3c/script\\x3e");
user.setOrgUserId(">\"><script>alert(\"XSS\")</script>&");
user.setAddress1("\"><STYLE>@import\"javascript:alert('XSS')\";</STYLE>");
user.setAddress2("<IMG SRC=\"javascript:alert('XSS');\">");
user.setCity("<IMG SRC=javascript:alert('XSS')>");
user.setZipCode("<IMG SRC=JaVaScRiPt:alert('XSS')>");

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Set<ConstraintViolation<User>> violations = validator.validate(user);

Iterator<ConstraintViolation<User>> iterator = violations.iterator();
while (iterator.hasNext()) {
        ConstraintViolation<User> cv = iterator.next();
        System.out.println(cv.getRootBeanClass().getName() + "." + cv.getPropertyPath() + " " + cv.getMessage());
}
        assertEquals(14, violations.size());

实际结果:

User.fax fax should be valid
User.firstName First name should be valid
User.middleInitial middleInitialshould be valid
User.cellular cellular should be valid
User.orgUserId orgUserId should be valid
User.address2 address2 should be valid
User.phone phone should be valid
User.email Email should be valid.
User.city city should be valid
User.zipCode zipCode should be valid
User.lastName lastName should be valid
User.address1 address1 should be valid

java.lang.AssertionError: 
Expected :14
Actual   :12

如你所见:

user.setAlertMethodCd("%3cscript src=http://www.example.com/malicious-code.js%3e%3c/script%3e");
user.setHrid("\\x3cscript src=http://www.example.com/malicious-code.js\\x3e\\x3c/script\\x3e");

可以通过@SafeHtml注解。

您有遇到过此类问题吗?我可以以某种方式将新模式添加到黑名单吗?

【问题讨论】:

    标签: java spring xss hibernate-validator


    【解决方案1】:

    @SafeHTML对 HTML 实体使用非常简单的编码,这就是数据通过验证器的原因。

    我建议使用非常强大的编码器(OWASP Java Encoder for example)来对抗 XSS。

    防止 XSS 的最佳方法是使用白名单验证模式并使用良好的编码 => https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.md

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 2016-01-09
      • 1970-01-01
      • 2018-06-18
      • 2019-02-10
      • 1970-01-01
      • 2022-11-21
      • 2016-12-11
      • 1970-01-01
      相关资源
      最近更新 更多