SQL Injection Werkt niet!?!
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
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
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.
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.
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**)
Ik ken dit verder niet.
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?
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'];
}
?>