SQL Injection Werkt niet!?!
Hallo PHP hulpers
Ik heb een website waar dit voorkomt http://www.blablabla.nl/newspage.php?id=1 alleen is het is niet anti sql injection. Dus ik heb geprobeerd op te beveiligen. nu heb ik dit toegevoegd.
$id = htmlspecialchars(mysql_real_escape_string($_GET['id']));
maar helaas werkt dit niet! Ik gebruik het programma Havij om te testen en kan gewoon in de database komen! Tenzij als ik is_numeric function toevoegd kan hij er niet erin. Maar is dit dan wel veilig genoeg? en mysql_real_escape is toch meer dan genoeg om SQL Injection te voorkomen?
Graag jullie mening.
Met Vriendelijke Groet,
Shu
Ik heb een website waar dit voorkomt http://www.blablabla.nl/newspage.php?id=1 alleen is het is niet anti sql injection. Dus ik heb geprobeerd op te beveiligen. nu heb ik dit toegevoegd.
$id = htmlspecialchars(mysql_real_escape_string($_GET['id']));
maar helaas werkt dit niet! Ik gebruik het programma Havij om te testen en kan gewoon in de database komen! Tenzij als ik is_numeric function toevoegd kan hij er niet erin. Maar is dit dan wel veilig genoeg? en mysql_real_escape is toch meer dan genoeg om SQL Injection te voorkomen?
Graag jullie mening.
Met Vriendelijke Groet,
Shu
Input kan je goed beveiligen dmv mysql_real_escape_string();
Voor velden die enkel met numerieke waardes kunnen werken, zal je is_numeric moeten gebruiken.
Je kan dmv strip_tags nog html code uit de input halen voordat je het in de database gooit.
htmlentities / stripslashes gebruiken bij het ophalen van je data uit de db om het goed weer te geven op je scherm
Voor velden die enkel met numerieke waardes kunnen werken, zal je is_numeric moeten gebruiken.
Je kan dmv strip_tags nog html code uit de input halen voordat je het in de database gooit.
htmlentities / stripslashes gebruiken bij het ophalen van je data uit de db om het goed weer te geven op je scherm
Als ik het goed heb moet je de string in je SQL string escapen in plaats van ervoor. (maar weet dit niet zeker). Heb alles op de volgende manier gedaan:
en dan kan ie er niet inkomen.
Code (php)
1
2
3
2
3
<?php
$qString = "Select * FROM eenTabel WHERE id = '".mysql_real_escape_string($id)."'";
?>
$qString = "Select * FROM eenTabel WHERE id = '".mysql_real_escape_string($id)."'";
?>
en dan kan ie er niet inkomen.
Nou ik zet niks in de database maar ik vraag welke id het is uit URL en vervolgens wordt uit de database de goede tekst weergegeven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
include ("inc/connection.php");
$id = htmlspecialchars(mysql_real_escape_string($_GET['id']));
$result = mysql_query("SELECT * FROM news Where id = $id")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
echo $row['title'];
}
?>
include ("inc/connection.php");
$id = htmlspecialchars(mysql_real_escape_string($_GET['id']));
$result = mysql_query("SELECT * FROM news Where id = $id")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
echo $row['title'];
}
?>
Gewijzigd op 02/12/2010 14:14:47 door Shu Chen
Alleen mysql_real_escape_string($_GET['id']) is voldoende.
- SanThe - op 02/12/2010 14:18:05:
Alleen mysql_real_escape_string($_GET['id']) is voldoende.
Dacht ik ook maar ik kan nog steeds met een SQL injection programma erin!
Shu Chen op 02/12/2010 14:20:48:
Dacht ik ook maar ik kan nog steeds met een SQL injection programma erin!
En wat is dat? Graag info.
Met het boven genoemde programma (Havij) laat dit zien.
Analyzing http://blablablbalbal.nl/newspage.php?id=1
Host IP: xxx.xxx.72.103
Web Server: Apache/2
Keyword Found: vijf
Injection type is Integer
DB Server: MySQL
Selected Column Count is 7
Finding string column
Valid String Column is 2
Target Vulnerable :D
Current DB: (***geheim**)
Analyzing http://blablablbalbal.nl/newspage.php?id=1
Host IP: xxx.xxx.72.103
Web Server: Apache/2
Keyword Found: vijf
Injection type is Integer
DB Server: MySQL
Selected Column Count is 7
Finding string column
Valid String Column is 2
Target Vulnerable :D
Current DB: (***geheim**)
En wat is het lek dan?
Ik ken dit verder niet.
Ik ken dit verder niet.
@Santhe
Ik heb net het programmatje geprobeerd en moet zeggen dat het toch zeker netjes is. Maar ik probeer net hetzelfde als wat jij doet en bij mij kan hij er niet in komen? Heb je niet ergens anders een lek?
Ik heb net het programmatje geprobeerd en moet zeggen dat het toch zeker netjes is. Maar ik probeer net hetzelfde als wat jij doet en bij mij kan hij er niet in komen? Heb je niet ergens anders een lek?
Niels Kieviet op 02/12/2010 15:51:29:
@Santhe
Ik heb net het programmatje geprobeerd en moet zeggen dat het toch zeker netjes is. Maar ik probeer net hetzelfde als wat jij doet en bij mij kan hij er niet in komen? Heb je niet ergens anders een lek?
Ik heb net het programmatje geprobeerd en moet zeggen dat het toch zeker netjes is. Maar ik probeer net hetzelfde als wat jij doet en bij mij kan hij er niet in komen? Heb je niet ergens anders een lek?
Mag ik jouw code eens bekijken die je hebt gebruikt?
Een geautomatiseerd script levert nooit dezelfde resultaten als een handmatige injectie. Kun je mij de URL per PM sturen?
PM Verstuurd.
Snap gewoon heel mysql real escape string gewoon niet!
index.php
test.php
Snap gewoon heel mysql real escape string gewoon niet!
index.php
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
include (connection.php);
$query1 = "SELECT * FROM test";
$result = mysql_query($query1);
while($row = mysql_fetch_array( $result )) {
echo $row['content'] . " <a href='test.php?id=" . $row['id'] . "'>Lees artikel</a><br>";
}
?>
include (connection.php);
$query1 = "SELECT * FROM test";
$result = mysql_query($query1);
while($row = mysql_fetch_array( $result )) {
echo $row['content'] . " <a href='test.php?id=" . $row['id'] . "'>Lees artikel</a><br>";
}
?>
test.php
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
include (connection.php);
$id = mysql_real_escape_string($_GET['id']);
$result = mysql_query("SELECT * FROM test Where id = $id")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
echo $row['id'] . $row['content'];
}
?>
include (connection.php);
$id = mysql_real_escape_string($_GET['id']);
$result = mysql_query("SELECT * FROM test Where id = $id")
or die(mysql_error());
while($row = mysql_fetch_array( $result )) {
echo $row['id'] . $row['content'];
}
?>




