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 :)
edit opgelost;

<?php
VALUES('".htmlentities(strip_tags(mysql_real_escape_string($_POST['product'])))."')
?>

Als ik nu <a href="sgsg">sgfsgs</a> invul krijg ik gewoon alleen de tekst te zien, en is het geen link meer.

Edit/ tegelijk gepost :P

kunnen jullie het misschien ook testen?

Als de mensen nu persé een product moeten invullen;

Moet ik het script van de vorige pagina zo toepassen?
Volgens mij niet (A)

<?p
if($_SERVER['REQUEST_METHOD'] == "POST")
if(!empty($_POST['product']){
$product = htmlentities(striptags(mysql_real_escape_string($_POST['product'])));
}else{
echo 'U moet wel een product kiezen';
}
{
mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".htmlentities(strip_tags(mysql_real_escape_string($_POST['product'])))."','".htmlentities(strip_tags(mysql_real_escape_string($_POST['naam'])))."','".htmlentities(strip_tags(mysql_real_escape_string($_POST['plaats'])))."','".htmlentities(strip_tags(mysql_real_escape_string($_POST['telefoonnummer'])))."','".htmlentities(strip_tags(mysql_real_escape_string($_POST['email'])))."','".htmlentities(strip_tags(mysql_real_escape_string($_POST['bericht'])))."','".htmlentities(strip_tags(mysql_real_escape_string($_POST['prijs'])))."','".htmlentities(strip_tags(mysql_real_escape_string($_POST['soort'])))."','".$date."')") or die ( mysql_error() );
$sql = "INSERT INTO tabel_naam (producten) VALUES ('".$product."')";
$res = mysql_query($sql);

if($res){
echo 'Het is goed gegaan';
}else{
echo 'er is iets fout gegaan';
}

echo "Vraag/Aanbod geplaatst";
?>
@Stefan: De functie htmlentities() hoor je niet te gebruiken wanneer je gegevens in de database gaat wegschrijven. Dan kun je de data namelijk niet meer gebruiken voor andere zaken dan html-output, bv. email, text-files etc.

Deze functie gebruik je alleen wanneer je de data ophaalt uit de database en op het scherm wilt weergeven.
Frank schreef op 01.10.2006 14:43
@Stefan: De functie htmlentities() hoor je niet te gebruiken wanneer je gegevens in de database gaat wegschrijven. Dan kun je de data namelijk niet meer gebruiken voor andere zaken dan html-output, bv. email, text-files etc.

Deze functie gebruik je alleen wanneer je de data ophaalt uit de database en op het scherm wilt weergeven.


Kan ik wel de strip_tags gebruiken?
Jazeker! Jij wilt geen html in je database hebben, dan moet je dat er dus eerst uitgooien voordat je de query gaat uitvoeren. Dat doe je dus goed.
Dus

<?p

strip_tags(mysql_real_escape_string($_POST['product']);

?>

in plaats van

<?p

htmlentities(striptags(mysql_real_escape_string($_POST['product'])));
?>

Ik heb nu dit en het werkt en als ik nu bijvoorbeeld <a href="sgsg">sgfsgs</a> invoer krijg ik gewoon alleen de naam te zien :)

Nu hoeft bij de hoofdpagina toch niet die htmlentities?

<?p
mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".strip_tags(mysql_real_escape_string($_POST['product']))."','".strip_tags(mysql_real_escape_string($_POST['naam']))."','".strip_tags(mysql_real_escape_string($_POST['plaats']))."','".strip_tags(mysql_real_escape_string($_POST['telefoonnummer']))."','".strip_tags(mysql_real_escape_string($_POST['email']))."','".strip_tags(mysql_real_escape_string($_POST['bericht']))."','".strip_tags(mysql_real_escape_string($_POST['prijs']))."','".strip_tags(mysql_real_escape_string($_POST['soort']))."','".$date."')") or die ( mysql_error() );
?>
Ik heb geprobeerd om die code if(!empty) toe te passen.

Maar dat wil nog niet echt lukken, ik heb de code van de vorige pagina gebruikt en heb nu dit (alleen voor producht, om te testen)

<?php
if(!empty($_POST['product'])
$product = htmlentities(strip_tags(mysql_real_escape_string($_POST['product'])));
}else{
echo 'U moet wel een product kiezen';
}


// en dan je sql

$sql = "INSERT INTO vraagenaanbod (product) VALUES ('".$product."')";
$res = mysql_query($sql);

if($res){
echo 'Het is goed gegaan';
}else{
echo 'er is iets fout gegaan';
}


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 "<input type='submit' name='submit' value='Vraag/Aanbod plaatsen'></form>";


}

ob_end_flush();

?>


Maar dan krijg ik;
Parse error: parse error, unexpected '{' in vaplaatsen.php on line 2

En als ik die { weghaal krijg ik

Parse error: parse error, unexpected T_VARIABLE in vaplaatsen.php on line 3

Ik heb het idee dat dat form met echo tegenwerkt of iets dergelijks;
Je heb 3 keer else staan, terwijl je maar 2 keer if hebt staan... dat kan natuurlijk niet... ;)

en die { moet er wel staan...
je moet gewoon al je { en } tellen, die moeten nl gelijk zijn.

verder gewoon goed je code doorlezen... dan kan je zelf ook wel een aantal fouten eruit halen...
Oke ik heb even geprobeerd en heb nu dit;

<?php
ob_start();

if($_SERVER['REQUEST_METHOD'] == "POST")
{
mysql_query("INSERT INTO vraagenaanbod (product,naam,plaats,telefoonnummer,email,bericht,prijs,soort,datum) VALUES('".strip_tags(mysql_real_escape_string($_POST['product']))."','".strip_tags(mysql_real_escape_string($_POST['naam']))."','".strip_tags(mysql_real_escape_string($_POST['plaats']))."','".strip_tags(mysql_real_escape_string($_POST['telefoonnummer']))."','".strip_tags(mysql_real_escape_string($_POST['email']))."','".strip_tags(mysql_real_escape_string($_POST['bericht']))."','".strip_tags(mysql_real_escape_string($_POST['prijs']))."','".strip_tags(mysql_real_escape_string($_POST['soort']))."','".$date."')") or die ( mysql_error() );
echo "Vraag/Aanbod geplaatst";
if($_POST['naam'] == '')
{
echo "U heeft geen achternaam ingevuld!<br />";
echo "<a href='javascript:history.back();' style='color: black; text-decoration:none;'>Klik hier om terug te gaan!</a>";
}
else
{
echo 'Uw bericht is helaas niet verstuurd.';
}

$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();

?>

Als ik op advertentie plaatsen klik krijg ik dit;

Vraag/Aanbod geplaatstU heeft geen achternaam ingevuld!
Klik hier om terug te gaan!

Alleen hij plaats de advertentie wel :O

Reageren