Lo que tu ejemplo básicamente hace es devolverle lo que le des. Eso significa que un atacante podría crear un enlace con algo de contenido en la URL, y quien haga clic en el enlace recibirá el contenido que el atacante eligió.
Entonces, ¿cómo puede usarse eso, aparte de para avergonzarte ligeramente? Eso depende del tipo de contenido. Como no se especifica nada más, asumo que es text/html
. Si un atacante puede servir HTML, también puede servir scripts que se ejecutarán en el navegador como si fueran de su origen. Esto a su vez significa que la secuencia de comandos podría, por ejemplo, robar cookies de autenticación, contraseñas de registro o realizar acciones en nombre de la víctima. Lo que tienes aquí es un excelente ejemplo de XSS reflejado , y eso es muy , muy mal.
¿Pero el atacante podría ejecutar el código en el backend, es decir, el servidor? No, no directamente. La respuesta se envía al cliente, después de todo. Pero esto podría usarse como un trampolín para una escalada de privilegios que podría llevar fácilmente a eliminar la ejecución del código si existe algún tipo de debilidad en cualquier aplicación web que esté utilizando, por ejemplo. Permite a los administradores modificar el código PHP.
Entonces, ¿cómo sanear? Esa es una pregunta muy amplia para responder en su totalidad aquí, pero permítame decir al menos esto: htmlentities()
lo protegerá en algunos casos, pero no todos . Para comprender cuándo es útil y por qué, lea su documentación y OWASP hoja de trucos de prevención de XSS .
Como se señaló en la respuesta de Tom , hacer otras cosas con los datos no saneados dará lugar a otros problemas, por ejemplo. Inyección SQL si lo usa en consultas SQL.