2010-02-09 7 views

उत्तर

26

उससे अधिक :) यह आपके सुरक्षा मुद्दों को एक होने से पहले बंद कर देता है। यह निश्चित रूप से सुरक्षा रजत बुलेट नहीं है ... हम इसका इस्तेमाल करते थे (कुछ साल पहले जब मैं पर्ल परियोजनाओं में शामिल था) किसी भी स्क्रिप्ट में जो बाहरी रूप से सामने आया था (यानी कोई mod_perl ऐप) और हमने इसे बहुत उपयोगी पाया और इसे हमारी नीति बना दिया। यह कुछ चेकों करता है और यह काम है ..

Perl Security - perlsec दृढ़ता से भी यह सिफारिश की गई है (कुछ भी स्वचालित बातें करता है):

इस ध्वज [कलंक मोड] दृढ़ता से सर्वर कार्यक्रमों के लिए सुझाव दिया है और किसी भी कार्यक्रम पर चलने किसी और की ओर से, जैसे सीजीआई स्क्रिप्ट। एक बार टेंट मोड चालू हो जाने पर, यह आपकी शेष स्क्रिप्ट के लिए चालू है।

+6

टेंट मोड एक डेवलपर टूल है। यह सुरक्षा मुद्दों को रोकता या रोकता नहीं है। यह आपको दिखाता है कि आपको समस्याएं कहां हैं, लेकिन यह आपको सही तरीके से संभालने के लिए आप पर निर्भर करती है। –

+5

यह बिल्कुल भ्रामक नहीं है।टेंट चेकिंग आपकी सुरक्षा को थोड़ा बढ़ा नहीं देती है। मैं यह नहीं कह रहा हूं कि इसका इस्तेमाल न करें। बस यह मत सोचो कि यह आपकी रक्षा करने जा रहा है। यह केवल आपको दिखाता है कि आपको सुरक्षा पर विचार करना चाहिए। मैंने बहुत सारे "दांत-सुरक्षित" कार्यक्रमों को देखा है जिनके पास अभी भी असंबद्ध इनपुट की पुरानी सुरक्षा समस्याएं थीं। –

+3

@briandfoy ... कुख्यात '$ सुरक्षित = $ 1 के माध्यम से अगर $ unsafe = ~ /(.*)/' –

17

सबसे निश्चित रूप से!

$ echo '`rm -rf /`' | perl -Te 'eval while <>' 
Insecure dependency in eval while running with -T switch at -e line 1, <> line 1.
+10

हां। यदि आप वास्तव में उस भाग गए तो आप बहादुर हैं। मैं निश्चित रूप से यह सुनिश्चित करने के लिए एंटर कुंजी मारने से 3 घंटे पहले खर्च कर चुका हूं -T मेरे perl कमांड में था। – user198470

+2

शायद वह इसे उपयोगकर्ता के रूप में नहीं चला – Paul

+3

वैसे भी कुछ नहीं किया होता, 'मैन आरएम':' --no-preserve-root: '/' विशेष रूप से ' –

7

मुझे लगता है कि नया कोड विकसित होने पर टेंट मोड सबसे अच्छा काम करेगा जब हर कोई परिचित होगा।

यदि आपके पास कोई और कोड है जो खराब लिखा गया है, और आप इसे टेंट मोड में चलाते हैं - टर्लिंग नियमों के अनुसार टर्लिंग मर जाएगा, जो असुरक्षित नियम हैं।

टेंट मोड में कुछ छेद पैच किए गए हैं लेकिन सभी नहीं। सिस्टम ("$ unfiltered_user_input") मर जाएगा लेकिन पर्ल अभी भी एक निश्चित नाम वाले फ़ाइल में $ unfiltered_user_input डेटा लिख ​​सकता है (क्योंकि मुद्रित डेटा को 'सुरक्षित' माना जाता है) और उसके बाद उस फ़ाइल को सिस्टम() के साथ निष्पादित करें। लेकिन कुछ भी सबकुछ जांच नहीं सकता है।

विरासत ऐप्स पर इसका उपयोग करने के लिए वहां एक व्यापार है। जब पर्ल को दंडित डेटा पर असुरक्षित ऑपरेशन मिल जाता है तो यह मर जाएगा - जिसका मतलब है कि किसी को डेटा में अनदेखा करना होगा और डेटा को अनदेखा करने का क्या मतलब है, एप्लिकेशन को फिर से भरोसा करने से पहले, रेगेक्सपी की आवश्यकता है।

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

+0

' का इलाज न करें 'सिस्टम() 'चालू करने का यह उदाहरण एक उपयोगकर्ता से प्राप्त डेटा युक्त एक फ़ाइल एक अच्छा है। –

+10

भी दांत चेतावनियां हैं (-टी)। वे एक ही चीजों के बारे में चेतावनी देते हैं लेकिन वे आपके कार्यक्रम को नहीं रोकते हैं। विरासत कार्यक्रमों के लिए उन लोगों के साथ शुरू करें। –

13

Mastering Perl का "सुरक्षित प्रोग्रामिंग तकनीक" अध्याय लगभग पूरी तरह से जांचने के लिए समर्पित है और आपको इसका उपयोग कैसे करना चाहिए।

कई लोग आपको बताएंगे कि यह आपकी सुरक्षा करता है, लेकिन वे इसके बारे में झूठ बोलते हैं। यह एक डेवलपर टूल है जो आपको अपने कोड में कुछ (केवल कुछ) स्पॉट खोजने में मदद करता है जहां आपको सावधान रहना होगा। यह आपकी सभी सुरक्षा समस्याओं को हल करने वाला नहीं है।

2

हां, उपरोक्त वर्णित सभी कारणों के लिए टेंट मोड उपयोगी है।

एक स्थान जिसे आप दंडित डेटा पर विचार नहीं कर सकते हैं वह डेटाबेस के साथ बातचीत करते समय होता है। सौभाग्य से, डीबीआई को आपके डेटाबेस में आने से दबाने वाले डेटा को रोकने के लिए समर्थन है, और यह आपके डेटाबेस से आने वाले डेटा को दंडित करने के रूप में व्यवहार करता है ताकि आप इसके साथ असुरक्षित कुछ भी नहीं कर सकें। आपको इसके लिए विकल्पों को विशेष रूप से चालू करना होगा; वे डिफ़ॉल्ट रूप से बंद हैं। अधिक के लिए the DBI docs देखें।