Hoe om SQL -inspuiting in PHP te voorkom (met foto's)

INHOUDSOPGAWE:

Hoe om SQL -inspuiting in PHP te voorkom (met foto's)
Hoe om SQL -inspuiting in PHP te voorkom (met foto's)

Video: Hoe om SQL -inspuiting in PHP te voorkom (met foto's)

Video: Hoe om SQL -inspuiting in PHP te voorkom (met foto's)
Video: ПОЛЯКИ О РУССКИХ - это не покажут по ТВ 2024, Mei
Anonim

Hierdie wikiHow leer u hoe u SQL -inspuiting kan voorkom met behulp van voorbereide stellings in PHP. SQL -inspuiting is vandag een van die algemeenste kwesbaarhede in webtoepassings. Voorbereide stellings gebruik gebonde parameters en kombineer nie veranderlikes met SQL -snare nie, wat dit vir 'n aanvaller onmoontlik maak om die SQL -stelling te verander.

Voorbereide stellings kombineer die veranderlike met die saamgestelde SQL -stelling, sodat die SQL en die veranderlikes afsonderlik gestuur word. Die veranderlikes word dan geïnterpreteer as blote snare en nie deel van die SQL -stelling nie. As u die metodes in die onderstaande stappe gebruik, hoef u geen ander tegnieke vir die inspuiting van SQL -inspuiting te gebruik nie, soos die mysql_real_escape_string ().

Stappe

Deel 1 van 2: Begrip van SQL -inspuiting

Stap 1. SQL -inspuiting is 'n tipe kwesbaarheid in toepassings wat 'n SQL -databasis gebruik

Die kwesbaarheid ontstaan wanneer 'n gebruikersinvoer in 'n SQL -verklaring gebruik word:

$ naam = $ _GET ['gebruikersnaam']; $ query = "KIES wagwoord VANAF tbl_user WAAR naam = '$ naam'";

Stap 2. Die waarde wat 'n gebruiker in die URL -veranderlike gebruikersnaam invoer, sal aan die veranderlike $ naam toegeken word

Dit word dan direk in die SQL -stelling geplaas, sodat die gebruiker die SQL -stelling kan wysig.

$ naam = "admin" OF 1 = 1 - "; $ query = "KIES wagwoord VANAF tbl_user WAAR naam = '$ naam'";

Stap 3. Die SQL -databasis ontvang dan die SQL -stelling soos volg:

KIES wagwoord VANAF tbl_users WAAR naam = 'admin' OF 1 = 1 - '

  • Dit is geldige SQL, maar in plaas daarvan om een wagwoord vir die gebruiker terug te gee, sal die verklaring al die wagwoorde in die tabel tbl_user teruggee. Dit is nie iets wat u in u webtoepassings wil hê nie.

    Deel 2 van 2: Gebruik mySQLi om voorbereide state te skep

    2542820 1
    2542820 1

    Stap 1. Skep die mySQLi SELECT -navraag

    Gebruik die onderstaande kode om data uit 'n tabel te KIES met behulp van mySQLi Prepared Statements.

    $ naam = $ _GET ['gebruikersnaam']; if ($ stmt = $ mysqli-> prepar ("SELECT password FROM tbl_users WHERE name =?")) {// Bind 'n veranderlike aan die parameter as 'n string. $ stmt-> bind_param ("s", $ naam); // Voer die stelling uit. $ stmt-> uitvoer (); // Kry die veranderlikes uit die navraag. $ stmt-> bind_result ($ pas); // Haal die data. $ stmt-> haal (); // Gee die data. printf ("Wagwoord vir gebruiker %s is %s / n", $ naam, $ pas); // Sluit die voorbereide verklaring. $ stmt-> sluit (); }

    Nota: die veranderlike $ mysqli is die mySQLi -verbindingsobjek

    2542820 2
    2542820 2

    Stap 2. Skep die mySQLi INSERT -navraag

    Gebruik die onderstaande kode om data in 'n tabel in te voer met behulp van mySQLi Prepared Statements.

    $ naam = $ _GET ['gebruikersnaam']; $ wagwoord = $ _GET ['wagwoord']; if ($ stmt = $ mysqli-> prepar ("INVOER IN Tbl_gebruikers (naam, wagwoord) WAARDES (?,?)"))) {// Bind die veranderlikes aan die parameter as snare. $ stmt-> bind_param ("ss", $ naam, $ wagwoord); // Voer die stelling uit. $ stmt-> uitvoer (); // Sluit die voorbereide verklaring. $ stmt-> sluit (); }

    Nota: die veranderlike $ mysqli is die mySQLi -verbindingsobjek

    2542820 3
    2542820 3

    Stap 3. Skep die mySQLi UPDATE -navraag

    Gebruik die onderstaande kode om data in 'n tabel op te dateer met behulp van mySQLi Prepared Statements.

    $ naam = $ _GET ['gebruikersnaam']; $ wagwoord = $ _GET ['wagwoord']; if ($ stmt = $ mysqli-> prepar ("UPDATE tbl_users SET password =? WHERE name =?")) {// Bind die veranderlikes aan die parameter as snare. $ stmt-> bind_param ("ss", $ wagwoord, $ naam); // Voer die stelling uit. $ stmt-> uitvoer (); // Sluit die voorbereide verklaring. $ stmt-> sluit (); }

    Nota: die veranderlike $ mysqli is die mySQLi -verbindingsobjek

    2542820 4
    2542820 4

    Stap 4. Skep die mySQLi DELETE -navraag

    Die onderstaande script is hoe om data uit 'n tabel te verwyder met behulp van mySQLi Prepared Statements.

    $ naam = $ _GET ['gebruikersnaam']; $ wagwoord = $ _GET ['wagwoord']; if ($ stmt = $ mysqli-> prepar ("DELETE FROM tbl_users WHERE name =?")) {// Bind die veranderlike aan die parameter as 'n string. $ stmt-> bind_param ("s", $ naam); // Voer die stelling uit. $ stmt-> uitvoer (); // Sluit die voorbereide verklaring. $ stmt-> sluit (); }

Aanbeveel: