मैं MySQL एपीआई समारोह(एम) एसक्यूएल इंजेक्शन को रोकने के लिए कौन से पात्रों से बच निकलना है?
mysql_real_escape_string()
प्रलेखन के आधार पर उपयोग कर रहा हूँ, यह निम्न वर्णों निकल जाता है:
\0
\n
\r
\
'
"
\Z
अब, मैं OWASP.org के ESAPI सुरक्षा पुस्तकालय में और अजगर बंदरगाह में देखा यह निम्नलिखित कोड (http://code.google.com/p/owasp-esapi-python/source/browse/esapi/codecs/mysql.py) था:
"""
Encodes a character for MySQL.
"""
lookup = {
0x00 : "\\0",
0x08 : "\\b",
0x09 : "\\t",
0x0a : "\\n",
0x0d : "\\r",
0x1a : "\\Z",
0x22 : '\\"',
0x25 : "\\%",
0x27 : "\\'",
0x5c : "\\\\",
0x5f : "\\_",
}
अब, मैं सोच रहा हूँ कि क्या उन सभी पात्रों वास्तव में तों होने की जरूरत है caped। मैं समझता हूं कि% और _ क्यों हैं, वे LIKE ऑपरेटर में मेटा वर्ण हैं, लेकिन मैं समझ नहीं पा रहा हूं कि उन्होंने बैकस्पेस और टैबलेट वर्ण (\ b \ t) क्यों जोड़ा? अगर आप एक प्रश्न करना वहाँ एक सुरक्षा मुद्दा है:
SELECT a FROM b WHERE c = '...user input ...';
कहाँ उपयोगकर्ता इनपुट tabulators या बैकस्पेस वर्ण हैं?
मेरा प्रश्न यहां है: उन्होंने ESAPI सुरक्षा पुस्तकालय में \ b \ t क्यों शामिल किया? क्या कोई स्थितियां हैं जहां आपको उन पात्रों से बचने की आवश्यकता हो सकती है?
मैं एक अजगर व्यक्ति या ने MySQL व्यक्ति नहीं हूँ, लेकिन मेरी पहली हालांकि इस के लिए इकाई परीक्षण देखने के लिए था, दुर्भाग्य से उन्होंने ऐसा नहीं किया कुछ भी उपयोगी बताएं- http://code.google.com/p/owasp-esapi-python/source/browse/esapi/test/codecs/test_mysql.py – RichardOD