Hibernate Validator的@SafeHtml来验证字符串有什么替代方案?
2022-09-02 10:20:32
如 JavaDocs 中所述,它将在将来的发行版中删除。是否有任何替代库通过注释进行类似的工作?
如 JavaDocs 中所述,它将在将来的发行版中删除。是否有任何替代库通过注释进行类似的工作?
让我们首先解释一下弃用的原因:由于这个限制,我们最近遇到了一个安全问题(CVE)。这是由于我们的实现中的错误,但它使我们意识到这是非常脆弱的,并且可能是一罐安全方面的蠕虫。
现在的替代方法是根据我们最新的实现自己实现它,并在您自己的应用程序中维护它(可能由您自己进行调整)。
我们的博客上有一篇非常好的文章,解释了如何轻松做到这一点: https://in.relation.to/2017/03/02/adding-custom-constraint-definitions-via-the-java-service-loader/ .
基本上,这种变化是我们说,我们不想承担那些可能脆弱且需要大量关注的事情的责任,并且可能会针对部署它的应用程序平台进行调整。
更新:我在这里发布了完整的公告:https://in.relation.to/2019/11/20/hibernate-validator-610-6018-released/。
我的解决方案:
啪.xml
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.2</version>
</dependency>
NoHtml.java
@Documented
@Constraint(validatedBy = NoHtmlValidator.class)
@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface NoHtml {
String message() default "Unsafe html content";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
NoHtmlValidator.java
public class NoHtmlValidator implements ConstraintValidator<NoHtml, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext ctx) {
return value == null || Jsoup.isValid(value, Safelist.none());
}
}
任何豆类:
@NoHtml
private String name;
请参阅 jsoup - Sanitize HTML 和 Sanitizing User Input,第 II 部分(使用 Spring REST 进行验证)
更新:更改为Jsoup.clean..equals..
Jsoup.isValid