सबसे अच्छा PHP इनपुट sanitizing कार्यों क्या हैं?


Answers

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

एचटीएमएल को हटाने के मामले में, strip_tags शायद HTML को हटाने के लिए सबसे अच्छा विचार है, क्योंकि यह सब कुछ हटा देगा। htmlentities जो यह लगता है करता है, तो यह भी काम करता है। यदि आपको अनुमति देने के लिए कौन सी HTML को पार्स करने की आवश्यकता है (यानी, आप कुछ टैग्स को अनुमति देना चाहते हैं), तो आपको एक परिपक्व मौजूदा पार्सर का उपयोग करना चाहिए जैसे HTML शोधक

Question

मैं PHP / प्रोग्रामिंग के लिए बहुत नया हूं, इस बात को ध्यान में रखते हुए मैं एक समारोह के साथ आने की कोशिश कर रहा हूं कि मैं अपने सभी तारों को sanatize के माध्यम से पारित कर सकता हूं। ताकि उस स्ट्रिंग जो इससे बाहर आती है, डेटाबेस प्रविष्टि के लिए सुरक्षित होगी। लेकिन वहां बहुत सारे फ़िल्टरिंग फ़ंक्शंस हैं, मुझे यकीन नहीं है कि मुझे किसके लिए उपयोग / आवश्यकता होनी चाहिए। कृपया मुझे रिक्त स्थान भरने में मदद करें:

function filterThis($string) {
    $string = mysql_real_escape_string($string);
    $string = htmlentities($string);
    etc...
    return $string;
}



मैं हमेशा एक छोटे सत्यापन पैकेज का उपयोग करने की सलाह देता हूं जैसे कि GUMP: https://github.com/Wixel/GUMP

इस तरह की लाइब्रेरी के चारों ओर अपने सभी बुनियादी कार्यों का निर्माण करें और स्वच्छता को भूलना लगभग असंभव है। "mysql_real_escape_string" अच्छी फ़िल्टरिंग के लिए सबसे अच्छा विकल्प नहीं है (जैसे "आपकी सामान्य भावना" समझाया गया है) - और यदि आप इसे केवल एक बार उपयोग करना भूल जाते हैं, तो आपकी पूरी प्रणाली इंजेक्शन और अन्य ग़लत हमलों के माध्यम से हमलावर होगी।







मेरे 5 सेंट

यहां कोई भी mysql_real_escape_string काम करता है जिस तरह से समझता है। यह फ़ंक्शन कुछ भी फ़िल्टर या "sanitize" नहीं करता है।
तो, आप इस फ़ंक्शन का उपयोग कुछ सार्वभौमिक फ़िल्टर के रूप में नहीं कर सकते जो आपको इंजेक्शन से बचाएगा।
आप इसे तब ही उपयोग कर सकते हैं जब आप समझते हैं कि कैसे काम करता है और यह कहां लागू होता है।

मेरे पास पहले से ही लिखे गए एक ही प्रश्न का उत्तर है: PHP में डेटाबेस में स्ट्रिंग सबमिट करते समय मुझे HTMLspecialchars () का उपयोग करके अवैध वर्णों का ख्याल रखना चाहिए या नियमित अभिव्यक्ति का उपयोग करना चाहिए?
डेटाबेस साइड सुरक्षा के लिए पूर्ण स्पष्टीकरण के लिए कृपया क्लिक करें।

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

हालांकि मैं htmlentities के खिलाफ सलाह देंगे। यह कार्य लंबे समय से अप्रचलित हो गया है। यदि आप केवल < , > , और " HTML सुरक्षा के लिए वर्णों को प्रतिस्थापित करना चाहते हैं - उस उद्देश्य के लिए जानबूझकर विकसित किए गए फ़ंक्शन का उपयोग करें - एक htmlspecialchars () एक।




Related