[SQL & PHP] Beveiligen codes

Gestart doorDylan46 reacties59 weergaven

47 berichten · pagina 1 van 4

Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Ik zou graag willen weten hoe je een goede en veilige Query maakt.

Ik weet al 1 "code" namelijk mysql_real_escape_string maar waar zou deze in de query moeten komen?

En zijn er nog andere "codes" die tegen SQL Injections gaat?

toevoeging op 5 april 2012, 17:41:21:
& is er een programma die check of er ook shells in een systeem zitten?
0
Berichten
5.897
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Voorbeeld :
[COLOR= #0000BB]<?[/COLOR]
mysqli_query[COLOR= #007700]([/COLOR][COLOR= #DD0000]"INSERT INTO one2xs (naam,pass) VALUES ("[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR]htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]naam[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR][URL="http://www.php.net/sha1"]sha1[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]pass[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]")"[/COLOR][COLOR= #007700])[/COLOR]or [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]Er ging iets mis![/COLOR][COLOR= #007700]);[/COLOR]
?>
0
Berichten
3.074
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
De functie mysql_real_escape_string() moet bij $_GET, $_POST en $_COOKIE.

Hoe je het moet toepassen:

mysql_real_escape_string($_GET)


Bij PDO is het quote() ipv mysql_real_escape_string().
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Joeyl schreef:
De functie mysql_real_escape_string() moet bij $_GET, $_POST en $_COOKIE.

Hoe je het moet toepassen:

mysql_real_escape_string($_GET)
Bij PDO is het quote() ipv mysql_real_escape_string().

Ok,

Wat is PDO?
0
Berichten
3.074
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dylanh schreef:
Eerdere citaten tonen
Joeyl schreef:
De functie mysql_real_escape_string() moet bij $_GET, $_POST en $_COOKIE.
Hoe je het moet toepassen:

mysql_real_escape_string($_GET)


Bij PDO is het quote() ipv mysql_real_escape_string().
Ok,

Wat is PDO?

Soort van SQL, Google maar. smile
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Joeyl schreef:
Eerdere citaten tonen
Dylanh schreef:
Eerdere citaten tonen
Joeyl schreef:
De functie mysql_real_escape_string() moet bij $_GET, $_POST en $_COOKIE.
Hoe je het moet toepassen:

mysql_real_escape_string($_GET)


Bij PDO is het quote() ipv mysql_real_escape_string().
Ok,

Wat is PDO?
Soort van SQL, Google maar. smile
Nee. SQL is een Query-Language. PDO is een object geörienteerde interface om met een SQL-server verbinding te maken en SQL uit te voeren.
0
Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Rik schreef:
Eerdere citaten tonen
Joeyl schreef:
Eerdere citaten tonen
Dylanh schreef:
Eerdere citaten tonen
Joeyl schreef:
De functie mysql_real_escape_string() moet bij $_GET, $_POST en $_COOKIE.
Hoe je het moet toepassen:

mysql_real_escape_string($_GET)


Bij PDO is het quote() ipv mysql_real_escape_string().
Ok,

Wat is PDO?
Soort van SQL, Google maar. smile
Nee. SQL is een Query-Language. PDO is een object geörienteerde interface om met een SQL-server verbinding te maken en SQL uit te voeren.

Structured Query Language toch?
Maartenl schreef:
Voorbeeld :
[COLOR= #0000BB]<?[/COLOR]
mysqli_query[COLOR= #007700]([/COLOR][COLOR= #DD0000]"INSERT INTO one2xs (naam,pass) VALUES ("[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR]htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]naam[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR][URL="http://www.php.net/sha1"]sha1[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]pass[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]")"[/COLOR][COLOR= #007700])[/COLOR]or [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]Er ging iets mis![/COLOR][COLOR= #007700]);[/COLOR]
?>
htmlentities moet je bij output doen, in de database kan het toch geen kwaad.
0
Berichten
3.074
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Rik schreef:
Eerdere citaten tonen
Joeyl schreef:
Eerdere citaten tonen
Dylanh schreef:
Eerdere citaten tonen
Joeyl schreef:
De functie mysql_real_escape_string() moet bij $_GET, $_POST en $_COOKIE.
Hoe je het moet toepassen:

mysql_real_escape_string($_GET)


Bij PDO is het quote() ipv mysql_real_escape_string().
Ok,

Wat is PDO?
Soort van SQL, Google maar. smile
Nee. SQL is een Query-Language. PDO is een object geörienteerde interface om met een SQL-server verbinding te maken en SQL uit te voeren.

Het lijkt op SQL vind ik biggrin
0
Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Maartenl schreef:
Voorbeeld :
[COLOR= #0000BB]<?[/COLOR]
mysqli_query[COLOR= #007700]([/COLOR][COLOR= #DD0000]"INSERT INTO one2xs (naam,pass) VALUES ("[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR]htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]naam[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR][URL="http://www.php.net/sha1"]sha1[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]pass[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]")"[/COLOR][COLOR= #007700])[/COLOR]or [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]Er ging iets mis![/COLOR][COLOR= #007700]);[/COLOR]
?>
Dit is een vrij slecht voorbeeld, hier klopt helemaal niks van.
Je gebruikt htmlentities in een query, terwijl dat puur is voor echoën
Daarnaast gebruik je real escape string op een sha ecyptie, als je iets encrypt kan het geen injectie meer zijn dus onnodig
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Heeft iemand een goed voorbeeld?
0
Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Als je gewoon op alle user input real_escape_string gebuikt kan er incrincipe niks fout gaan!
Meer beveiliging is er niet/heb je niet nodig
0
Berichten
5.897
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Eleky schreef:
Eerdere citaten tonen
Maartenl schreef:
Voorbeeld :
[COLOR= #0000BB]<?[/COLOR]
mysqli_query[COLOR= #007700]([/COLOR][COLOR= #DD0000]"INSERT INTO one2xs (naam,pass) VALUES ("[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR]htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]naam[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR][URL="http://www.php.net/sha1"]sha1[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]pass[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]")"[/COLOR][COLOR= #007700])[/COLOR]or [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]Er ging iets mis![/COLOR][COLOR= #007700]);[/COLOR]
?>

Dit is een vrij slecht voorbeeld, hier klopt helemaal niks van.
Je gebruikt htmlentities in een query, terwijl dat puur is voor echoën
Daarnaast gebruik je real escape string op een sha ecyptie, als je iets encrypt kan het geen injectie meer zijn dus onnodig

Ik vind het beter in de input, omdat je dan maar 1x moet doen, bij het echoën meerdere keren.
mysql(i)_real_escape_string zet ik er gewoon altijd op
0
Berichten
10.421
Reputatie
4
Punten
0,00
Lid sinds
Laatst gezien
[COLOR= #0000BB]<?php
 $result[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT * FROM persoon WHERE achternaam = "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]achternaam[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]
 ?>
0
Dylan

Lid · Topicstarter

Berichten
14.025
Reputatie
1
Punten
0,01
Lid sinds
Laatst gezien
Aarclay schreef:
[COLOR= #0000BB]<?php
 $result[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT * FROM persoon WHERE achternaam = "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]achternaam[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]
 ?>
Aha, bedankt. En als je bijv dit hebt;

[COLOR= #0000BB]<?php
$user[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$_GET[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]username[/COLOR][COLOR= #007700]];[/COLOR]

[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]SELECT * FROM iets WHERE username= $user[/COLOR][COLOR= #007700]);[/COLOR]
?>


Waar moet dan de mysql_real_escape_string? Bij $user of in de query?
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Raaoul schreef:
Mac ook gewoon lekker voor scripting hoor, geef eens argumenten Rik
Maartenl schreef:
Eerdere citaten tonen
Eleky schreef:
Eerdere citaten tonen
Maartenl schreef:
Voorbeeld :
[COLOR= #0000BB]<?[/COLOR]
mysqli_query[COLOR= #007700]([/COLOR][COLOR= #DD0000]"INSERT INTO one2xs (naam,pass) VALUES ("[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR]htmlentities[COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]naam[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]", "[/COLOR][COLOR= #007700].[/COLOR]mysqli_real_escape_string[COLOR= #007700]([/COLOR][URL="http://www.php.net/sha1"]sha1[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]pass[/COLOR][COLOR= #007700]])).[/COLOR][COLOR= #DD0000]")"[/COLOR][COLOR= #007700])[/COLOR]or [URL="http://www.php.net/die"]die[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]Er ging iets mis![/COLOR][COLOR= #007700]);[/COLOR]
?>

Dit is een vrij slecht voorbeeld, hier klopt helemaal niks van.
Je gebruikt htmlentities in een query, terwijl dat puur is voor echoën
Daarnaast gebruik je real escape string op een sha ecyptie, als je iets encrypt kan het geen injectie meer zijn dus onnodig
Ik vind het beter in de input, omdat je dan maar 1x moet doen, bij het echoën meerdere keren.
mysql(i)_real_escape_string zet ik er gewoon altijd op

Ja, en als je dan een bericht wil editten waar speciale tekens in staan ( <, >, &) dan ga jij bij het editvakje & e.d. krijgen of je moet weer gaan kloten om het te veranderen.
Htmlentities dus alleen bij het echoën doen.
Dylanh schreef:
Eerdere citaten tonen
Aarclay schreef:
[COLOR= #0000BB]<?php
 $result[/COLOR] [COLOR= #007700]=[/COLOR] [URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT * FROM persoon WHERE achternaam = "[/COLOR][COLOR= #007700].[/COLOR][URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_POST[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]achternaam[/COLOR][COLOR= #007700]]).[/COLOR][COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]
 ?>
Aha, bedankt. En als je bijv dit hebt;

[COLOR= #0000BB]<?php
$user[/COLOR] [COLOR= #007700]=[/COLOR] [COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]username[/COLOR][COLOR= #007700]];[/COLOR]

[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]SELECT * FROM iets WHERE username= $user[/COLOR][COLOR= #007700]);[/COLOR]
?>


Waar moet dan de mysql_real_escape_string? Bij $user of in de query?

Er vanuit gaande dat je bij het registreren al checkt op speciale tekens in de naam, is het niet nodig om sessies te escapen omdat de gebruiker sessies niet kan aanpassen. Zoniet dan kan beide. Zorg dan wel dat je de vars buiten je quotes haalt:

[COLOR= #0000BB]<?php[/COLOR]
[URL="http://www.php.net/mysql_query"]mysql_query[/URL][COLOR= #007700]([/COLOR][COLOR= #DD0000]"SELECT * FROM iets WHERE username= "[/COLOR] [COLOR= #007700].[/COLOR] [URL="http://www.php.net/mysql_real_escape_string"]mysql_real_escape_string[/URL][COLOR= #007700]([/COLOR][COLOR= #0000BB]$_SESSION[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]username[/COLOR][COLOR= #007700]]) .[/COLOR] [COLOR= #DD0000]""[/COLOR][COLOR= #007700]);[/COLOR]
?>


$_GET, $_POST en $_COOKIE zijn eigenlijk de enige die je moet escapen, tenzij je niet weet wat je in $_SESSION variabelen zet. Maar dat is onlogisch.

Bovendien is het opslaan van een username in een session erg onhandig. Stel je voor dat je je naam wil wijzigen.. Gebruik liever een $_SESSION[id] o.i.d. om te kijken welke gebruiker ingelogt is.
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren