हमारे पास एक स्प्रिंग-बूट (2.4.2) एप्लिकेशन और एक एस्पेक्ट क्लास है जो हमारे द्वारा परिभाषित, और स्पेल हैंडलिंग का उपयोग करते हुए एक कस्टम एनोटेशन के साथ एनोटेट किए गए "अराउंड" तरीकों से कुछ हैंडलिंग करता है।

स्पेल एक्सप्रेशन को हमारे द्वारा एनोटेशन में फ़ील्ड के रूप में परिभाषित किया गया है।

सोनार उपकरण चलाते समय, Findsecbugs के साथ, हमें बताया जाता है कि हमारे पास कोड में एक भेद्यता है, त्रुटि के साथ "org/springframework/expression/ExpressionParser.parseExpression(Ljava/lang/String;)Lorg/springframework/ अभिव्यक्ति/अभिव्यक्ति; कोड इंजेक्शन (स्प्रिंग एक्सप्रेशन) के प्रति संवेदनशील हो सकता है"। आपत्तिजनक रेखा नीचे पंक्ति 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 "";
}

ऐसा लगता है कि इस कोड में कोई भेद्यता नहीं है, क्योंकि स्प्रिंग एक्सप्रेशन के लिए इनपुट हमारे द्वारा प्रदान किया गया है। क्या यह Findsecbugs द्वारा गलत सकारात्मक है? <@SuppressFBWarnings(value = {"SPEL_INJECTION"}, औचित्य = "गलत सकारात्मक")> एनोटेशन का उपयोग करने के अलावा, सोनार और फाइंडसेकबग्स त्रुटि को प्रकट होने से रोकने का कोई तरीका है?

1
razvanone 5 फरवरी 2021, 09:37

1 उत्तर

सबसे बढ़िया उत्तर

MyCustomAnnotation.entityId() द्वारा दिया गया मान एक ऐसा व्यंजक है जिसे आपके कोड में हार्ड-कोड किया गया है। इस वजह से मैं स्रोत को सुरक्षित मानूंगा।

आप कोड लिखने वाले डेवलपर्स पर भरोसा कर सकते हैं। आप दूरस्थ उपयोगकर्ताओं पर भरोसा नहीं कर सकते। यहां मूल्य केवल डेवलपर द्वारा नियंत्रित किया जाता है।


साइड नोट: मुझे लगता है कि यह उचित होगा कि टूल एनोटेशन को हमेशा सुरक्षित माने। इसके लिए मैंने एक टिकट बनाया

1
h3xStream 3 अगस्त 2021, 09:28