2011-02-15 10 views
5

मैं कुछ सरल उपयोगकर्ता डेटा को एक MySQL डेटाबेस में पास कर रहा हूं।urlencode() वर्ष 2011 में सभी एसक्यूएल इंजेक्शन हमलों को रोकने के लिए पर्याप्त अच्छा है

PHP का urlencode() एक स्ट्रिंग देता है जिसमें सभी गैर-अल्फान्यूमेरिक वर्ण -_ को छोड़कर। एक प्रतिशत (%) संकेत के साथ दो हेक्स अंकों के साथ प्रतिस्थापित किया गया है।

मैं प्लस के रूप में या अन्य स्वरूपण समस्याओं में आने वाली रिक्त स्थान के बारे में चिंतित नहीं हूं। न तो मैं एक्सएसएस और अन्य एचटीएमएल हैक्स के बारे में चिंतित हूं।

मेरा मानना ​​है कि मुझे शैली के हमलों से सुरक्षित होना चाहिए।

प्रश्न: क्या अन्य प्रकार के एसक्यूएल हमलों का उपयोग किया जा सकता है - या _ या। ?

उदाहरण:

mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHERE garage = 29"); 

ठनक अग्रिम

+8

'mysql_real_escape_string' का उपयोग करने में क्या गड़बड़ है? – deceze

+0

वर्ष 2011 में, आपको mysql_ * फ़ंक्शन को मिटाना चाहिए, mysqli_ * फ़ंक्शन का उपयोग करना शुरू करें, या पीडीओ – ajreal

+0

mysqli पीडीओ – Stephen

उत्तर

2

में मुझे नहीं लगता कि कि urlencode अकेले काफी अच्छा एसक्यूएल इंजेक्शन को रोकने के लिए किया जाएगा। आपको कम से कम mysql_real_escape_string या prepared statements from PDO. का उपयोग करना होगा।

0

पीडीओ और पैरामीराइज्ड प्रश्नों का उपयोग करें।

9

urlencode()कुछ भी नहीं एसक्यूएल साथ करना है, तो यह रूप में मिट्टी का तेल अपने बर्गर और अधिक स्वादिष्ट बनाने के लिए करता है एसक्यूएल इंजेक्शन को रोकने के लिए के रूप में ज्यादा है। इसके अलावा, आपके डेटाबेस में प्रवेश करने वाली प्रत्येक चीज यूआरएल एन्कोडेड को समाप्त कर देगी, जिसे आप डेटाबेस को पुनर्प्राप्त करने के बाद उनके साथ कुछ भी उपयोगी करना चाहते हैं, तो आपको डीकोड करना होगा।

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

सही उद्देश्य के लिए सही उपकरण का उपयोग करें। विशेष रूप से वर्ष 2011 में, आपको अपने क्वेरी चर से मैन्युअल रूप से भागने और क्वेरी बनाने के लिए तारों को संयोजित करने के बजाय तैयार कथन का उपयोग करना चाहिए।

+1

इस तरह: केरोसिन आपके बर्गर को अधिक स्वादिष्ट बनाने के लिए करता है। :) – diEcho

+2

मैं समझता हूं कि ज्यादातर लोगों के लिए आप उस जानकारी को पारित करना चाहते हैं। लेकिन मेरा सवाल अधिक सरल था। सवाल यह है। अगर एकमात्र मौजूदा गैर अल्फा है। _ और -, ऊपर दिए गए सरल कोड उदाहरण के साथ किसी भी एसक्यूएल स्टेटमेंट को इंजेक्शन कैसे दिया जा सकता है? क्या आप किसी भी हमले के बारे में जानते हैं जो केवल उन वर्णों और अल्फा का उपयोग करता है? जैसा कि मैंने कहा था, मैं प्रारूपण के बारे में चिंतित नहीं हूं, असल में यह मेरे उद्देश्यों को उपयुक्त बनाता है ताकि वे उन्हें वेबपृष्ठों के बीच पास कर सकें। – Chris

+0

@ क्रिस: यदि आप यूआरएल को अपने एप्लिकेशन के उपयोग के लिए एन्कोड करना चाहते हैं, तो यह ठीक है, लेकिन इंजेक्शन से अपने प्रश्नों की रक्षा के लिए इस पर भरोसा न करें। जैसा कि मेरा अंतिम अनुच्छेद कहता है, सही नौकरी के लिए सही उपकरण का उपयोग करें। आपको या तो समर्पित 'mysql_real_escape_string()' फ़ंक्शन का उपयोग करना चाहिए या वास्तव में SQL इंजेक्शन हमलों के विरुद्ध सुरक्षा के लिए तैयार कथन का उपयोग करना चाहिए। – BoltClock

8

नहीं। एसक्यूएल इंजेक्शन सुरक्षा के लिए यूआरएल एन्कोडिंग का उपयोग करना वास्तव में खतरनाक है।

  1. यूआरएल एन्कोडिंग प्रतिशत एन्कोडिंग है। और एसक्यूएल में% chars के कई डेटाबेस में विशेष अर्थ है। उदाहरण: खंडों की तरह। गतिशील एसक्यूएल में% वर्णों को अनुमति देने से अब भी समस्याएं पैदा हो जाएंगी।
  2. एक जोखिम है कि इंटरमीडिएट (वेब) सर्वर स्वचालित रूप से डीकोड url हो सकता है। अपाचे यह कर सकता है।
+1

पहला और अब तक केवल जवाब है जो वास्तव में हमें बताता है कि क्या गलत हो सकता है। – cweiske

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

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