"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > PHP एंटी-एसक्यूएल इंजेक्शन: प्रीकम्पिल्ड स्टेटमेंट्स और पैरामीटर की क्वेरी का विस्तृत विवरण

PHP एंटी-एसक्यूएल इंजेक्शन: प्रीकम्पिल्ड स्टेटमेंट्स और पैरामीटर की क्वेरी का विस्तृत विवरण

2025-03-12 को पोस्ट किया गया
ब्राउज़ करें:788

How Can Prepared Statements and Parameterized Queries Prevent SQL Injection in PHP?

] ] इस जोखिम को समझने के लिए, निम्नलिखित उदाहरण पर विचार करें:

] mysql_query ("INSERT इन` टेबल` (`कॉलम`) मान ('$ unsafe_variable')"); ] ]

यह डेटाबेस पर दुर्भावनापूर्ण हमलों का दरवाजा खोलता है।

$unsafe_variable = $_POST['user_input'];

mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
SQL इंजेक्शन को रोकने के लिए अनुशंसित सुरक्षा प्रथाओं को SQL से डेटा को अलग करना है, चाहे आप किस डेटाबेस का उपयोग कर रहे हों। इसका मतलब यह है कि डेटा को डेटा के रूप में माना जाता है और SQL पार्सर द्वारा कमांड के रूप में कभी भी व्याख्या नहीं की जाती है। इसे प्राप्त करने का सबसे कुशल तरीका प्रीप्रोसेसिंग स्टेटमेंट और पैरामीटर वाले क्वेरी का उपयोग करना है।

] ] यह यह सुनिश्चित करके दुर्भावनापूर्ण SQL इंजेक्शन प्रयासों को रोकता है कि ट्रांसफर से पहले PHP द्वारा डेटा पार्स नहीं किया गया है।

कार्यान्वयन विकल्प:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
]

यह एक सामान्य दृष्टिकोण है जो सभी समर्थित डेटाबेस ड्राइवरों के साथ काम करता है। यहाँ इसके उपयोग का एक उदाहरण है:

] $ stmt-> निष्पादित (['नाम' => $ नाम]); foreach ($ stmt $ पंक्ति के रूप में) { // प्रसंस्करण लाइन }

]

MySQL डेटाबेस के लिए, आप MySQLI का उपयोग कर सकते हैं। Php 8.2 में शुरू होकर, आप एक चरण में SQL स्टेटमेंट तैयार करने, बांधने, और निष्पादित करने के लिए

execute_query () विधि का उपयोग कर सकते हैं: ] जबकि ($ पंक्ति = $ परिणाम-> fetch_assoc ()) { // प्रसंस्करण लाइन }

Php 8.1 और नीचे के लिए:

] $ stmt-> bind_param ('s', $ नाम); $ stmt-> निष्पादित (); $ परिणाम = $ stmt-> get_result (); जबकि ($ पंक्ति = $ परिणाम-> fetch_assoc ()) { // प्रसंस्करण लाइन }

]

] ]
  1. pdo कनेक्शन: ] $ dbconnection-> setAttribute (pdo :: attr_emulate_prepares, false); $ dbconnection-> setAttribute (pdo :: attr_errmode, pdo :: iermode_exception);

    mysqli कनेक्शन:
    $stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');
    $stmt->execute([ 'name' => $name ]);
    
    foreach ($stmt as $row) {
        // 处理行
    }
  2. निष्कर्ष के तौर पर:
  3. ]

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3