2012-09-25 14 views
25

से बच रहा है मैं बैकबोन.जेएस एप्लीकेशन बना रहा हूं और सोच रहा हूं कि बैकबोन.जेएस का उपयोग करते समय क्रमशः एक्सएसएस से बचने के लिए एक्सएसएस से निपटने का सबसे अच्छा तरीका क्या है।बैकबोन.जेएस और एक्सएसएस/एचटीएमएल

आधिकारिक Backbone.js दस्तावेज़ से मूल Todos example application में, डेटा बच नहीं गया है।

"><script>alert('xss');</script> 

एक बाकी सर्वर का उपयोग करते समय: के बाद से इस डेटा कार्य करने की प्रविष्टियों प्रस्तुत करना टेम्पलेट में प्रयोग किया जाता है, यह (ऊपर के लिंक पर reproduced किया जा सकता है) निम्न पाठ दर्ज करके जावास्क्रिप्ट कोड निष्पादित करने के लिए संभव है स्टोरेज बैकएंड के रूप में, यह एक्सएसएस प्रत्येक उपयोगकर्ता के लिए लगातार है।

आप इस समस्या को कैसे हल करते हैं?

मेरा विचार सर्वर पर डेटा से बचने के लिए है, इसलिए तत्काल लौटाया गया डेटा टेम्पलेट में उपयोग किया जा सकता है। क्या मुझे यह सुनिश्चित करने के लिए हमेशा wait: true का उपयोग करना होगा, कोई अनचाहे डेटा प्रदान नहीं किया जाता है? और संपादन के लिए, अनचाहे डेटा के साथ एक और विशेषता जोड़ें, जिसका उपयोग .val() का उपयोग कर टेक्स्टफील्ड को भरने के लिए किया जा सकता है?

या आप टेम्पलेट को प्रस्तुत करने से पहले, इनमें से कोई भी नहीं करते हैं और क्लाइंट पर डेटा से बचते हैं?

+2

मॉडल के लिए बचने के कार्य के बारे में क्या? http://backbonejs.org/#Model-escape – eveevans

+1

ऐसा लगता है कि उदाहरण अब तय किया गया है। –

उत्तर

48

टोडो उदाहरण सबसे साफ उदाहरण नहीं है। यह underscore's template engine का उपयोग करता है, इस प्रकार है:

<input class="edit" type="text" value="<%= title %>" /> 

सही ढंग से <%= की, एचटीएमएल बचने का उपयोग <%- बजाय करने के लिए:

<input class="edit" type="text" value="<%- title %>" /> 
2

रीढ़ की हड्डी में मानक तरीका model.escape(attribute) उपयोग करने के लिए है।

रीढ़ डॉक्स backbonejs.org/#Model-escape से

:

"इसी प्रकार प्राप्त करने के लिए है, लेकिन मॉडल के गुण के एचटीएमएल-भाग निकले संस्करण रिटर्न आप HTML में मॉडल के डेटा interpolating कर रहे हैं, विशेषताओं को पुनः प्राप्त करने पाएगा भागने का उपयोग कर। एक्सएसएस हमले। "

var hacker = new Backbone.Model({ 
    name: "<script>alert('xss')</script>" 
}); 

alert(hacker.escape('name'));