Cross-Site Scripting o XSS es un tipo de vulnerabilidad de seguridad en la que un atacante obtiene acceso a un sitio web y ejecuta un script potencialmente malicioso en el lado del cliente. Este es uno de los ataques de inyección de código que pueden ser causados por la validación incorrecta de los datos del usuario, que generalmente se insertan en la página a través de un formulario web o mediante un hipervínculo que ha sido manipulado. Este código se puede insertar a través de cualquier lenguaje de codificación del lado del cliente, como JavaScript, HTML, PHP, VBScript.
¿Por qué ocurren?
Los ataques Cross-Site Scripting o XSS ocurren principalmente debido a la falta de entrega de códigos seguros por parte de los desarrolladores del lado del servidor. Por lo tanto, es responsabilidad de cada programador proporcionar un código de seguridad que pueda dificultar que los atacantes exploten posibles vulnerabilidades de seguridad.
¿Qué puede lograr un atacante con XSS?
La vulnerabilidad XSS puede ser utilizada por un atacante para lograr un conjunto de posibles objetivos nefastos, como:
- Robar ‘identificador de sesión’: al robar la identificación de sesión, el atacante puede hacerse pasar por nosotros y acceder a la aplicación. Esto puede llevar a que la persona no autorizada acceda a los datos potenciales.
- Redirección de URL: la redirección de URL es el acto de redirigir a un usuario a otra página de phishing maliciosa para recopilar información confidencial.
- Ejecutar software no deseado: un atacante también puede instalar malware en nuestras computadoras y otros dispositivos. Este malware puede dañar los datos que residen en el dispositivo.
Prevención de XSS en HTML y PHP
Los siguientes son los métodos mediante los cuales podemos prevenir XSS en nuestras aplicaciones web:
- Uso de la función htmlspecialchars(): la función htmlspecialchars() convierte los caracteres especiales en entidades HTML. Para la mayoría de las aplicaciones web, podemos usar este método y es uno de los métodos más populares para prevenir XSS. Este proceso también se conoce como escape de HTML.
- ‘&’ (ampersand) se convierte en ‘&’
- ‘”’ (comillas dobles) se convierte en ‘»‘
- ” (mayor que) se convierte en ‘>’
- htmlentities() – htmlentities() también realiza la misma tarea que htmlspecialchars() pero esta función cubre más entidades de caracteres. El uso de esta función también puede conducir a una codificación excesiva y puede hacer que parte del contenido se muestre incorrectamente.
- strip_tags(): esta función elimina el contenido entre las etiquetas HTML. Esta función tampoco filtra ni codifica llaves angulares de cierre no emparejadas.
- addedlashes(): la función addedlashes() agrega un carácter de barra inclinada en un intento de evitar que el atacante finalice la asignación de variables y agregue el código ejecutable al final.
- Política de seguridad de contenido (CSP): CSP es la última opción que elegimos para defendernos contra el ataque XSS. El uso de CSP impone restricciones a las acciones del atacante. Nuestro navegador ejecuta todo el JavsScript que recibe del servidor, ya sea de origen interno o externo. Cuando se trata de un documento HTML, el navegador no puede determinar si el recurso es malicioso o no. CSP es un encabezado HTTP que incluye en la lista blanca un conjunto de fuentes de recursos confiables que un navegador puede usar para determinar la confianza en el recurso entrante.
X-Content-Security-Policy: script-src 'self'
La línea anterior implica que el navegador solo confíe en la URL de origen que se refiere al dominio actual. Todas las entradas de recursos serán tomadas por el navegador de esta fuente solamente y todas las demás serán ignoradas.
Hay muchas directivas de recursos que podemos agregar. Algunos de ellos se dan a continuación:- connect-src: limita las fuentes a las que puede conectarse mediante XMLHttpRequest, WebSocket, etc.
- font-src: limita las fuentes de las fuentes web. frame-src: limita las URL de origen que se pueden incrustar en una página como marcos.
- img-src: limita las fuentes de las imágenes. media-src: limita las fuentes de video y audio.
- object-src: limita las fuentes de Flash y otros complementos. script-src: limita las fuentes de los archivos de script.
- style-src: limita las fuentes de los archivos CSS.
- Bibliotecas de PHP de terceros: también hay algunas bibliotecas de PHP de terceros que ayudan en la prevención de XSS. Algunos de estos se enumeran a continuación:
- htmLey
- PHP Anti-XSS
- Purificador HTML
Entre todos estos, HTMLPurifier se mantiene y actualiza con frecuencia. Es bastante simple de usar, una vez que el desarrollador ha alcanzado un nivel básico de conocimiento de secuencias de comandos HTML.
Conclusión: como principio rector, debemos tratar de no insertar datos controlados por el usuario a menos que sea explícitamente necesario para que la aplicación funcione. Los comentarios pueden ser su mejor ejemplo donde un usuario puede ingresar scripts maliciosos que causan XSS. Esto puede verse más a menudo como algo que no tiene un propósito funcional para la aplicación, pero que también introduce algunas vulnerabilidades de seguridad graves.
Publicación traducida automáticamente
Artículo escrito por chinmay_bhide y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA