komma niet escapen, wel beveiliging
Misschien dat het een beetje vreemde topicnaam is, maar het is niet makkelijk in een kleine zin uit te leggen ;-).
Ik heb een stukje waarin ik een bericht post, hij word zo ver mogelijk beveiligd.
Nu heb ik deze code:
Code (php)
1
2
3
2
3
<?php
$ReactieBericht = mysql_real_escape_string(nl2br(htmlspecialchars(eregi_replace('[^ ]{255,}', '...', trim($_POST['Bericht'])))));
?>
$ReactieBericht = mysql_real_escape_string(nl2br(htmlspecialchars(eregi_replace('[^ ]{255,}', '...', trim($_POST['Bericht'])))));
?>
Maar hoe kan ik er voor zorgen dat het wél veilig blijft maar dat ik ook een hoge komma voor bijvoorbeeld een woord "foto's" kan invoeren zonder dat deze ge-escaped word met een slash?
Groet
evt met str_replace......
Ik heb het idee dat als je dat doet dat je hem dus eerst veilig maakt en dan met jou ideetje hem weer onveilig maakt?
waarom zou je willen dat deze niet ge'escaped word? dan word het namelijk een beetje onveilig als je ' niet laat escapen..
Quote:
He leuke site,
waar heb je die foto's vandaan?
Groet
waar heb je die foto's vandaan?
Groet
dan krijg ik als output:
Quote:
He leuke site,
Dan krijg ik dus foto\'s
Groet
Dan krijg ik dus foto\'s
Groet
Gewijzigd op 01/01/1970 01:00:00 door Luke Banning
Quote:
Waar ben je in vredesnaam mee bezig? Met zo veel functies in 1 regel, zie je door de bomen het bos niet meer en gaat het gegarandeerd fout.Code (php)
1
2
3
2
3
<?php
$ReactieBericht = mysql_real_escape_string(nl2br(htmlspecialchars(eregi_replace('[^ ]{255,}', '...', trim($_POST['Bericht'])))));
?>
$ReactieBericht = mysql_real_escape_string(nl2br(htmlspecialchars(eregi_replace('[^ ]{255,}', '...', trim($_POST['Bericht'])))));
?>
Ik snap bv. al niet wat nl2br en htmlspecialchars in deze regel code doen. Deze functies gebruik je wanneer je output in html-formaat naar het scherm toestuurt. Dat zal dus nooit en te nimmer i.c.m. mysql_real_escape_string voorkomen, die gebruik je om data naar de database te sturen. Een grote tegenstrijdigheid dus.
Luke Banning schreef op 28.12.2006 17:02:
Ja, en? Dat is toch ook de bedoeling? Of wil je dat jouw query in het honderd loopt?Zoals ik al zei Terence, maar als ik een bericht post bijvoorbeeld:
dan krijg ik als output:
Quote:
He leuke site,
waar heb je die foto's vandaan?
Groet
waar heb je die foto's vandaan?
Groet
dan krijg ik als output:
Quote:
He leuke site,
Dan krijg ik dus foto\'s
Groet
Dan krijg ik dus foto\'s
Groet
Ik heb van Jan Koehoorn de volgende functie eens gekregen om data op de juiste manier in een MySQL-database weg te schrijven:
Maar als jij ergens een bericht plaatst wil jij dan \'s?
Doet die functie dan wel goed de output met die 's?
En hoe die gegevens er uitzien, dat kun je zelf snel even testen.
Ps. Rommel die nu in jouw database staat, zal natuurlijk altijd rommel blijven... Tenzij je de boel gaat opschonen.
Als je iets in de database zet, doe je dat zoals de gebruiker het in geeft, dus geen nl2br en al helemaal geen htmlspecialchars, alleen mysql_real_escape_string om te zorgen dat je database niet in de soep loopt.
Als je de data er uit haalt kijk je wat je er mee wil, heb je lastige slashes -> strip_slashes()
Wil je geen html -> htmlentities () (gebruiik deze en niet htmlspecialchars!!)
etc
etc
Edit:
Op die manier kan je nog alle kanten op met je data zonder dat je dubbele bewerkingen hebt. Dat zou namelijk zonde zijn
Gewijzigd op 01/01/1970 01:00:00 door Bo az
Daarna, bij de query om het uit de database te halen, en je gaat het op het scherm zetten, gebruik je stripslashes()
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
//voorbeeldje
$sql = "INSERT INTO tabel (veld) VALUES('".myqsl_real_escape_string($_POST['waarde'])."')"; // Insert gegevens
$res = mysql_query($sql) or die(mysql_error()); // Tsja, uitvoeren.. (alleen debug, anders mysql_error() weghalen)
$sql = "SELECT veld FROM tabel WHERE henk = 'annie'"; // Lees gegenves
$res = mysql_query($sql) or die(mysql_error()) // Alleen debuggen, anders mysql_error() weghalen.
while($fetch = mysql_fetch_array($res)) { // Aangenomen dat er meerdere results zijn (anders kon de while() weg)
echo "Het veld genaamd ' veld ' heeft dit als waarde:".stripslashes($fetch['veld'])."<br />"; // Gegevens outputten
}
?>
//voorbeeldje
$sql = "INSERT INTO tabel (veld) VALUES('".myqsl_real_escape_string($_POST['waarde'])."')"; // Insert gegevens
$res = mysql_query($sql) or die(mysql_error()); // Tsja, uitvoeren.. (alleen debug, anders mysql_error() weghalen)
$sql = "SELECT veld FROM tabel WHERE henk = 'annie'"; // Lees gegenves
$res = mysql_query($sql) or die(mysql_error()) // Alleen debuggen, anders mysql_error() weghalen.
while($fetch = mysql_fetch_array($res)) { // Aangenomen dat er meerdere results zijn (anders kon de while() weg)
echo "Het veld genaamd ' veld ' heeft dit als waarde:".stripslashes($fetch['veld'])."<br />"; // Gegevens outputten
}
?>
Typo's onder voorbehoud...
Gewijzigd op 01/01/1970 01:00:00 door niek s
Ik ga aan het werk ;-)
Maar wat ik me dan nog afvraag is als je hem een stripslashes geef of ie dan nog steeds veilig is?
Maar alvast bedankt voor de kritiek, daar kunnen we wat mee ;-)
1) Als get_magic_quotes_gpc () TRUE is, strip dan de slashes.
2) Ga mysql_escape_string of mysql_real_escape_string toepassen.
Kortom, er wordt altijd geescaped en wel zo dat je later geen last hebt van slashes in de output. mysql_escape_string of mysql_real_escape_string wordt namelijk gebruikt en niet een onbetrouwbare functie van PHP (magic_quotes).
Luke Banning schreef op 28.12.2006 17:26:
Ok allemaal :)
Ik ga aan het werk ;-)
Maar wat ik me dan nog afvraag is als je hem een stripslashes geef of ie dan nog steeds veilig is?
Maar alvast bedankt voor de kritiek, daar kunnen we wat mee ;-)
Ik ga aan het werk ;-)
Maar wat ik me dan nog afvraag is als je hem een stripslashes geef of ie dan nog steeds veilig is?
Maar alvast bedankt voor de kritiek, daar kunnen we wat mee ;-)
Tuurlijk is het veilig! Want dan ga je op dat moment niks in de database zetten, en kan er dus ook niks mis gaan.
Misschien dat mijn voorbeeldje hier boven wat duidelijkheid verschaft?
Ja het is duidelijk, bedankt :)
Na een flink aantal keren extra doorlezen snap ik hem :)