Kā novērst SQL ievadīšanu PHP (ar attēliem)

Satura rādītājs:

Kā novērst SQL ievadīšanu PHP (ar attēliem)
Kā novērst SQL ievadīšanu PHP (ar attēliem)

Video: Kā novērst SQL ievadīšanu PHP (ar attēliem)

Video: Kā novērst SQL ievadīšanu PHP (ar attēliem)
Video: Телевизор Philips нет изображения 2024, Maijs
Anonim

Šajā vietnē wikiHow tiek mācīts, kā novērst SQL ievadīšanu, izmantojot PHP sagatavotos paziņojumus. SQL injekcija mūsdienās ir viena no visbiežāk sastopamajām tīmekļa lietojumprogrammu ievainojamībām. Sagatavotajos pārskatos tiek izmantoti saistītie parametri un tie nekombinē mainīgos ar SQL virknēm, tādējādi uzbrucējam nav iespējams modificēt SQL priekšrakstu.

Sagatavotie pārskati apvieno mainīgo ar apkopoto SQL paziņojumu, lai SQL un mainīgie tiktu nosūtīti atsevišķi. Pēc tam mainīgie tiek interpretēti kā vienkāršas virknes, nevis daļa no SQL priekšraksta. Izmantojot tālāk norādīto darbību metodes, jums nebūs jāizmanto citas SQL injekcijas filtrēšanas metodes, piemēram, mysql_real_escape_string ().

Soļi

1. daļa no 2: Izpratne par SQL injekciju

1. darbība. SQL injekcija ir ievainojamības veids lietojumprogrammās, kas izmanto SQL datu bāzi

Neaizsargātība rodas, kad lietotāja ievade tiek izmantota SQL paziņojumā:

$ name = $ _GET ['lietotājvārds']; $ query = "SELECT paroli no tbl_user WHERE name = '$ name'";

2. darbība. Lietotāja ievadītā vērtība URL mainīgajā lietotājvārdā tiks piešķirta mainīgajam $ name

Pēc tam tas tiek ievietots tieši SQL paziņojumā, ļaujot lietotājam rediģēt SQL paziņojumu.

$ name = "admin" VAI 1 = 1 - "; $ query = "SELECT paroli no tbl_user WHERE name = '$ name'";

Solis 3. Pēc tam SQL datu bāze saņems SQL paziņojumu šādi:

ATLASIET paroli no tbl_users WHERE name = 'admin' OR 1 = 1 - '

  • Tas ir derīgs SQL, bet tā vietā, lai atgrieztu lietotājam vienu paroli, paziņojums atgriezīs visas tabulas tbl_user paroles. Tas nav kaut kas, ko vēlaties savās tīmekļa lietojumprogrammās.

    2. daļa no 2: MySQLi izmantošana sagatavotu pārskatu izveidei

    2542820 1
    2542820 1

    1. darbība. Izveidojiet vaicājumu mySQLi SELECT

    Izmantojiet zemāk esošo kodu, lai ATLASĪTU datus no tabulas, izmantojot mySQLi sagatavotos paziņojumus.

    $ name = $ _GET ['lietotājvārds']; if ($ stmt = $ mysqli-> sagatavot ("SELECT password FROM tbl_users WHERE name =?")) {// Piesaistiet mainīgo parametram kā virkni. $ stmt-> bind_param ("s", $ nosaukums); // Izpildīt paziņojumu. $ stmt-> izpildīt (); // Iegūstiet mainīgos no vaicājuma. $ stmt-> bind_result ($ caurlaide); // Iegūstiet datus. $ stmt-> atnest (); // Parādīt datus. printf ("Lietotāja %s parole ir %s / n", $ name, $ pass); // Aizveriet sagatavoto paziņojumu. $ stmt-> aizvērt (); }

    Piezīme. Mainīgais $ mysqli ir mySQLi savienojuma objekts

    2542820 2
    2542820 2

    2. darbība. Izveidojiet vaicājumu mySQLi INSERT

    Izmantojiet zemāk esošo kodu, lai ievietotu datus tabulā, izmantojot mySQLi sagatavotos paziņojumus.

    $ name = $ _GET ['lietotājvārds']; $ parole = $ _GET ['parole']; if ($ stmt = $ mysqli-> sagatavot ("INSERT INTO tbl_users (vārds, parole) VĒRTĪBAS (?,?)")) {// Saistīt mainīgos ar parametru kā virknes. $ stmt-> bind_param ("ss", $ nosaukums, $ parole); // Izpildīt paziņojumu. $ stmt-> izpildīt (); // Aizveriet sagatavoto paziņojumu. $ stmt-> aizvērt (); }

    Piezīme. Mainīgais $ mysqli ir mySQLi savienojuma objekts

    2542820 3
    2542820 3

    3. solis. Izveidojiet vaicājumu mySQLi UPDATE

    Izmantojiet zemāk esošo kodu, lai atjauninātu datus tabulā, izmantojot mySQLi sagatavotos pārskatus.

    $ name = $ _GET ['lietotājvārds']; $ parole = $ _GET ['parole']; if ($ stmt = $ mysqli-> sagatavot ("UPDATE tbl_users SET password =? WHERE name =?")) {// Piesaistiet mainīgos parametram kā virknes. $ stmt-> bind_param ("ss", $ parole, $ nosaukums); // Izpildīt paziņojumu. $ stmt-> izpildīt (); // Aizveriet sagatavoto paziņojumu. $ stmt-> aizvērt (); }

    Piezīme. Mainīgais $ mysqli ir mySQLi savienojuma objekts

    2542820 4
    2542820 4

    Solis 4. Izveidojiet vaicājumu mySQLi DELETE

    Zemāk esošais skripts ir veids, kā izdzēst datus no tabulas, izmantojot mySQLi sagatavotos paziņojumus.

    $ name = $ _GET ['lietotājvārds']; $ parole = $ _GET ['parole']; if ($ stmt = $ mysqli-> sagatavot ("DELETE FROM tbl_users WHERE name =?")) {// Piesaistiet mainīgo parametram kā virkni. $ stmt-> bind_param ("s", $ nosaukums); // Izpildīt paziņojumu. $ stmt-> izpildīt (); // Aizveriet sagatavoto paziņojumu. $ stmt-> aizvērt (); }

Ieteicams: