दिलचस्प पोस्ट
SQLite से MySQL के लिए Rails ऐप पर रूबी परिवर्तित करें? मैं हेन्डलर्स में इंडेक्स द्वारा एक्सेस ऐरे वस्तु का उपयोग कैसे करूं? दृश्य स्टूडियो सेटअप प्रोजेक्ट में कस्टम प्रीक्रैकसाइट्स जोड़ना एसडीके में एंड्रॉइड बैटरी जिन फ़ाइलों को इंडेक्स में जोड़ा गया था, लेकिन फिर एक जीआईटी रीसेट द्वारा हटाया गया संसाधित प्रोसीस बनाम कोड में एसक्यूएल को रखने के पेशेवर और विपक्ष क्या हैं मैं जावास्क्रिप्ट में कोड की एक से अधिक पंक्ति में स्ट्रिंग कैसे तोड़ूंगा? गैर-निरंतर चर के साथ सरणी आकार को घोषित करना जांचें कि क्या स्ट्रिंग अजगर में एक आईपी एड्रेस पैटर्न से मेल खाता है? क्यों सी + + एलआर (1) पार्सर के साथ पार्स नहीं किया जा सकता है? Django के साथ डाउनलोड करने के लिए फ़ाइल जनरेट कर रहा है OpenMP प्रोग्राम क्रमिक एक से धीमी है preg_match (); – अज्ञात संशोधक '+' स्प्रिंग JSF एकीकरण: JSF प्रबंधित बीन में स्प्रिंग घटक / सेवा इंजेक्षन कैसे करें? ओरेकल में उपयोगकर्ता और एक स्कीमा के बीच का अंतर?

कैसे PHP में कोड इंजेक्शन हमलों को रोकने के लिए?

मैं भ्रमित हूं, PHP में इतने सारे कार्य हैं, और कुछ इसका उपयोग करते हैं, कुछ का उपयोग करते हुए। कुछ लोग इसका उपयोग करते हैं: strip_tags() , htmlentities() , strip_tags() आदि

कौन सा सही है और आप आमतौर पर लोग क्या करते हैं?

क्या यह सही है (मुझे बेहतर एक सलाह दे, यदि कोई है):

 $var = mysql_real_escape_string(htmlentities($_POST['username'])); 

यह लाइन MySQL इंजेक्शन और एक्सएसएस अटैक को रोका जा सकता है ??

बीटीडब्ल्यू, क्या XSS हमले और माइस्क्यूब इंजेक्शन के बगल में मुझे ध्यान देने की कोई अन्य चीज है?

संपादित करें

समाप्त करने के लिए:

अगर मैं डेटाबेस के लिए स्ट्रिंग सम्मिलित करना चाहता हूं, मुझे htmlentities का उपयोग करने की आवश्यकता नहीं है, बस mysql_real_escape_string उपयोग करें डेटा प्रदर्शित करते समय, htmlentities() उपयोग करें, क्या आप सभी का मतलब है?

संक्षेपित:

  • mysql_real_escape_string डेटाबेस में सम्मिलित करते समय उपयोग किया जाता है
  • वेबपृष्ठ में डेटा को आउटपुट करने के दौरान उपयोग किए जाने वाले htmlentities()
  • htmlspecialchars() जब इस्तेमाल किया?
  • strip_tags() कब उपयोग किया जाता है?
  • addslashes() जब इस्तेमाल किया?

क्या कोई प्रश्न चिह्न भर सकता है?

वेब के समाधान से एकत्रित समाधान "कैसे PHP में कोड इंजेक्शन हमलों को रोकने के लिए?"

 mysql_real_escape_string used when insert into database htmlentities() used when outputting data into webpage htmlspecialchars() used when?? strip_tags() used when ?? addslashes() used when ?? 

htmlspecialchars () जब इस्तेमाल किया ??

htmlspecialchars मोटे तौर पर htmlentities के रूप में ही है अंतर: वर्ण एन्कोडिंग

