Spring有htmlEscape来逃避用户输入中可能不安全的HTML。我想将htmlEscape作为注释应用于后端基于Spring的代码(similar concept)。这有助于防止XSS攻击。
class MyCreateRequestDoc {
@NotBlank(message = 'A name must be specified')
@AsSafeHtml
String name
我相信这需要一个AOP模式,但我不知道如何在Java Spring中实现这样的东西。
我开始时:
package com.my.company.services..security
import groovy.util.logging.Slf4j
import org.aspectj.lang.ProceedingJoinPoint
import org.aspectj.lang.annotation.Around
import org.aspectj.lang.annotation.Aspect
import org.springframework.stereotype.Component
import org.springframework.web.util.HtmlUtils
@Aspect
@Slf4j
@Component
class AsSafeHtmlAspect {
@Around("@within(com.my.company.services.security.AsSafeHtml)")
void assertProperty(ProceedingJoinPoint pjp){
var input = 'get this from somewhere'
return toSafeHtml(input) //return?
}
private String toSafeHtml(input) {
return HtmlUtils.htmlEscape(input)
}
}
以上Around
中使用的相关注释:
package com.my.company.services.security
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
@Retention(RetentionPolicy.RUNTIME)
@interface AsSafeHtml {
}