Hallo,

Op mijn site heb ik nu een gastenboek en een soort vraag en aanbod.

Bij het gastenboek kunnen de mensen zelf online iets neerzetten, en bij de vraag en aanbod kan iemand een advertentie plaatsen doormiddel van een formuliertje. En die gegevens worden dan in de database gezet, en ook weer uitgelezen op de vraag en aanbod pagina.

Maar ik zat allemaal te zoeken op websites etc.
Maar toen merkte ik op dat men via sql injection de site kan gaan vergallen.

Kunnen ze dat ook doen via mij vraag en aanbod en mij gastenboek?

Ik hoop dat jullie me kunnen helpen :)
Om uitsluitsel te geven is het wellicht handig als je wat code hier neerzet zodat we er is naar kunnen kijken. Verder staat hier HIER ook nog de nodige informatie


edit: link aangepast
Die link geeft een error bij de gemiddelde PHPuser lissy;-) Ik begon hem al te wantrouwen toen ik de bestandsnaam zag: edittopic.php
Jakkes dan hier maar de code die ik als antwoord kreeg:
<?php
// zonder spaties
if (preg_match('/[\r\n,;\'"]/', $_POST['Email']) or preg_match('/[\r\n,;\'"]/', $_POST['Bericht']))
?>
Je kan dat op verschillende mannieren.

Om te beginnen kan je uw INSTERT queries al afschermen door er '' rond de values te zetten.
zoals onderstaand voorbeeld

	$sql2 = "INSERT INTO acteurs";
	$sql2 .= " ( voornaam, achternaam )";
	$sql2 .= " VALUES";
	$sql2 .= " ( '".$voornaam."', '".$achternaam."' );";

Als je mysql user kan aanmaken, maak je er ene aan met alleen SELECT lees rechten.
Die gebruik je voor de hele site en voor de adminpages gebruik je een login en als die succesvol is geef je ze meer rechten.
Oke hier de code van de vraag en aanbod die hem verwerkt in de database:

<?php
ob_start();

if($_SERVER['REQUEST_METHOD'] == "POST")
{
mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".$_POST['product']."','".$_POST['naam']."','".$_POST['plaats']."','".$_POST['telefoonnummer']."','".$_POST['email']."','".$_POST['bericht']."','".$_POST['prijs']."','".$_POST['soort']."','".$date."')") or die ( mysql_error() );
echo "Vraag/Aanbod geplaatst";

$afzender = "From: [email protected]";
mail($_POST['email'],'Plaatsing Advertentie','Je advertentie is geplaatst',$afzender);
}

else
{

echo "<B>Vraag/Aanbod plaatsen:</b><br><br>";
echo "<form name='veranderen' method='post'>";
echo "Product naam:<br>";
echo "<input type='text' name='product'><br>";
echo "Naam:<br>";
echo "<input type='text' name='naam'><br>";
echo "Plaats:<br>";
echo "<input type='text' name='plaats'><br>";
echo "Telefoonnummer:<br>";
echo "<input type='text' name='telefoonnummer'><br>";
echo "Email:<br>";
echo "<input type='text' name='email'><br>";
echo "Extra informatie:<br>";
echo "<textarea name='bericht' cols='40' rows='5'></textarea><br>";
echo "Prijs:<br>";
echo "<input type='text' name='prijs'><br>";
echo "Aangeboden/Gezocht:<br>";
echo "<select name='soort'><option value='Aangeboden'>Aangeboden</option><option value='Gezocht'>Gezocht</option></select><br>";
echo "<input type='submit' name='submit' value='Vraag/Aanbod plaatsen'></form>";


}

ob_end_flush();

?>
<?php
ob_start();

if($_SERVER['REQUEST_METHOD'] == "POST")
{
mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".htmlentities($_POST['product'])."','".htmlentities($_POST['naam'])."','".htmlentities($_POST['plaats'])."','".htmlentities($_POST['telefoonnummer'])."','".htmlentities($_POST['email'])."','".htmlentities($_POST['bericht'])."','".htmlentities($_POST['prijs'])."','".htmlentities($_POST['soort'])."','".$date."')") or die ( mysql_error() );
echo "Vraag/Aanbod geplaatst";

$afzender = "From: [email protected]";
mail($_POST['email'],'Plaatsing Advertentie','Je advertentie is geplaatst',$afzender);
}

else
{

echo "<B>Vraag/Aanbod plaatsen:</b><br><br>";
echo "<form name='veranderen' method='post'>";
echo "Product naam:<br>";
echo "<input type='text' name='product'><br>";
echo "Naam:<br>";
echo "<input type='text' name='naam'><br>";
echo "Plaats:<br>";
echo "<input type='text' name='plaats'><br>";
echo "Telefoonnummer:<br>";
echo "<input type='text' name='telefoonnummer'><br>";
echo "Email:<br>";
echo "<input type='text' name='email'><br>";
echo "Extra informatie:<br>";
echo "<textarea name='bericht' cols='40' rows='5'></textarea><br>";
echo "Prijs:<br>";
echo "<input type='text' name='prijs'><br>";
echo "Aangeboden/Gezocht:<br>";
echo "<select name='soort'><option value='Aangeboden'>Aangeboden</option><option value='Gezocht'>Gezocht</option></select><br>";
echo "<input type='submit' name='submit' value='Vraag/Aanbod plaatsen'></form>";


}

ob_end_flush();

?>

Link van Lissy:
Klik
@ Andries : bedankt voor de juiste link!!!
Hey Andries,

Door middel van die htmlentries is mijn script nu beveiligt?zodat de mensen niet kunnen rommelen als ze de gegevens naar de database worden gezet?

Thnx als dat zo is :D
RedCrew schreef op 01.10.2006 09:44
Je kan dat op verschillende mannieren.

Om te beginnen kan je uw INSTERT queries al afschermen door er '' rond de values te zetten.
zoals onderstaand voorbeeld

	$sql2 = "INSERT INTO acteurs";
	$sql2 .= " ( voornaam, achternaam )";
	$sql2 .= " VALUES";
	$sql2 .= " ( '".$voornaam."', '".$achternaam."' );";

Als je mysql user kan aanmaken, maak je er ene aan met alleen SELECT lees rechten.
Die gebruik je voor de hele site en voor de adminpages gebruik je een login en als die succesvol is geef je ze meer rechten.


Dat lijkt leuk alleen dan kan iemand ook nooit een eigen item/bericht plaatsen
Ik heb nu die htmlentities in me script gezet.

Hoe kan ik nu testen dat het daadwerkelijk werkt?

Reageren