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

Prevención de secuencias de comandos del lado del servidor, XSS

Nunca envíe ningún bit de datos al flujo HTML que no se haya pasado a través de htmlspecialchars() y tu estas listo. Regla simple, fácil de seguir, erradica por completo cualquier riesgo de XSS.

Como programador es tu trabajo para hacerlo, sin embargo.

Puedes definir

function h(s) { return htmlspecialchars(s); }

si htmlspecialchars() es demasiado largo para escribir 100 veces por archivo PHP. Por otro lado, usando htmlentities() no es necesario en absoluto.

El punto clave es:hay código y hay datos. Si mezclas los dos, suceden cosas malas.

En el caso de HTML, el código son elementos, nombres de atributos, entidades, comentarios. Los datos son todo lo demás. Datos obligatorios escaparse para evitar que se confunda con el código.

En el caso de las URL, el código es el esquema, el nombre de host, la ruta, el mecanismo de la cadena de consulta (? , & , = , # ). Los datos son todo en la cadena de consulta:nombres y valores de parámetros. Ellos deben escaparse para evitar que se confunda con el código.

Las URL incrustadas en HTML deben ser doblemente escapado (mediante escape de URL y HTML-escape) para garantizar la separación adecuada de código y datos.

Los navegadores modernos son capaces de analizar marcas sorprendentemente rotas e incorrectas en algo útil. Sin embargo, esta capacidad no debe enfatizarse. El hecho de que algo funcione (como URL en <a href> sin aplicar el escape de HTML adecuado) no significa que sea bueno o correcto hacerlo. XSS es un problema que se origina en a) las personas que desconocen la separación de datos/código (es decir, "escapar") o aquellos que son descuidados yb) las personas que intentan ser inteligentes acerca de qué parte de los datos no necesitan escapar.

XSS es bastante fácil de evitar si se asegura de no caer en las categorías a) yb).