Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

mysql_escape_string कमजोरियाँ

खराब उत्तर:

भरोसेमंद नहीं। आप mysql_escape_string() का जिक्र कर रहे हैं , जो कनेक्शन एन्कोडिंग को ध्यान में नहीं रखता है (जबकि mysql_real_escape_string() करता है)।

तो हो सकता है कि सावधानीपूर्वक तैयार की गई स्ट्रिंग, ध्यान से तैयार किए गए अपूर्ण UTF8 कोडपॉइंट के सामने, हो सकता है परिणाम, मान लीजिए, एक उद्धरण चिह्न mysql_escape_string() . द्वारा बच निकला जा रहा है लेकिन एस्केप को MySQL द्वारा अनदेखा किया जा रहा है चूंकि यह इसे UTF8 वर्ण के रूप में "देखेगा"।

उदा.:

0xC2' OR 1=1 ;--

mysql_escape_string() से बच जाएगा के रूप में

0xC2\' OR 1=1 ;--

जिसे इकट्ठा किया जाएगा

WHERE password='0xC2\' OR 1=1 ;--';

और MySQL द्वारा देखा गया (यदि उचित कनेक्शन एन्कोडिंग प्रभाव में था), जैसे, कहें,

WHERE password='€' OR 1=1 ;[--';]    <-- the bracketed part is considered a comment and ignored

जो एक क्लासिक SQL इंजेक्शन होगा।

लेकिन यह इस तथ्य पर चलता है कि आपने निर्दिष्ट किया, शायद व्याकुलता के माध्यम से, एक दोगुना बहिष्कृत फ़ंक्शन . अगर आप वाकई mysql_real_escape_string() . की बात कर रहे थे , तो यह काम नहीं करेगा।

साथ ही, यह मानता है कि इनपुट को पॉप्युलेट करते समय न तो सर्वर, न ही एप्लिकेशन लेयर (जैसे PHP) किसी भी प्रकार के वर्णसेट सत्यापन को नियोजित करता है। यदि उन्होंने किया, तो अमान्य UTF8 आगमन पर हटा दिया जाएगा, और कभी भी mysql_escape_string द्वारा देखा भी नहीं जाएगा। , जो निश्चित रूप से पर्याप्त होगा।

असली जवाब:

mysql_escape_string का उपयोग न करें (या mysql_whatever ) बिल्कुल भी। उन्हें बहिष्कृत कर दिया गया है और आपका कोड काम करना बंद कर सकता है। इसके बजाय पीडीओ फ़ंक्शन का उपयोग करें।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL ट्रिगर्स का उपयोग करना

  2. mysql:निहित लेनदेन के आसपास काम करता है?

  3. क्या SET CHARACTER SET utf8 आवश्यक है?

  4. क्या MySQL में एक गैर - ऑटो वृद्धिशील कॉलम की अंतिम सम्मिलित आईडी प्राप्त करने का कोई तरीका है?

  5. गतिशील प्रश्न (PHP+MySQL का उपयोग करके) बनाने का सबसे अच्छा तरीका क्या है?