2012-03-13 9 views
12

मेरे मौजूदा स्प्रिंग वेब MVC आवेदन नियंत्रक में निम्नलिखित हैंडलर मानचित्रण है।यूआरएल में एचटीएमएल फ़िल्टरिंग स्प्रिंग एमवीसी एप्लीकेशन - क्या यह एक सुरक्षा समस्या है?

@RequestMapping(method = RequestMethod.GET, value = "/welcome") 

मैं निम्नलिखित अनुरोध http://www.example.com/welcome को गति प्रदान करते हैं और इस ठीक काम करता है।

समस्या

http://www.example.com/welcome.check.blah 

भी काम करता है !!!

इसके अलावा, स्क्रिप्ट टैग के साथ एप्लिकेशन को एक HTTP GET अनुरोध URL को फिर से चलाया जा रहा है हालांकि यह प्राधिकरण में विफल रहता है।

उदाहरण http://www.example.com/welcome<script>alert("hi")</script> ब्राउज़र विंडो में और मेरे प्राधिकरण के तर्क का एक परिणाम के रूप में इस तरह के रूप में पुन: प्रदर्शित हो जाता है "अधिकृत नहीं" संदेश प्रदर्शित होता है।

मुझे आश्चर्य है कि यह एक सुरक्षा समस्या है और क्या मुझे कोड में कोई एन्कोडिंग/फ़िल्टरिंग करने की आवश्यकता है?

उत्तर

14

यह व्यवहार है विकल्प useSuffixPatternMatch जो RequestMappingHandlerMapping अंदर डिफ़ॉल्ट रूप से सच है की वजह से (मैं आप वसंत MVC 3.1 का उपयोग मान)।

useSuffixPatternMatch: चाहे प्रत्यय पैटर्न मिलान का उपयोग करना ("। *") जब अनुरोध करने के लिए पैटर्न से मेल खाते। यदि सक्षम किया गया है तो "/ users" में मैप की गई विधि भी "/users.*" से मेल खाती है। डिफ़ॉल्ट मान सत्य है"।

सेट करने के लिए useSuffixPatternMatchगलत पर, सबसे आसान तरीका @Configuration उपयोग करने के लिए है:

@Configuration 
@EnableWebMvc 
public class Api extends WebMvcConfigurationSupport { 

    @Override 
    public RequestMappingHandlerMapping requestMappingHandlerMapping() { 
     RequestMappingHandlerMapping mapping = super.requestMappingHandlerMapping(); 
     mapping.setUseSuffixPatternMatch(false); 
     return mapping; 
    } 

} 
+0

usesuffixPatternMatch के बारे में उनका कहना है के लिए धन्यवाद कि कोशिश करेंगे आप अन्य बिंदु के बारे में कोई जानकारी के है -।। यह एक सुरक्षा मुद्दा कर सकता है? हम के रूप में दर्ज यूआरएल redisplaying से ब्राउज़र को रोकने? – Raghav

+0

मैं इसे परीक्षण किया है और हाँ यूआरएल पुन: प्रदर्शित किया जाता है लेकिन

1

आप उस प्रकार की मैपिंग अनुरोध करने के लिए वसंत का उपयोग करते हैं (यानी "/ कुछ भी") वसंत वास्तव में अपने नियंत्रक कई URL का मानचित्रण:

/स्वागत करते
/welcome.*
/स्वागत/

इसे रोकने के लिए - या तो अधिक विशिष्ट जब आप RequestMapping (यानी /welcome.htm), या मैन्युअल यूआरएल नक्शा अपने XML config में नियंत्रक करने के लिए:

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="/welcome">YourControllerBean</prop> 
      </props> 
     </property> 
</bean> 


चीयर्स, पीट

+0

प्रतिक्रिया के लिए धन्यवाद। लेकिन हूँ पहले से ही एनोटेशन आधारित अनुरोध हैंडलर मानचित्रण का उपयोग और मैं उपयोग कर सकते हैं नहीं ".htm" प्रत्यय :( – Raghav

1

तुम भी यूआरएल ढांचा उल्लेख करते हुए web.xml में इस सीमित कर सकते हैं। दे रही है "/ " के बजाय, आप अपने web.xml में "/ .htm" का उल्लेख कर सकते हैं।

कुछ

तरह
<servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/application/*.htm</url-pattern> 
    </servlet-mapping> 
+0

दुर्भाग्य से, मैं ऐसा नहीं कर सकते। भेजे अनुरोध के प्रारूप में आता है "/ स्वागत? कुंजी = मान" और नहीं "/welcome.html"। यह अंतर्निहित प्रौद्योगिकी मुखौटा करने के लिए किया गया है। – Raghav

+0

ओह ok..acceptable ... लेकिन मेरे लिए यह किसी भी खुलासा नहीं करता है अंतर्निहित प्रौद्योगिकी बल्कि यह यूआरएल ढांचा नहीं निर्दिष्ट करता है हालांकि ... अद्यतन उत्तर के लिए – raddykrish

2

उल्लेख वर्तमान वसंत जावा config में, वहाँ एक ही बात कॉन्फ़िगर करने के लिए एक से थोड़ा आसान तरीका है:

@Configuration 
public class DispatcherConfig extends WebMvcConfigurationSupport { 

    @Override 
    protected void configurePathMatch(PathMatchConfigurer configurer) { 
     configurer.setUseSuffixPatternMatch(false); 
    } 

} 
+0

धन्यवाद! –

संबंधित मुद्दे