2011-01-19 7 views
6

संभव डुप्लिकेट:
What does mysql_real_escape_string() do that addslashes() doesn't?addslashes का mysql उपयोग()

आप एसक्यूएल इंजेक्शन रोकने का प्रयास कर रहे हैं, तो पहली बात आप क्या करेंगे उपयोग mysql_real_escape_string है। क्या addlashes() का उपयोग कर डेटाबेस को इंजेक्ट करना संभव है?

उत्तर

6

addslashes str_replace($str, "'", "\\'") के किसी न किसी बराबर है। आप इसे तुच्छता से बायपास कर सकते हैं यूनिकोड दृश्यों कि mysql में ' करने के लिए नीचे का मूल्यांकन के किसी भी संख्या के साथ है, लेकिन पूरी तरह से addslashes() करने के लिए अलग लग रहे हो।

Mysql_real_escape_String() दूसरी तरफ, वास्तविक आंतरिक mysql एस्केपिंग फ़ंक्शन का उपयोग करता है, जो जानता है कि वास्तव में क्या देखना है और इसे mysql के लिए "सुरक्षित" बनाने के लिए ठीक है। MySQL के लिए क्या काम करता है, किसी अन्य डेटाबेस के लिए काम नहीं कर सकता है, क्योंकि प्रत्येक में सेमेन्टिक्स और आवश्यकताओं से बचने के लिए थोड़ा अलग होता है, लेकिन यदि आप mysql के साथ काम कर रहे हैं, तो "असली एस्केप स्ट्रिंग" जाने का तरीका है।

+0

लेकिन दूसरी ओर, आप mysql_real_escape_string साथ removeslashes उपयोग नहीं कर सकते, आप कर सकते हैं? मेरे पास कुछ बार हैं जहां मुझे डेटाबेस एंट्री – blake305

+1

से स्लेश को हटाने की आवश्यकता है यदि चीजें संग्रहीत हो जाती हैं, तो आपको कहीं लॉजिक बग मिल गया है। लेकिन नहीं, हटाने की संभावना अधिकतर होगी, लेकिन इसकी गारंटी नहीं है, "वास्तविक भागने वाली स्ट्रिंग" को पूर्ववत करें। यह सरल परीक्षण में काम कर सकता है, लेकिन बाद में आपको अधिकतर जला देगा। –

0

और फिर भी यह है कि इस आईडी बिल्कुल एक अंक है अगर आप

SELECT * FROM tbl WHERE id = 10 

एक मेज के गैर उद्धृत डेटा जोड़ने के लिए, यानी यहाँ आप यह सुनिश्चित करना चाहते हो सकता है

$id = intval($_GET[ 'id' ]) ; 
$query = "SELECT * FROM tbl WHERE id = {$id}" ; 
$result = mysql_query($query) ; 
// ... bla-bla 
1

यही होता है जब है आप केवल एक भाषा में स्लेश जोड़ते हैं जो यूनिकोड एन्कोडिंग को समझता है (या क्वेरी भेजते समय एन्कोडिंग को मिलाता है): http://bugs.mysql.com/bug.php?id=22243

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

संबंधित मुद्दे