sql >> Databáze >  >> RDS >> Mysql

Uživatelské vstupy, vyčistěte a dezinfikujte před odesláním do db

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.



  1. Více GROUP_CONCAT na různých polích pomocí MySQL

  2. Importujte soubor CSV do SQL Serveru

  3. Jak zkontrolovat, zda se v mysql překrývají dvě časová období?

  4. Nechejte (znovu) automatické zvyšování ID MySQL od 1