दोनों, < , > , & आदि जैसे टैग्स को खोलने के लिए उपयोग किए गए नियंत्रण एंट्रैक्ट अक्षर जैसे इको। htmlentities अन्य भाषाओं जैसे umlauts, यूरो-प्रतीकों और इस तरह के अन्य अक्षर से भी सांकेतिक शब्दों में बदलते हैं। यदि आपकी वेबसाइट यूटीएफ हैं, htmlspecialchars () का उपयोग करें, अन्यथा htmlentities () का उपयोग करें

स्ट्रिप_टैग () जब इस्तेमाल किया गया था ???

htmlspecialchars / संस्था विशेष वर्णों को सांकेतिक शब्दों में बदलना है, इसलिए वे प्रदर्शित होते हैं लेकिन व्याख्या नहीं की जाती हैं । स्ट्रिप_टैग उन्हें निकालता है

व्यवहार में, यह आपके लिए क्या करने की आवश्यकता पर निर्भर करता है।

एक उदाहरण … आपने एक मंच को कोडित किया है, और उपयोगकर्ताओं को एक पाठ फ़ील्ड दिया है ताकि वे सामान पोस्ट कर सकें। दुर्भावनापूर्ण लोग सिर्फ कोशिश करते हैं

 pictures of <a href="javascript:void(window.setInterval(function () {window.open('http://evil.com');}, 1000));">kittens</a> here 

यदि आप कुछ नहीं करते हैं, तो लिंक प्रदर्शित किया जाएगा और एक शिकार जो लिंक पर क्लिक करता है वह बहुत पॉप-अप हो जाता है

अगर आप अपने आउटपुट के लिए htmlentitiy / htmlspecialchar, पाठ वहाँ हो जाएगा के रूप में है अगर आप इसे स्ट्रिप_टैग करते हैं, तो यह केवल टैग को हटा देता है और इसे प्रदर्शित करता है:

 pictures of kittens here 

कभी-कभी आप एक मिश्रण चाहते हैं, वहां कुछ टैग छोड़कर, जैसे <b> (स्ट्रिप_टैग्स वहां कुछ टैग छोड़ सकते हैं) यह भी असुरक्षित है, इसलिए बेहतर एक्सएसएस के खिलाफ कुछ पूर्ण विकसित पुस्तकालय का उपयोग करें

addslashes

php मैनुअल उद्धृत करने के लिए:

