sql >> Database >  >> RDS >> Mysql

Gebruikersinvoer, opschonen en ontsmetten voor verzending naar db

Houd de tekst eerst logisch en overzichtelijk:

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

De logica achter die aanbevelingen:de gegevens in de database moeten gewoon gegevens zijn. Geen htmlentities, geen br-tags. Maar u moet de escape_string doen om gegevens van PHP naar MySQL door te geven; de ontsnappingen worden niet opgeslagen.

Maar... Dat is slechts de tussenstap. Waar kwamen de gegevens vandaan? Oudere versies van PHP proberen u te "beschermen" door escapes en andere rommel toe te voegen die goed werken voor HTML, maar MySQL verknoeien. Schakel dergelijke magische ontsnappingen uit en verkrijg de onbewerkte gegevens.

Waar gaan de gegevens naar toe? Waarschijnlijk HTML? Na SELECTing de gegevens weer uit de tabel, vervolgens doe eerst htmlentities() en (optioneel) nl2br();

Let op, als u verwacht zaken als <I> . te bewaren (cursief), je vraagt ​​om problemen -- grote problemen. Het enige wat een hacker hoeft te doen is <script> ... om allerlei narigheid in je webpagina en mogelijk je hele systeem te injecteren.



  1. Kun je een index maken in de CREATE TABLE-definitie?

  2. Een niet-ondertekend geheel getal definiëren in SQLAlchemy

  3. PHP beveiligde gebruikersvariabele

  4. Uw Time-Series-database schalen - Hoe TimescaleDB eenvoudig te schalen?