2013-07-29 11 views
15

मैं इस तरह से मेरी JSP में तार प्रदर्शित:JSP/वसंत MVC में सभी स्ट्रिंग्स भागने

${someString} 

इस स्ट्रिंग सकता है, ज़ाहिर है, विशेष एचटीएमएल वर्ण होते हैं। वर्तमान में एचटीएमएल-दुर्भावनापूर्ण कोड इंजेक्ट करना संभव है (उदाहरण के लिए। अगर कुछ स्ट्रिंग एक जावास्क्रिप्ट है - <script src...>)।

मैं कैसे सुनिश्चित कर सकता हूं कि प्रिंटिंग से पहले सभी तार बच निकले हैं?

मैं स्प्रिंग एमवीसी और जेएसपी का उपयोग कर रहा हूं।

+0

यू निष्पादित करने के लिए चाहते हैं टैग या टैग को हटा दें? – newuser

+0

संभावित डुप्लिकेट: http: //stackoverflow.com/questions/4948532/where-should-i-escape-html-strings-jsp-page-or-servlets –

+0

@ न्यूस्यूसर मैं इसे से बचाना चाहता हूं, इसलिए उपयोगकर्ता '< पृष्ठ में पाठ के रूप में स्क्रिप्ट '। –

उत्तर

22

आप JSTL core उपयोग कर सकते हैं:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

उपयोग <c:out value="${someString}"/> टैग स्ट्रिंग्स प्रदर्शित करने के लिए। <c:out> एचटीएमएल अक्षरों से बच निकलता है ताकि आप क्रॉस-साइट स्क्रिप्टिंग से बच सकें, आप यह निर्दिष्ट कर सकते हैं कि escapeXml=true विशेषता सेट करके। एक अन्य लाभ यह है कि valuenull पर मूल्यांकन करने पर आप डिफ़ॉल्ट मान भी प्रदान कर सकते हैं।

आप fn:escapeXml() ईएल फ़ंक्शन का भी उपयोग कर सकते हैं। इसके लिए आपको JSTL functions शामिल करना होगा।

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 

एक और संभावित तरीका, कस्टम ELResolver का निर्माण करेगा।

ईएल अभिव्यक्ति मूल्यांकन के लिए चर और संपत्ति रिज़ॉल्यूशन व्यवहार के अनुकूलन को सक्षम करता है।

This blog यह कैसे किया जा सकता है इसका एक उदाहरण उदाहरण प्रदान करता है।


पूरे वसंत MVC अनुप्रयोग के लिए, आप web.xml में भागने निर्दिष्ट कर सकते हैं:

<context-param> 
    <param-name>defaultHtmlEscape</param-name> 
    <param-value>true</param-value> 
</context-param> 

लेकिन तब एस्केपिंग तरह spring टैग करने के लिए ही लागू होता है,:

<form:input path="formField" htmlEscape="true" /> 

अंत में, आप तीसरे पक्ष की लाइब्रेरी XSSFilter को आजमा सकते हैं।

+1

यह अच्छा है, लेकिन मुझे अपने जेएसपी में सभी आउटपुट स्कैन करना होगा। इसके अलावा एक नया व्यक्ति यह नहीं जानता कि यह उचित तरीका है।कोई स्वचालित/वैश्विक समाधान? –

+0

@JoshuaMN ने उत्तर अपडेट किया! – NINCOMPOOP

+0

मैंने अपने फॉर्म पर 'htmlEscape = "true" सेट करने का प्रयास किया है, लेकिन यह स्क्रिप्ट टैग से बच नहीं है, कोई विचार क्यों? –

0

तुम भी <spring:htmlEscape defaultHtmlEscape="true" />

+0

NINCOMPOOP का उत्तर देखें। "लेकिन फिर भागने केवल वसंत टैग पर लागू होता है।" – Alex78191

+0

यह SPEL वाक्यविन्यास '$ {variable}' के साथ काम नहीं कर रहा है। – Alex78191

0

का उपयोग कर JSP/जावा में पृष्ठ स्तर पर इस व्यवहार को नियंत्रित कर सकते आप इस कोड का उपयोग करना चाहिए:

JSP/HTML में:

<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" /> 
+0

कस्टम ELResolver सबसे अच्छा समाधान है! – Alex78191

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