sql >> Database teknologi >  >> RDS >> Mysql

Brugerinput, rengør og desinficer inden afsendelse til db

Hold først teksten logisk og ren:

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

Logikken bag disse anbefalinger:Dataene i databasen skal blot være almindelige data. Ikke htmlentities, ikke br-tags. Men du skal gøre escape_string for at overføre data fra PHP til MySQL; escapes vil ikke blive gemt.

Men... Det er kun det midterste skridt. Hvor kom dataene fra? Ældre versioner af PHP forsøger at "beskytte" dig ved at tilføje escapes og andet skrammel, der fungerer OK til HTML, men skruer op for MySQL. Slå sådan magisk escape fra, og få de rå data.

Hvor går data hen? Sandsynligvis HTML? Efter SELECTing dataene ud af tabellen, Gør først htmlentities() og (valgfrit) nl2br();

Bemærk, hvis du forventer at bevare ting som <I> (til kursiv), du beder om problemer -- store problemer. Alt hvad en hacker skal gøre er <script> ... at injicere al slags grimhed i din webside og muligvis hele dit system.



  1. Sammenføj to tabeller og filtrer dem med where-sætning

  2. Begrundelse for I STEDET FOR triggere – del 1

  3. Hierarkiske data i MySql

  4. Sådan får du optegnelser fra sidste 24 timer i MySQL