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

PHP MySQLI SQL इंजेक्शन को रोकें

किसी भी प्रश्न को इंजेक्ट किया जा सकता है चाहे वह पढ़ा या लिखा हो, लगातार या क्षणिक हो। इंजेक्शन एक क्वेरी को समाप्त करके और एक अलग एक चलाकर किया जा सकता है (mysqli के साथ संभव है) ), जो इच्छित क्वेरी को अप्रासंगिक बना देता है।

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

SELECT col1 FROM t1 WHERE col2 = ?

? एक पैरामीटर के लिए प्लेसहोल्डर है। mysqli का उपयोग करना , आप prepare . का उपयोग करके एक तैयार विवरण बना सकते हैं , bind_param . का उपयोग करके एक चर (तर्क) को एक पैरामीटर से बांधें , और क्वेरी को execute . के साथ चलाएँ . आपको तर्क को बिल्कुल भी साफ करने की आवश्यकता नहीं है (वास्तव में ऐसा करना हानिकारक है)। mysqli आपके लिए करता है। पूरी प्रक्रिया होगी:

$stmt = $mysqli->prepare("SELECT col1 FROM t1 WHERE col2 = ?");
$stmt->bind_param("s", $col2_arg);
$stmt->execute();

पैरामीटरयुक्त क्वेरी . के बीच एक महत्वपूर्ण अंतर भी है और तैयार विवरण . यह कथन, तैयार होने पर, पैरामीटरयुक्त नहीं है और इस प्रकार इंजेक्शन के लिए असुरक्षित है:

$stmt = $mysqli->prepare("INSERT INTO t1 VALUES ($_POST[user_input])");

संक्षेप में:

  • सभी प्रश्नों को ठीक से पैरामीटरयुक्त किया जाना चाहिए (जब तक कि उनके पास कोई पैरामीटर न हो)
  • सभी किसी प्रश्न के तर्कों को यथासंभव शत्रुतापूर्ण माना जाना चाहिए, चाहे उनका स्रोत कुछ भी हो



  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 डेटाबेस में सभी तालिकाओं को सूचीबद्ध करने के 4 तरीके

  2. एक MySQL डेटाबेस को SQLite डेटाबेस में निर्यात करें

  3. MySQL LAST_INSERT_ID() एकाधिक रिकॉर्ड INSERT कथन के साथ प्रयोग किया जाता है

  4. स्प्रिंग, हाइबरनेट, ब्लॉब आलसी लोडिंग

  5. MySQL में संपूर्ण शब्द मिलान खोजें