वर्णों के पहले बैकस्लैश के साथ एक स्ट्रिंग रिटर्न करता है, जिसे डेटाबेस क्वेरी इत्यादि में उद्धृत किया जाना चाहिए। ये वर्ण एकल उद्धरण ('), दोहरे उद्धरण ("), बैकस्लैश () और एनयूएल (शून्य बाइट) हैं।

Addlashes का एक उदाहरण उपयोग () तब होता है जब आप डाटाबेस में डेटा डालते हैं उदाहरण के लिए, ओरेली को एक डेटाबेस में डालने के लिए, आपको इसे बचाना होगा। PostgreSQL के लिए MySQL या pg_escape_string () के लिए डीबीएमएस विशिष्ट एस्केप फ़ंक्शन (उदाहरण के लिए mysqli_real_escape_string ()) का उपयोग करने के लिए इसे बहुत ही पुन: संयोजित किया गया है, लेकिन यदि आप उपयोग कर रहे डीबीएमएस में एस्केप फ़ंक्शन नहीं है और डीबीएमएस विशेष वर्णों से बचने के लिए उपयोग करता है, तो आप इस फ़ंक्शन का उपयोग कर सकते हैं।

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

एसक्यूएल इंजेक्शन के लिए – में वर्णित के रूप में बाउंड चर का उपयोग करें मैं PHP में एसक्यूएल इंजेक्शन कैसे रोक सकता हूं? (यह तैयार बयान के बारे में बात करता है, लेकिन यह बाध्यकारी है जो आपको सुरक्षा प्रदान करता है, तैयारी नहीं)।

एक्सएसएस के लिए – यदि आप HTML में उस बिंदु पर लिख रहे हैं जहां एचटीएमएल या टेक्स्ट निर्दिष्ट है। उन बिंदुओं पर मौजूद htmlentities का उपयोग करें जहां आप अपना दस्तावेज़ बनाते हैं। मैं डाटा में उस रूप में डेटा को संग्रहित करने से बचना चाहूंगा (संभवतः एक लिख-दुर्लभ-पढ़े जाने वाले अक्सर सिस्टम में जहां सीपीयू प्रदर्शन / डिस्क एक्सेस का समय हो रहा था और मुद्दा – तब मेरे पास एक कच्चा_ और कॉलम के एक html_ संस्करण होगा … या सिर्फ मेम्कैच या समान का उपयोग करें)

यदि आप उपयोगकर्ताओं को यूआरएल दर्ज करने दे रहे हैं तो आपको ज़्यादा सावधानी बरतने की आवश्यकता है, क्योंकि javascript:do_evil() एक वैध यूआरआई है जो निष्पादित करेगा (जैसे कि लिंक पर क्लिक करने के लिए या (कुछ ब्राउज़रों में) एक छवि के स्रोत सिर्फ भरी हुई है)।

HTML को प्रदर्शित करते समय डेटाबेस और htmlentites में डालने पर आपको केवल mysql_escape_string () का उपयोग करना होगा। यदि आप साधारण इंजेक्शन के हमले को रोकना चाहते हैं, तो यह पर्याप्त है, लेकिन इसमें कोई शक नहीं है कि कई अन्य सुरक्षा समस्याएं आपको एक वेब ऐप के विकास के बारे में अवगत रहेंगी, क्रॉस साइट का अनुरोध करने वाले एक अन्य प्रमुख व्यक्ति।

htmlspecialchars () बदल जाता है &, ',', <, और> एक HTML इकाई प्रारूप में (&, ", आदि)

htmlentities () सभी लागू पात्रों को उनके HTML इकाई स्वरूप में बदल देता है।

strip_tags () सभी HTML और PHP टैग को निकालता है

दोनों htmlspecialchars () और htmlentities () एक वैकल्पिक पैरामीटर लेते हैं कि उद्धरण चिह्नों को कैसे संभाला जाना चाहिए। निर्देश के लिए PHP मैनुअल देखें

स्ट्रिप_टैग () फ़ंक्शन एक वैकल्पिक पैरामीटर लेता है जो संकेत करता है कि टैग को छूना नहीं चाहिए।

  $var = strip_tags ($var, '<p><br />'); 

स्ट्रिप_टाग्स () फ़ंक्शन भी अमान्य HTML टैग निकाल देगा, जिससे समस्याएं हो सकती हैं। उदाहरण के लिए, स्ट्रिप_टैग्स () सभी कोड को धक्का देगा, जो सोचता है कि यह एक HTML टैग है, भले ही यह अनुचित तरीके से बना हो, जैसे

 <b I forgot to close the tag. 

मैंने इस त्वरित चेकलिस्ट के बारे में सोचा:

  • हमेशा HTTPS के बिना, आपकी साइट पूरी तरह से एन्क्रिप्टेड है और नहीं, क्लाइंट साइड चीजों को एन्क्रिप्ट करने और उन्हें भेजने से काम नहीं करेगा, इसके बारे में सोचें। अमान्य HTTPS प्रमाणपत्र भी आपको एमआईटीएम हमले के प्रति कमजोर बनाते हैं । बस का उपयोग करें चलो एन्क्रिप्ट अगर आप एक प्रमाण पत्र बर्दाश्त नहीं कर सकता
  • हमेशा अपने PHP कोड से किसी भी आउटपुट पर htmlescapechars () का उपयोग करें, वह है या इसमें उपयोगकर्ता इनपुट शामिल है अधिकांश टेम्पलटिंग इंजन आपको आसानी से ऐसा करने में मदद करते हैं
  • स्क्रिप्ट को अपने कुकीज़ तक पहुंचने से रोकने के लिए अपने php.ini में HTTP- केवल ध्वज का उपयोग करें
  • सत्र संबंधी समस्याओं को रोकें
    • कुकी के बाहर उपयोगकर्ता के PHPSESSID (सत्र आईडी) का कभी भी खुलासा न करें , अगर किसी को किसी और के एक सत्र आईडी को जानना पड़ता है, तो वे इसे अपने खाते में लॉग इन करने के लिए आसानी से उपयोग कर सकते हैं
    • Remember me फ़ंक्शन Remember me बहुत सावधान रहें, शायद थोड़ा चेतावनी दिखाएं
    • उपयोगकर्ता आईडी (या जो भी उपयुक्त हो) में सत्र आईडी को ताज़ा करें
    • टाइमआउट निष्क्रिय सत्र
  • किसी कुकी पर कभी विश्वास न रखें , इसे किसी भी समय स्क्रिप्ट / उपयोगकर्ता द्वारा बदला जा सकता है, हटा दिया, संशोधित किया जा सकता है और बनाया जा सकता है
  • SQL- संबंधित समस्याओं को रोकें
    • हमेशा तैयार बयान का उपयोग करें तैयार बयान उपयोगकर्ता इनपुट को अलग से पारित करने का कारण बनता है और एसक्यूएल इंजेक्शन को रोकता है
    • जब आपका कोड विफल हो जाए तो अपना कोड अपवाद फेंक दें। कभी-कभी आपके एसक्यूएल सर्वर को किसी कारण से कम किया जा सकता है, जैसे कि PDO डिफ़ॉल्ट रूप से उस त्रुटि की उपेक्षा करते हैं, और लॉग में एक चेतावनी दर्ज करते हैं। यह आपके कोड के आधार पर, आपके द्वारा DB से प्राप्त चर को रिक्त होने का कारण बनता है, इससे सुरक्षा समस्या हो सकती है।
    • कुछ पुस्तकालयों जैसे PDO तैयार बयान का अनुकरण करते हैं। इसे बंद करें
    • अपने डेटाबेस में UTF-8 एन्कोडिंग का उपयोग करें, यह आपको लगभग किसी भी अक्षर को स्टोर करने और एन्कोडिंग से संबंधित हमलों से बचने की अनुमति देता है
    • कभी भी अपनी क्वेरी में कुछ जोड़ना न करें $myquery = "INSERT INTO mydb.mytable (title) VALUES(" . $user_input . ")" जैसी बातें $myquery = "INSERT INTO mydb.mytable (title) VALUES(" . $user_input . ")" बहुत ज्यादा मतलब है कि आपके पास SQL ​​इंजेक्शन का एक बड़ा सुरक्षा जोखिम है
  • अपलोड की गई फ़ाइलों को यादृच्छिक, एक्सटेंशन-कम फ़ाइलनामों में स्टोर करें यदि कोई उपयोगकर्ता .php फ़ाइल एक्सटेंशन के साथ एक फ़ाइल अपलोड करता है तो जब भी आपका कोड लोड करता है, जो उसे फ़ाइल करता है, और उपयोगकर्ता को कुछ बैकएंड कोड निष्पादित करने में सक्षम बनाता है
  • सुनिश्चित करें कि आप सीएसआरएफ हमले के लिए असुरक्षित नहीं हैं।
  • नवीनतम सुरक्षा पैच और प्रदर्शन सुधार सुनिश्चित करने के लिए हमेशा अपनी PHP कॉपी अपडेट करें

इस साइट पर एक नजर डालें PHP सुरक्षा कंसोर्टियम मैंने इसे PHP सुरक्षा (एसक्यूएल इंजेक्शन और एक्सएसएस शामिल) पर एक समग्र अवलोकन के लिए एक अच्छी साइट पाया।

मैं डेटाबेस में डेटा डालने या डेटाबेस को क्वेरी करते समय htmlentities () का उपयोग नहीं करता। यदि आपके डेटाबेस में डेटा को संस्थाओं के रूप में संग्रहित किया जाता है, तो उस डेटा को तब कुछ ही उपयोगी होता है जो HTML संस्थाओं को समझता है।

आपको अलग-अलग प्रकार के आउटपुट के लिए अलग से बचने के तंत्रों का उपयोग करना होगा, जैसे एसक्यूएल – मायसाइक्ल_रिल_स्केप_स्ट्रिंग () , एचटीएमएल – htmlentities () या htmlspecialchars () , शेल – एस्कैप्सहेल्गर () । इसका कारण यह है कि 'खतरनाक' अक्षर प्रत्येक के लिए अलग-अलग हैं – कोई जादू नहीं है जिससे आप किसी भी आउटपुट माध्यम के लिए किसी भी डेटा को सुरक्षित कर सकते हैं।