2011-05-23 43 views
5

मैं अपनी साइट के लिए एक प्रमाणीकरण प्रणाली लिख रहा हूं और मैं यह सुनिश्चित करना चाहता हूं कि मैं एसक्यूएल इंजेक्शन के खिलाफ सुरक्षित हूं। मैं 'mysql_real_escape_string' का उपयोग कर रहा हूं लेकिन यह पूरी तरह से स्ट्रिंग को साफ़ करता है। उपयोगकर्ता नाम 'दामो' जैसा कुछ है लेकिन फ़ंक्शन के माध्यम से चलने के बाद यह चला गया है।mysql_real_escape_string पूरे स्ट्रिंग को हटा रहा है

मैं क्या गलत कर रहा हूं? (यह mysql_real_escape_string बिना ठीक काम करता है)

$user_name = $_POST["username"]; 
$md5 = md5($_POST["password"]); 

$user_name = mysql_real_escape_string($user_name); 


$login = $query->GetSingleQuery("--SINGLE","SELECT user_name, id FROM url_users WHERE user_name='".$user_name."' and user_password='".$md5."';",array("user_name","id")); 
+0

क्या आपके पास जादू उद्धरण चालू हैं? (get_magic_quotes_gpc()) –

उत्तर

7

mysql_real_escape_string एक कनेक्शन की आवश्यकता है। माना जाता है कि कनेक्शन एक ही पुस्तकालय के हिस्से के रूप में बनाया गया है।

हालांकि, mysql_real_escape_string OO पर आधारित नहीं है, और आप स्पष्ट रूप से अपनी OO $query के लिए कुछ अन्य पुस्तकालय का उपयोग कर रहे (यह क्या है?)। तो mysql_real_escape_string आपके द्वारा उपयोग किए जा रहे कनेक्शन को "देख" नहीं सकता है, और इस प्रकार यह काम नहीं कर सकता है।

आप त्रुटि पर रिपोर्टिंग (और क्या तुम सच में करना चाहिए) कर देते हैं, तो आप एक E_WARNING इस के लिए उत्पन्न देखने के लिए चाहिए।

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

+0

मैं मूर्ख हूं। mysql_real_escape_string पहले से ही SQL कनेक्शन क्लास में उपयोग किया जा रहा है जिसका मैं उपयोग कर रहा हूं। आपके इनपुट के लिए धन्यवाद, यह मुझे सही जगह पर देखा। – Damo

+0

@ डैमो: कोई समस्या नहीं। आप जिस लाइब्रेरी का उपयोग कर रहे हैं उसमें दिए गए फ़ंक्शन का बिल्कुल उपयोग करें; यह आपके द्वारा बनाए गए कनेक्शन से अवगत होगा, और इस प्रकार यह ठीक से कार्य करेगा। और त्रुटि रिपोर्टिंग चालू करें! सौभाग्य! –

-1

इस स्निपेट का प्रयास करें, मैं क्या actully हो रहा है पर अपने गलत लगता है।

$user_name = $_POST["username"]; 
echo 'before: '.$user_name; 
$user_name = mysql_real_escape_string($user_name); 
echo 'after: '.$user_name; 
संबंधित मुद्दे