Cómo prevenir ataques de secuencias de comandos entre sitios
Causas de las vulnerabilidades XSS:
La principal causa de los ataques de secuencias de comandos entre sitios es la confianza de los programadores en los usuarios. Los desarrolladores suponen fácilmente que los usuarios nunca intentarán realizar nada fuera de lo común, por lo que crean la aplicación sin utilizar ningún código adicional para filtrar la entrada del usuario y bloquear cualquier actividad maliciosa. Otra razón es que existen muchas variaciones de este ataque, lo que dificulta la creación de un filtro XSS eficaz.
Pero este es sólo un término relativo. "Codificar" y "filtrar" la entrada del usuario son importantes en todo momento, y debemos tomar algunas medidas específicas para defendernos de ello.
Cómo crear un buen filtro XSS para bloquear la mayoría de los códigos de ataque XSS
1.URLSin codificar
Datos de cookies
Datos de encabezado p>
Datos de la base de datos
Existe un principio para defenderse contra XSS:
Céntrese en la aplicación actual y trate todos los datos que ingresan a la aplicación como datos de entrada. se considera entrada (incluidos los datos de los formularios FORM o los datos de la base de datos), y todos los datos generados por la aplicación actual se consideran salida (incluidos los datos enviados al navegador del usuario o los datos escritos en la base de datos))
Filtre los datos de entrada y codifique los datos de salida. "codificación". La "codificación" aquí también debe tenerse en cuenta que los datos deben ajustarse de acuerdo con las circunstancias específicas de la codificación. Por ejemplo, si los datos se envían a HTML, se debe realizar HtmlEncode. Si los datos se envían a código javascript para empalmar, se debe realizar javascriptEncode.
Si no se aclara el contexto de una salida específica de los datos, es posible que la "codificación" de los datos parezca estricta debido a los motores de análisis de HtmlParser() y javascriptParser() .
2. Codificación HTML HtmlEncode
Su función es convertir caracteres en HTMLEntities, lo cual corresponde al estándar ISO-8859-1
Para poder combatir XSS. , Es necesario convertir al menos los siguientes caracteres en HtmlEncode:
amp; --gt; amp;
Estos caracteres se pueden convertir a codificación HTML. amplificador;
lt; --gt; lt;
gt; --gt;
" --gt; "
' --gt; '
/ --gt; /
En PHP:
htmlentities
/php/ func_string_htmlentities .asp
htmlspecialchars
/php/func_string_htmlspecialchars.asp
3. javascriptEncode javascriptEncode"
Los métodos de codificación de javascriptEncode y HtmlEncode son diferente, HtmlEncode es para codificar, mientras que javascriptEncode es más como escapar, lo que requiere el uso de "\" para escapar de caracteres especiales. En principio, esto está en línea con uno de los principios fundamentales de la función de codificación: separar datos del código. porque para las etiquetas HTML, las codificamos "visualmente (convertimos a caracteres visibles)" para separar los datos de los límites HTML.
Para JavaScript, además de la codificación, también necesitamos escapar de los caracteres especiales, de modo que la entrada de ataque de caracteres especiales "cerrados" no funcione, evitando así ataques XSS. Además, al luchar contra XSS, también se requiere la salida Variables. debe estar entre comillas para evitar problemas de seguridad. Además, cuando se lucha contra XSS, también se requiere que las variables de salida estén entre comillas para evitar causar problemas de seguridad.
escape()
/js/jsref_escape.asp
Este método no codifica letras y números ASCII, ni codifica los siguientes signos de puntuación ASCII: * @ - _ ./ . Todos los demás caracteres se reemplazan por secuencias de escape (hex\xHH).
El uso de esta función de codificación no solo puede resistir ataques XSS, sino también ciertas inyecciones de comandos.
Algunas bibliotecas de código abierto para proteger contra ataques XSS:
PHP AntiXSS
Esta es una buena biblioteca PHP que ayuda a los desarrolladores a agregar una capa de protección para evitar ataques cruzados. Vulnerabilidades de secuencias de comandos del sitio.
/p/php-antixss/
filtro xss_clean.php
/mbijon/1098477
Purificador HTML
/p/xssprotect/
Filtro HTML XSS
/how-to-prevent-cross-site-scripting-attacks/
Espero que esto sea útil para ti~Gracias~