Door middel van mysql injection kan je compleet worden gehackt.
Eerst dacht ik dat het gelul was , maar niet.
Zou zoiets niet makkelijker kunnen als hier uitgelegd?
Hoe kan je dit nu tegengaan?:
Er zijn verschillende mogenlijkheden om het SQL-injection zo veel mogenlijk tegen te gaan.
Ik zal er even 2 toelichten, één ervan zijn de functies mysql_escape_string, mysql_real_escape_string en strip_slashes, en de ander is het filteren van gegevens.
Het nakijken van gegevens door middel van de bovenstaande functies werkt goed onder de volgende functie:
Hierdoor wordt je verstuurde waarde goed gecontroleerd op tekens die er niet thuishoren.
Een andere manier van tegengaan is het filteren van gegevens, alhoewel dat niet werkt bij bijvoorbeeld het nakijken van gebruikersnamen, maar wel bij keuzenlijsten.
Stel je een formulier voor met een keuzelijst van prijzen. Je kunt bijvoorbeeld kiezen tussen een tegoedbon van 10€, 25€, 50€ en 100€. Nu kun je dit controleren in php:
Code:
<?php
$valid_prices = array(10, 25, 50, 100);
if(!in_array($_GET[\'price\'], $valid_prices)){
die(\"Hack attempted!\");
}else{
// ga door met de code
} ?>
Voor meer info & bron ;
[Login om links te zien]
jacob_slomp
2005-07-04 09:12:00
aha, ik snap het al, hiermee bedoelen ze dat je zo query's kan veranderen via de GET methode, maar van stripslashes wordt het volgens mij niet anders.
jacob_slomp
2005-07-04 09:14:45
blijkbaar zit het met de code van scriptkiddies wel goed en ik gebruik die functies niet, op die array na dan.
jacob_slomp
2005-07-04 09:25:54
oftwel doe gewoon overal addslashes(), stel je hebt de volgende code:
<?
$sql=mysql_query("update tabel set naam='".$_GET['naam']."' where id='".$_GET['id']."'");
het gevaarlijke is als je hier bij naam invult:
$_GET['naam']="Jacob', id='4";
Rinse
2005-07-04 13:36:43
Wel jammer dat dit bij php inzit dat je zulke dingen kunt veranderen :p
lees het artikel op phpfreakz hierover maar eens door.
[Login om links te zien]
bazzzz
2006-12-08 01:21:27
Beste oplossing volgens PHP:
Using mysql_real_escape_string() around each variable prevents SQL Injection. This example demonstrates the "best practice" method for querying a database, independent of the Magic Quotes setting.
[code]<?php
// Quote variable to make safe
function quote_smart($value)
{
// Stripslashes
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
// Quote if not a number or a numeric string
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
// Make a safe query
$query = sprintf("SELECT * FROM users WHERE user=%s AND password=%s",
quote_smart($_POST['username']),
quote_smart($_POST['password']));
mysql_query($query);
?>[/code]
The query will now execute correctly, and SQL Injection attacks will not work.
BRON: [Login om links te zien]
[quote]It's important to note that the quote_smart() function will automatically add single quotes to strings passed into it so you do not have to put them in yourself.[/quote]