Nejprve udržujte text logický a čistý:
trim() -- OK
htmlentities($comment, ENT_NOQUOTES) -- No; do later
mysqli_real_escape_string() -- Yes; required by API
nl2br() -- No; see below
Logika těchto doporučení:Data v databázi by měla být jen obyčejná data. Ne htmlentity, ne br-tagy. Ale musíte provést escape_string, abyste mohli předat data z PHP do MySQL; úniky nebudou uloženy.
Ale... To je jen střední krok. Odkud data pocházejí? Starší verze PHP se vás snaží "chránit" tím, že přidávají únikové cesty a další nevyžádané položky, které fungují v pořádku pro HTML, ale ničí MySQL. Vypněte takový únik magie a získejte nezpracovaná data.
Kam jdou data? Pravděpodobně HTML? Po SELECTing
data zpět z tabulky, pak nejprve proveďte htmlentities()
a (volitelně) nl2br()
;
Všimněte si, že pokud očekáváte zachování věcí jako <I>
(pro kurzívu), koledujete si o potíže -- velké potíže. Vše, co hacker musí udělat, je <script> ...
abyste do své webové stránky a možná i do celého systému vnesli nejrůznější ohavnosti.