मैं बस रेल के साथ शुरू कर रहा हूं, इसलिए मैं अपने न्यूबी कोड में संभावित भेद्यता के बारे में जानने के लिए Brakeman का उपयोग कर रहा हूं। यह उच्च-विश्वास "गतिशील प्रस्तुत पथ" मेरी show.js.erb
फ़ाइल में निम्न कोड के बारे में चेतावनी फेंक रहा है:रेल ब्रैकमन चेतावनी: गतिशील रेंडर पथ झूठा अलार्म?
$('#media-fragment').html('<%= escape_javascript(render(params[:partial])) %>');
मैं वास्तव में उम्मीद यह एक समस्या थी, इसलिए कोई आश्चर्य की बात है कि वहाँ। इसलिए मैं यह निम्नलिखित के लिए बदल दिया:
# controller:
def show
if legal_partial?
@allowed_partial = params[:partial]
else
raise StandardError, "unexpected partial request: #{params[:partial]}"
end
end
private
def legal_partial?
%w(screenshots video updates).include? params[:partial]
end
# ...
# show.js.erb
$('#media-fragment').html('<%= escape_javascript(render(@allowed_partial)) %>');
हालांकि मेरा मानना है कि कोड, अब सुरक्षित है brakeman अभी भी इस से नाखुश है। क्या उपयोगकर्ता इनपुट के आधार पर आंशिक प्रतिपादन को नियंत्रित करने के लिए एक और अधिक मूर्ख तरीका है?
मैं मॉडल विशेषताओं के लिए काम करने के लिए गार्ड हालत प्राप्त नहीं कर पा रहे। मेरे पास मेरे मॉडल पर एक विधि है: 'def sanitized_partial_path; अगर ["foo", "bar"] शामिल हैं? (विशेषता); "Path/to/# {विशेषता}"; अंत; 'और यह अभी भी झूठी सकारात्मक देता है। – Nick
@ निक ब्रैकमैन 'sanitized_partial_path' की सामग्री को देखने वाला नहीं है (हालांकि भविष्य में ब्रैकमेन प्रो इच्छा)। मेरे उत्तर में उदाहरण नियंत्रक क्रिया में एक आवृत्ति चर के असाइनमेंट के कारण काम करता है जिसे बाद में उपयोग में उपयोग किया जाता है। – Justin