Ero sivun ”SQL-injektio” versioiden välillä

[katsottu versio][katsottu versio]
Poistettu sisältö Lisätty sisältö
Dexbot (keskustelu | muokkaukset)
p Removing Link GA template (handled by wikidata)
Xqbot (keskustelu | muokkaukset)
p Botti: Korvaa vanhentunut <source>-tagi ja "enclose"-parametri
Rivi 5:
Klassinen esimerkki on seuraavan tyyppinen ohjelmakoodissa annettu komento (pseudokoodina):
 
<sourcesyntaxhighlight lang="c">
execute("SELECT * FROM users WHERE user_name = '" + user_name + "';");
</syntaxhighlight>
</source>
 
Jos muuttujan <tt>user_name</tt> sisältö tulee suoraan käyttäjältä, voi käyttäjä antaa nimeksi <tt>"'; DROP TABLE users; --"</tt> jolloin seuraava käsky suoritetaan tietokantapalvelimella:
 
<sourcesyntaxhighlight lang="sql">
SELECT * FROM users WHERE user_name = ''; DROP TABLE users; --';
</syntaxhighlight>
</source>
 
Jälkimmäinen komento suoritetaan, vaikka ohjelmoijan tarkoitus oli sallia vain SELECT-lauseen suoritus.
Rivi 21:
Tästäkin huolimatta tilanne, jossa SQL-komento muodostetaan yhdistelemällä muuttujien arvoja, on riskialtis. Useimmissa tietokantarajapinnoissa voi käyttää parametreja:
 
<sourcesyntaxhighlight lang="c">
prepare("SELECT * FROM users WHERE user_name = ?;");
set_parameter(1,user_name,STRING);
execute_prepared();
</syntaxhighlight>
</source>
 
Tällöin itse ohjelman ei tarvitse varmistua merkkijonon oikeellisuudesta, vaan tietokantarajapinta tekee tarvittavat toimenpiteet.