sql >> Databasteknik >  >> RDS >> Mysql

Användarinmatningar, rengör och sanera innan du skickar till db

Håll först texten logisk och ren:

trim() -- OK
htmlentities($comment, ENT_NOQUOTES)  -- No; do later
mysqli_real_escape_string()  -- Yes; required by API
nl2br()  -- No; see below

Logiken bakom dessa rekommendationer:Datan i databasen bör bara vara vanlig data. Inte html-entities, inte br-taggar. Men du måste göra escape_string för att skicka data från PHP till MySQL; utrymningarna kommer inte att lagras.

Men... Det är bara mittsteget. Var kom uppgifterna ifrån? Äldre versioner av PHP försöker "skydda" att du lägger till escapes och annat skräp som fungerar OK för HTML, men som förstör MySQL. Stäng av sådan magisk flykt och hämta rådata.

Vart går uppgifterna till? Förmodligen HTML? Efter SELECTing data backar ut ur tabellen, gör först htmlentities() och (valfritt) nl2br();

Observera, om du förväntar dig att bevara saker som <I> (för kursiv stil), du ber om problem -- stora problem. Allt en hackare behöver göra är <script> ... att injicera alla typer av elakheter i din webbsida och möjligen hela ditt system.



  1. Bästa sättet att hantera att lagra/visa datum i olika tidszoner i PHP?

  2. Kommaseparerade värden med SQL Query

  3. Föråldrade funktioner att ta ur din verktygslåda – Del 3

  4. Arbeta med JavaFX Chart APIs