sql >> Base de Datos >  >> RDS >> Mysql

Entradas de usuario, limpiar y desinfectar antes de enviar a db

Primero, mantenga el texto lógico y limpio:

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

La lógica detrás de esas recomendaciones:los datos en la base de datos deben ser simplemente datos simples. No htmlentities, no br-tags. Pero, debe hacer escape_string para pasar datos de PHP a MySQL; los escapes no serán almacenados.

Pero... Ese es sólo el paso intermedio. ¿De dónde provinieron los datos? Las versiones anteriores de PHP intentan "protegerlo" agregando escapes y otra basura que funciona bien para HTML, pero estropea MySQL. Apague ese escape mágico y obtenga los datos sin procesar.

¿A dónde van los datos? ¿Probablemente HTML? Después de SELECTing los datos vuelven a salir de la tabla, entonces primero haz htmlentities() y (opcionalmente) nl2br();

Tenga en cuenta que si espera conservar cosas como <I> (para cursiva), está buscando problemas, grandes problemas. Todo lo que un hacker necesita hacer es <script> ... para inyectar todo tipo de maldad en su página web y posiblemente en todo su sistema.