PHP -де SQL инъекциясын қалай болдырмауға болады (суреттермен)

Мазмұны:

PHP -де SQL инъекциясын қалай болдырмауға болады (суреттермен)
PHP -де SQL инъекциясын қалай болдырмауға болады (суреттермен)

Бейне: PHP -де SQL инъекциясын қалай болдырмауға болады (суреттермен)

Бейне: PHP -де SQL инъекциясын қалай болдырмауға болады (суреттермен)
Бейне: АҚША ШЫҒАРАТЫН ПРИНТЕР КЕЛДІ ПОСЫЛКА АШУ ШЫН АҚША ШЫҒАРУ 2024, Мамыр
Anonim

Бұл wikiHow сізге PHP -де дайындалған мәлімдемелерді қолдану арқылы SQL енгізуді болдырмауды үйретеді. SQL инъекциясы - қазіргі уақытта веб -қосымшалардың ең көп таралған осал тұстарының бірі. Дайындалған мәлімдемелер байланыстырылған параметрлерді қолданады және айнымалыларды SQL жолдарымен біріктірмейді, бұл шабуылдаушының SQL операторын өзгертуін мүмкін етпейді.

Дайындалған мәлімдемелер айнымалыны құрастырылған SQL операторымен біріктіреді, осылайша SQL мен айнымалылар бөлек жіберіледі. Содан кейін айнымалылар SQL операторының бөлігі емес, жолдар ретінде түсіндіріледі. Төмендегі қадамдардағы әдістерді қолдана отырып, сізге mysql_real_escape_string () сияқты басқа SQL инъекция сүзу әдістерін қолданудың қажеті болмайды.

Қадамдар

2 бөлімнің 1 бөлігі: SQL инъекциясын түсіну

Қадам 1. SQL инъекциясы - бұл SQL мәліметтер қорын қолданатын қосымшалардағы осалдық түрі

Осалдық SQL мәлімдемесінде пайдаланушы енгізуі қолданылғанда пайда болады:

$ name = $ _GET ['пайдаланушы аты']; $ query = «құпия сөзді FROM tbl_user WHERE атау = '$ name' таңдау;»;

Қадам 2. Пайдаланушы URL айнымалы пайдаланушы атын енгізетін мән $ name айнымалысына тағайындалады

Содан кейін ол тікелей SQL операторына орналастырылады, бұл пайдаланушыға SQL операторын өңдеуге мүмкіндік береді.

$ name = «әкімшінің НЕМЕСЕ 1 = 1 -»; $ query = «құпия сөзді FROM tbl_user WHERE атауынан таңдаңыз = '$ name'»;

Қадам 3. Содан кейін SQL дерекқоры SQL операторын келесі түрде алады:

Tbl_users WHROE аты = 'admin' НЕМЕСЕ 1 = 1 - 'құпия сөзін таңдаңыз.

  • Бұл жарамды SQL, бірақ пайдаланушыға бір парольді қайтарудың орнына, мәлімдеме tbl_user кестесіндегі барлық парольдерді қайтарады. Бұл сіздің веб -қосымшаларда қажет нәрсе емес.

    2 -ден 2 -ші бөлім: Дайын мәлімдемелер жасау үшін mySQLi -ді қолдану

    2542820 1
    2542820 1

    Қадам 1. mySQLi SELECT сұрауын жасаңыз

    MySQLi дайындалған мәлімдемелерді пайдаланып кестеден деректерді таңдау үшін төмендегі кодты пайдаланыңыз.

    $ name = $ _GET ['пайдаланушы аты']; if ($ stmt = $ mysqli-> дайындау («tbl_users WHERE name =?» паролін SELECT)) {// Айнымалыны параметрге жол ретінде байланыстырыңыз. $ stmt-> bind_param («s», $ name); // Өтінішті орындаңыз. $ stmt-> execute (); // Айнымалыларды сұраудан алыңыз. $ stmt-> bind_result ($ pass); // Деректерді алу. $ stmt-> алу (); // Деректерді көрсету. printf (« %s пайдаланушысының құпия сөзі - %s / n», $ аты, $ pass); // Дайындалған мәлімдемені жабыңыз. $ stmt-> жабу (); }

    Ескерту: $ mysqli айнымалысы mySQLi қосылым объектісі болып табылады

    2542820 2
    2542820 2

    Қадам 2. mySQLi INSERT сұранысын жасаңыз

    MySQLi дайындалған мәлімдемелерді пайдаланып кестеге деректерді енгізу үшін төмендегі кодты пайдаланыңыз.

    $ name = $ _GET ['пайдаланушы аты']; $ password = $ _GET ['пароль']; if ($ stmt = $ mysqli-> дайындау («INSERT INTO tbl_users (аты, құпия сөзі) VALUES (?,?)»))) // Айнымалыларды параметрге жол ретінде байланыстырыңыз. $ stmt-> bind_param («ss», $ name, $ password); // Өтінішті орындаңыз. $ stmt-> execute (); // Дайындалған мәлімдемені жабыңыз. $ stmt-> жабу (); }

    Ескерту: $ mysqli айнымалысы mySQLi қосылым объектісі болып табылады

    2542820 3
    2542820 3

    Қадам 3. mySQLi UPDATE сұрауын жасаңыз

    Төмендегі кодты mySQLi дайындалған мәлімдемелерді пайдаланып кестеде деректерді жаңарту үшін пайдаланыңыз.

    $ name = $ _GET ['пайдаланушы аты']; $ password = $ _GET ['пароль']; if ($ stmt = $ mysqli-> дайындау («UPDATE tbl_users SET password =? WHERE name =?»)) {// Айнымалыларды параметрге жол ретінде байланыстырыңыз. $ stmt-> bind_param («ss», $ пароль, $ аты); // Өтінішті орындаңыз. $ stmt-> execute (); // Дайындалған мәлімдемені жабыңыз. $ stmt-> жабу (); }

    Ескерту: $ mysqli айнымалысы mySQLi қосылым объектісі болып табылады

    2542820 4
    2542820 4

    Қадам 4. mySQLi DELETE сұрауын жасаңыз

    Төмендегі сценарий - бұл дайындалған кестеден mySQLi дайындалған мәлімдемелерді пайдаланып деректерді ЖОЮ.

    $ name = $ _GET ['пайдаланушы аты']; $ password = $ _GET ['пароль']; if ($ stmt = $ mysqli-> дайындау («tbl_users WHERE name =?» ЖОЮ)) {// Айнымалыны параметрге жол ретінде байланыстырыңыз. $ stmt-> bind_param («s», $ name); // Өтінішті орындаңыз. $ stmt-> execute (); // Дайындалған мәлімдемені жабыңыз. $ stmt-> жабу (); }

Ұсынылған: