2008-11-17 23 views

उत्तर

89

एचटीएमएल से बच। यह एक तरीका है जो < और> संख्यात्मक चरित्र संदर्भों में परिवर्तित करता है ताकि प्रतिपादन आपके एचटीएमएल को तोड़ न सके।

+12

और रेल 3 में एन्कोड किया जाएगा इसलिए इसकी आवश्यकता नहीं होगी। – lulalala

+1

@ लुलालाला क्या आप अपने दावे का बैकअप लेने के लिए एक लिंक प्रदान कर सकते हैं कि यह स्वचालित रूप से रेल 3 (और 4) में किया जाता है? – bfcoder

+1

@bfcoder, यह सभी मौजूदा रेल गाइड और दस्तावेजों में है। किसी भी स्ट्रिंग जो एक सुरक्षितबफर उदाहरण में नहीं है, एक दृश्य में एचटीएमएल से बच निकलेगा, यद्यपि आप अभी भी अन्य एस्केपिंग विधियों (जैसे जेसन, आदि) को कॉल कर सकते हैं यदि आपको उनकी आवश्यकता हो। मुझे लगता है कि यह स्पष्टीकरण उचित रूप से पूर्ण है: http://makandracards.com/makandra/2579-everything-you-now-about-html_safe-is-wrong – JasonTrue

14

<%=h वास्तव में 2 चीजें हो रही हैं। आप एक एआरबी टैग (<%=) खोल रहे हैं और सभी प्रतीकों से बचने के लिए रेल विधि h पर कॉल कर रहे हैं।

इन दो कॉल के बराबर हैं:

<%=h person.first_name %> 
<%= h(person.first_name) %> 

h विधि आमतौर पर HTML और उपयोगकर्ता के इनपुट रूपों से जावास्क्रिप्ट बचने के लिए प्रयोग किया जाता है।

+0

मुझे <% = भाग मिलता है लेकिन इस उदाहरण में एच() की आवश्यकता क्यों है ... मुझे पता है कि एच विधि का उपयोग एचटीएमएल और जावास्क्रिप्ट से उपयोगकर्ता इनपुट फॉर्म से बचने के लिए किया जाता है लेकिन 1) क्या आप बस इतना नहीं कह सकते <% = person.first_name%>? यदि नहीं, क्यों नहीं ... यानी, एच() को हल करने में क्या विशिष्ट समस्या है? यानी, अगर आप एच() विधि को कॉल नहीं करते हैं तो आपको क्या मिलेगा। – user2101068

12

hERB::Util कक्षा से html_escape के लिए एक विधि उपनाम है।

6

यदि आप धातु में हैं और कुछ HTML से बचना चाहते हैं तो HTML Rack::Utils.escape_html से बचने के लिए रैक में एक विधि भी है।

1

पार्टी के लिए देर हो चुकी है, लेकिन मैं html_escape पर एक और स्पष्टीकरण जोड़ रहा हूं कि उम्मीद है कि अन्य नोबों की मदद करने के लिए क्या हो रहा है, जो समझ रहा है कि क्या हो रहा है। रेल 3 और बाद में स्वचालित रूप से सभी आउटपुट से बच निकलते हैं और इसलिए बहुत कम स्थितियां हैं जहां html_escape उर्फ ​​h() की आवश्यकता होगी। जिसमें सबसे उल्लेखनीय है जब आप जब एक प्रस्तुतकर्ता वर्ग आदि में एचटीएमएल के साथ लिंक के निर्माण के उदाहरण के लिए html_safe विधि का उपयोग करना चाहते हैं:

#some_view.html.erb 
<span><%= @user.name %></span> #This is 100% fine and will be automatically escaped by Rails 3+ 
#Output => <span>Brian Kunzig</span> 

#Now say we want a link with html that we need preserved! OMG WHAT ARE DO?? 
<%=link_to "<span><i class='fa fa-user'></i>#{@user.name}</span>".html_safe #DANGER!!! 

ऊपर दिए लिंक पर गंभीर समस्याओं का कारण और के सभी प्रकार के लिए आप खोल सकते हैं xss (क्रॉस-साइट स्क्रिप्टिंग) हमले। सबसे सरल उदाहरण, यदि उपयोगकर्ता ने अपना नाम "<script>alert('omg');</script>" के रूप में सहेजा है और आपने html_safe पर इसका उपयोग किया है, तो यह किसी भी पेज को 'ओमग' कहकर अलर्ट प्राप्त करने के लिए उनके अनुमानित नाम को प्रस्तुत करेगा! यह एक बड़ी समस्या है। इस से बचने के लिए करते हैं:

<%=link_to "<span><i class='fa fa-user'></i>#{h(@user.name)}</span>".html_safe #Winning! 

एक उपयोगकर्ता हम homefree रहे द्वारा आपूर्ति की संभावित दागी डेटा से बचने के द्वारा!

0

एच html_escape के लिए बस उपनाम है। यह एक उपयोगिता विधि है जो आम तौर पर उपयोगकर्ता इनपुट फ़ॉर्म से एचटीएमएल और जावास्क्रिप्ट से बचने के लिए उपयोग की जाती है। यह विशेष गुणों को संख्यात्मक चरित्र संदर्भों में परिवर्तित करता है ताकि प्रतिपादन आपके एचटीएमएल को तोड़ न सके।

उदाहरण

<%= h "<p>Hello World</p>" %> 

इच्छा उत्पादन

<p>Hello World</p> 

देखने पर पाठ के रूप में होने के लिए, पैरा लागू नहीं किया जाएगा। इसे

&lt;p&gt;Hello World&lt;/p&gt;. 
संबंधित मुद्दे