Ik heb een aanmeldscript dat checkt of de magic_quotes aanstaat, als dat niet zo is, dan addslashes, anders niet. Maar als ik nu toch een " of ' invul dan zet ie in de DB niet \"\' maar gewoon " '. Zonder " of ' werkt ie wel.
Het escapen van (dubbele) quotes is juist bedoeld voor het correct inserten van gegevens volgens mij. Als je gegevens uitleest uit je database kun je hier altijd nog addslashes(), of, misschien beter, htmlentities(), over heen halen.
Je zou je natuurlijk ook kunnen afvragen of je zulk soort karakters in de eerste plaats wilt toestaan... Als je dit soort karakters gewoon verbiedt, heb je de bovenstaande problemen ook niet eh ?
Als ik in m'n $str_wachtwoordh een " zet, dan geeft ie meteen weer dat m'n huidige wachtwoord niet met m'n ingevulde klopt (en ik voer deze controle voor de controle die de wachtwoorden vergelijkt)
<?php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
Nu werkt het, alleen is er een klein probleem. Bij het aanmelden, dan wordt er een mail gestuurd met je gebruikersnaam en wachtwoord. Ik haal de gebruikersnaam uit de DB en het wachtwoord uit het formulier (omdat het anders MD5 is). Alleen nu krijg ik in m'n wachtwoord ipv " ' "'
Even over XSS en MySQL injection, ik las een artikel waar men zegt, addslashes gebruiken, maar nu hoef ik nergens addslashes te gebruiken als ik htmlentities. Die doet men ' en " toch naar andere tekens? Ben ik hierdoor genoeg beveiligd?
" kun je gerust in je database zetten.
Het is namelijk een HTML code voor ".
Dus je leid hier geen gevaar mee (dacht ik zo).
Je kunt het natuurlijk altijd zelf uittesten op je tabel, beter dat jij het uittest als dat iemand anders het gebruikt en het blijkt niet zo veilig te zijn als we denken...
Ok, ik ben blij dat ik nu van die slashes (en ook addslashes en stripslashes) af ben, dat is soms zo verwarrend, en dan die instelling van magic_quotes_gpc. Die is veel handiger. Ze zouden addslashes en stripslashes moeten afschaffen .