IhsAdke.com

कैसे PHP में एक एसक्यूएल इंजेक्शन से बचें

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

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

चरणों

भाग 1
एक एसक्यूएल इंजेक्शन को समझना

  1. 1
    एसक्यूएल इंजेक्शन एसक्यूएल डाटाबेस का उपयोग करने वाले अनुप्रयोगों में शोषण का एक प्रकार है। भेद्यता तब होती है जब किसी उपयोगकर्ता इनपुट को SQL कथन में उपयोग किया जाता है:
    $ name = $ _GET [`username`] - $ query = "टीबीएल यूज़र से नाम का चयन करें नाम = `$ name`" -
  2. 2
    यूआरएल चर में उपयोगकर्ता प्रकार क्या है उपयोगकर्ता नाम चर को असाइन किया जाएगा $ नाम. फिर इसे सीधे एसक्यूएल कथन में प्रयोग किया जाता है, जिससे उपयोगकर्ता घोषणा को संशोधित कर सकता है।
    $ name = "admin" या 1 = 1 - "- $ query =" Tbl_user से चुनें पासवर्ड कहां नाम = `$ name` "-
  3. 3
    इस प्रकार, एसक्यूएल डाटाबेस को निम्नानुसार बयान प्राप्त होगा:
    Tbl_users से पासवर्ड का चयन करें जहां नाम = `व्यवस्थापक` या 1 = 1 - `
    • यह मान्य SQL कोड है, लेकिन उपयोगकर्ता के पासवर्ड को लौटने के बजाय, यह कथन तालिका में सभी पासवर्ड का पासवर्ड वापस करेगा tbl_user. निश्चित रूप से, आप अपने कार्यक्रमों में उस प्रकार की भेद्यता नहीं चाहते हैं।

भाग 2
तैयार वक्तव्य तैयार करने के लिए mySQLi का उपयोग करना

चित्र शीर्षक 2542820 1
1
MySQLi में एक चयन अनुरोध बनाएँ
MySQLi से तैयार बयानों का उपयोग करके एक तालिका से (SELECT) डेटा का चयन करने के लिए नीचे दिए गए कोड का उपयोग करें




$ नाम = $ _GET [ `उपयोगकर्ता नाम`] - अगर ($ stmt = $ mysqli-> तैयार ( "पासवर्ड tbl_users से चुनें जहाँ नाम =")) {// एक चर स्ट्रिंग के रूप में पैरामीटर प्राप्त करें। stmt- $> bind_param ( "एस", $ नाम) -। // बयान $ stmt-> निष्पादित () निष्पादित - // पुनः प्राप्त अनुरोध चर $ stmt-> bind_result ($ पास) -। // पुन: प्राप्त करें $ stmt-> fetch () - // डेटा दिखाएं। printf ("उपयोगकर्ता% s के लिए पासवर्ड% s n", $ name, $ pass) - // तैयार बयान $ stmt-> बंद करें () -}


  • नोट: चर $ mysqli mySQLi कनेक्शन ऑब्जेक्ट है
  • चित्र शीर्षक 2542820 2
    2
    MySQLi में एक INSERT अनुरोध बनाना MySQLi से तैयार बयानों का उपयोग कर तालिका में डालने के लिए नीचे दिए गए कोड का उपयोग करें (INSERT) डेटा

    $ नाम = $ _GET [ `उपयोगकर्ता नाम`] - $ पासवर्ड = $ _GET [ `पासवर्ड`] - अगर ($ stmt = $ mysqli-> तैयार () "tbl_users (नाम, पासवर्ड) मूल्यों (,) में डालने के?" ) {// तार के रूप में पैरामीटर में चर को बाँधें $ Stmt-> bind_param ( "एस एस", $ नाम, $ पासवर्ड) - // बयान stmt- $> निष्पादित () निष्पादित -। // तैयार बयान $ stmt-> पास () बंद -।}


    • नोट: चर $ mysqli mySQLi कनेक्शन ऑब्जेक्ट है
  • छवि शीर्षक 2542820 3
    3
    MySQLi में एक अद्यतन अनुरोध बनाना MySQLi से तैयार बयानों का उपयोग करते हुए तालिका में डेटा अपडेट करने के लिए नीचे दिए गए कोड का उपयोग करें (अपडेट करें)

    $ नाम = $ _GET [ `उपयोगकर्ता नाम`] - $ पासवर्ड = $ _GET [ `पासवर्ड`] - अगर ($ stmt = $ mysqli-> ( "? समूह को अपडेट tbl_users पासवर्ड = कहां नाम =") तैयार) {// पैरामीटर के रूप में स्ट्रिंग के रूप में चर का मिलान करें। $ Stmt-> bind_param ( "एस एस", $ पासवर्ड, $ नाम) - // बयान stmt- $> निष्पादित () निष्पादित -। // तैयार बयान $ stmt-> पास () बंद -।}

    • नोट: चर $ mysqli mySQLi का कनेक्शन ऑब्जेक्ट है
  • चित्र शीर्षक 2542820 4
    4
    MySQLi में एक DELETE अनुरोध बनाना MySQLi से तैयार बयानों का उपयोग करके किसी तालिका से डेटा (DELETE) को हटाने के लिए नीचे स्क्रिप्ट का उपयोग करें

    $ नाम = $ _GET [ `उपयोगकर्ता नाम`] - $ पासवर्ड = $ _GET [ `पासवर्ड`] - अगर ($ stmt = $ mysqli-> तैयार () "tbl_users कहां नाम = से हटाएं?") {// चर जाओ स्ट्रिंग के रूप में पैरामीटर के लिए stmt- $> bind_param ( "एस", $ नाम) -। // बयान $ stmt-> निष्पादित () निष्पादित - // तैयार बयान $ stmt-> पास () बंद -।}


    • नोट: चर $ mysqli mySQLi का कनेक्शन ऑब्जेक्ट है
  • सामाजिक नेटवर्क पर साझा करें:

    संबद्ध
    © 2021 IhsAdke.com