spring-boot (2.4.2) アプリケーションと、SpEL 処理を使用して定義されたカスタム アノテーションで注釈が付けられた「Around」メソッドを処理する Aspect クラスがあります。
SpEL 式は、アノテーションのフィールドとして定義されています。
Sonar ツールを Findsecbugs と一緒に実行すると、コードに脆弱性があり、「This use of org/springframework/expression/ExpressionParser.parseExpression(Ljava/lang/String;)Lorg/springframework/式/式; コード インジェクションに対して脆弱である可能性があります (Spring Expression)". 問題のある行は、以下の 4 行目です。
1. private final ExpressionParser elParser = new SpelExpressionParser();
...
2. @Around(value = "@annotation(myCustomAnnotation)")
3. public Object aroundAdviceHandler(ProceedingJoinPoint joinPoint, MyCustomAnnotation myCustomAnnotation) throws Throwable {
...
4. **Expression expression = elParser.parseExpression(myCustomAnnotation.entityId());**
このアスペクトを使用する注釈付きコードは次のようになります。
@Transactional
@MyCustomAnnotation(entityId = "[0].id") // some other methods my have here only "[0]" or "[0].otherId"
public Long save(JustADto dto) {
最後に、カスタム注釈は次のようになります。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME) public
@interface MyCustomAnnotation {
String entityId() default "";
}
このコードには、Spring 式の入力が提供されているため、脆弱性はないようです。これは Findsecbugs による誤検出ですか? <@SuppressFBWarnings(value = {"SPEL_INJECTION"}, justification = "false positive")> 注釈を使用する以外に、Sonar & Findsecbugs エラーが表示されないようにする方法はありますか?