MySQL injections

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martin Meijer

Martin Meijer

07/04/2007 10:05:00
Quote Anchor link
Wat kan je daadwerkelijk tegen mysql injections doen?

En hoe kunnen andere mensen zoeken naar mogelijke mysql injections in een nieuw gemaakte source?
Gewijzigd op 01/01/1970 01:00:00 door Martin Meijer
 
PHP hulp

PHP hulp

22/09/2020 12:13:58
 
Niels Beckers

Niels Beckers

07/04/2007 10:08:00
Quote Anchor link
mysql_real_escape_string() gebruiken.
jij kan op zoek gaan door bevoorbeeld in elke inputr een ' of " enzo te zetten dan kan het misgaan in de mysql
 
Martin Meijer

Martin Meijer

07/04/2007 10:32:00
Quote Anchor link
En als ik alle input die gedaan wordt in een query weg schrijf als volgt:

mysql_query("INSERT INTO leden(id,gebruiker,aangemeld,etc..." VALUES('','".$_POST['gebruiker']."','".$_POST['datum']."',etc...)) or die(mysql_error());

Is dit veilig omdat ik het tussen ' ' zet en dan ".$_POST['var']."

Of moet ik er meer tegen beveiligen?
 
Joren de Wit

Joren de Wit

07/04/2007 10:40:00
Quote Anchor link
Nee dat is niet veilig! Een ' in de input van een gebruiker levert nu namelijk een probleem op. En juist dit probleem zou misbruikt kunnen worden in de vorm van sql injectie.

Alle input van een gebruiker in de vorm van een string moet je beveiligen met de functie mysql_real_escape_string(). In het geval van integers zul je moeten controleren of het wel daadwerkelijk integers zijn. Gebruik bijvoorbeeld de functie ctype_digit().
 
Jurgen assaasas

Jurgen assaasas

07/04/2007 10:55:00
Quote Anchor link
Over ctype_digit() gesproken. Als ik die gebruik op mijn home server dan krijg ik error van undefined function. Ik gebruik PHP 5.1
 
Baarr

Baarr

07/04/2007 11:02:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$query
= "INSERT INTO leden(id,gebruiker,aangemelddatum)  VALUES ('','". mysql_real_escape_string($_POST['gebruiker'])."','".mysql_real_escape_string($_POST['datum'])."')";

?>


Overigens voldoet is_numeric ook wel om te checken of het een getal is.
Gewijzigd op 01/01/1970 01:00:00 door Baarr
 
Joren de Wit

Joren de Wit

07/04/2007 11:06:00
Quote Anchor link
Jurgen schreef op 07.04.2007 10:55:
Over ctype_digit() gesproken. Als ik die gebruik op mijn home server dan krijg ik error van undefined function. Ik gebruik PHP 5.1
Vreemd. Het zou gewoon moeten werken. Maar goed, je kunt ook altijd nog is_numeric() gebruiken.
 
Martin Meijer

Martin Meijer

07/04/2007 11:07:00
Quote Anchor link
ok geweldig! Hartstikke bedankt jongens!

Als er meer beveiligings tips zijn, laat maar weten graag!
 
Robert Deiman

Robert Deiman

07/04/2007 11:11:00
Quote Anchor link
Voor checken of het een getal is kan je net zo goed intval() gebruiken. elk getal maakt die het integer value van. Deze kan je in tegenstelling tot is_numeric() gewoon in je query gebruiken, net zoals mysql_real_escape_string()
 
Joren de Wit

Joren de Wit

07/04/2007 11:20:00
Quote Anchor link
Hmm, intval() zou ik toch liever niet gebruiken. Deze functie kan nogal eens onverwachte resultaten opleveren. Zo kun je bijvoorbeeld al geen getallen groter dan 2147483647 (de maximale waarde van een integer op een 32 bit systeem) gebruiken.

En kijk bijvoorbeeld ook eens naar dit voorbeeldje.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo intval(0031); // 25
?>

Je denkt dat je de landcode van Nederland ingevuld hebt, maar in je database komt 25 te staan...
 
Robert Deiman

Robert Deiman

07/04/2007 11:29:00
Quote Anchor link
Hey!! Dat is nieuw voor mij, maar goed dat je het zegt :) Dat is wel erg raar, maar dan zal ik dat zelf alleen gebruiken als het om een id of een normaal nummer gaat. (deed ik toch al, anders vallen voorloop nullen weg, dus dit soort dingen deed ik met een regex)
 
Jan Koehoorn

Jan Koehoorn

07/04/2007 11:30:00
Quote Anchor link
Blanche schreef op 07.04.2007 11:20:
Hmm, intval() zou ik toch liever niet gebruiken. Deze functie kan nogal eens onverwachte resultaten opleveren. Zo kun je bijvoorbeeld al geen getallen groter dan 2147483647 (de maximale waarde van een integer op een 32 bit systeem) gebruiken.

En kijk bijvoorbeeld ook eens naar dit voorbeeldje.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo intval(0031); // 25
?>

Je denkt dat je de landcode van Nederland ingevuld hebt, maar in je database komt 25 te staan...

PHP denkt blijkbaar dat je dan een octaal nummer bedoelt. 3 * 8 + 1 ...
 
Martin Meijer

Martin Meijer

07/04/2007 11:36:00
Quote Anchor link
Ok dat is raar :S, maar bedankt voor alle tips. Ik ge gelijk aan de slag!
 
Niek s

niek s

07/04/2007 13:41:00
 
Kalle P

Kalle P

07/04/2007 13:45:00
Quote Anchor link
Door wie zou die gemaakt zijn.

Ik stuur mensen altijd hier door naar toe:
http://www.phpfreakz.nl/downloadz/webprogrammers_hacking_huide.pdf

edit:
foutje
Gewijzigd op 01/01/1970 01:00:00 door Kalle P
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.