提问人:remya thekkuvettil 提问时间:9/8/2023 更新时间:9/8/2023 访问量:106
Springboot ReqeustBody 输入验证 HTML 元素
Springboot ReqeustBody input Validation for HTML elements
问:
我正在寻找一种方法来验证 Springboot 应用程序中 HTML 内容的请求正文字段,如下所示
{
"name": "<img src=x onerror=alert(1)>",
"value": "<img src=x onerror=alert(1)>"
}
我知道我可以使用javax.validation中的@Pattern(regexp = “[a-zA-Z]*”, message = “Name can only have letters”)。(在不同的用例中,我可能需要添加不同的复杂正则表达式来满足许多请求正文字段)。 有没有其他方法可以阻止Springboot中的HTML元素?
答:
0赞
ayoub
9/8/2023
#1
仅使用正则表达式不足以阻止 Html 元素,因此,您可以使用一些库作为 OWASP java html 清理程序来删除潜在的危险内容。
添加依赖:
<!-- https://mvnrepository.com/artifact/com.googlecode.owasp-java-html-sanitizer/owasp-java-html-sanitizer --> <dependency> <groupId>com.googlecode.owasp-java-html-sanitizer</groupId> <artifactId>owasp-java-html-sanitizer</artifactId> <version>20220608.1</version> </dependency>
创建用于验证的批注
@Documented @Constraint(validatedBy = HtmlSanitizerValidator.class) @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) public @interface SanitizeHtml { String message() default "not allowed!!"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
为注释创建验证程序
public class HtmlSanitizerValidator implements ConstraintValidator<SanitizeHtml, String> { @Override public boolean isValid(String untrustedHTML, ConstraintValidatorContext context) { if (untrustedHTML == null) { return true; } PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS); String safeHTML = policy.sanitize(untrustedHTML); return untrustedHTML.equals(safeHTML); //if true, this means there is no HTML content, but false means there have been an attack!! } }
为您的字段使用注释:
public class yourDto { @SanitizeHtml private String name; @SanitizeHtml private String value; }
希望这对你有所帮助!
铌: 只要确保如果你想在你的safeHTML中允许Html标签,但要确保它显示为纯文本而不执行任何有害的代码,你可以使用它(注意依赖关系):
String safeHTML = Encode.forHtml(untrustedHTML)
而不是:
PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS);
String safeHTML = policy.sanitize(untrustedHTML);
这是 Github 存储库,用于更多: https://github.com/OWASP/java-html-sanitizer
评论