2012-09-04 14 views
13

मैं सुरक्षा समस्याओं की पहचान के लिए Brakeman का उपयोग कर रहा हूं। यह किसी भी लिंक को ध्वजांकित कर रहा है जो क्रॉस साइट स्क्रिप्टिंग भेद्यता के रूप में params.merge का उपयोग करता है। मैं निम्नलिखित की तरह कुछ कैसे sanitize कर सकते हैं?params.merge और क्रॉस साइट स्क्रिप्टिंग

- @archives.each do |archive| 
    = link_to "FTP", params.merge(:action => :ftp, :archive => archive, :recipient => "company") 

उत्तर

15

आप एक नया केवल params जो आप उम्मीद और FTP लिंक का एक हिस्सा हो सकता है और कि अपने अतिरिक्त पैरामीटर विलय करने के लिए उपयोग करने के लिए अनुमति देना चाहते हैं की सामग्री पर आधारित हैश बनाना चाहिए।

क्या आप मुझे जो कुछ भी करना चाहते हैं उसे जोड़ने के लिए मुझे FTP लिंक जोड़ने की अनुमति देता है, जिससे सुरक्षा भेद्यता का दरवाजा खुलता है। params.merge(... में params के स्थान पर उपयोग के लिए हैश बनाने के द्वारा आप प्रभावी रूप से प्रत्याशित क्वेरीस्ट्रिंग घटकों को आपके द्वारा प्रस्तुत किए जा रहे टेम्पलेट में उपयोग के लिए श्वेतसूची बना रहे हैं।


एक GET उदाहरण के रूप में, यदि आप

/some/path?opt1=val1&opt2=val2 

अपने नियंत्रक कार्रवाई की तरह एक यूआरएल की उम्मीद आप

@cleaned_params = { opt1: params[:opt1], opt2: params[:opt2] } 
@cleaned_params.merge! action: :ftp, archive: archive, recipient: :company 

कर सकता और फिर link_to

= link_to "FTP", @cleaned_params 
को @cleaned_params पारित

इस तरह अगर मैं मैन्युअल रूप में की तरह

/some/path?opt1=val1&opt2=val2&maliciousopt=somexss 

params[:maliciousopt] यह कभी नहीं होगा एक URL दर्ज अपने FTPlink_to अपने ध्यान में रखते हुए।

समान व्यवहार POST अनुरोध करने के लिए लागू होता है, केवल दुर्भावनापूर्ण मैं प्रस्तुत करने में यह

<input type="hidden" name="maliciousopt" value="somexss" /> 
+0

धन्यवाद से पहले फार्म के लिए एक जोड़े क्षेत्रों जोड़ सकते हैं होने के लिए ... तुम मुझे एक उदाहरण दे सकते हैं? मुझे वास्तव में यह नहीं मिलता है। – snowangel

+0

आपके लिए मेरा उत्तर अपडेट किया गया। – deefour

+0

पूरी तरह से ऋणी - धन्यवाद। – snowangel

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