Limitar el conjunto de caracteres de esta manera (también llamada lista blanca) es uno de los métodos recomendados para validación de entrada . El propósito de la validación de entrada es evitar que un programa se ejecute en datos que pueden causar problemas no deseados.
Hay muchos ataques exitosos que han resultado de URL mal formadas (no son URL de ataques reales, sino representativas de ataques):
- inyección de ruta de archivo:
http://example.com/?C:\documents\top_secrets.txt
- desbordamiento de búfer:
http://example.com/aaaaaaaaaaaaaaaaaaaaaaaaa...aaaEvilShellCode
- inyección de script:
http://example.com/?<script>alert("Click me!")</script>
- inyección SQL:
http://example.com/?USER=' or 1=1; select * from users
Las reacciones iniciales a estos ataques fueron prohibir el carácter de barra diagonal inversa, las comillas, los asteriscos y los símbolos menor que y mayor. Esto se llama lista negra; desafortunadamente, las listas negras son principalmente un enfoque de "parche después de aprender sobre el ataque". La lista blanca es algo más efectiva que la lista negra. Sin embargo, limitar los caracteres que aparecen en una URL puede no hacer prácticamente nada para evitar muchos de estos ataques si se pueden omitir todos usando el porcentaje codificación , que permite al atacante usar solo caracteres de la lista blanca aprobada:% 2F es lo mismo que un /, etc.
Para que sea efectivo, la expresión regular en CodeIgniter debe realizarse después de que se haya descodificado el porcentaje de codificación. Y para evitar problemas de desbordamiento del búfer mientras se prueban los datos con regexp, el primer paso del validador debe ser la verificación de la longitud.
Hay otro problema que podrían estar intentando evitar con su lista blanca, y es secuestro de URL usando Caracteres Unicode para simular caracteres ASCII . Para un humano que simplemente hace clic en un enlace, las cadenas "exampleZurichBank.com" y "exampleZuricⱨBank.com parecen similares. Bloquear los caracteres Unicode que no están en el rango [AZ] [az] ayuda a prevenirlos; también anula un gran segmento del planeta mediante el bloqueo de URL en sus alfabetos nativos.
Tenga en cuenta que la validación de entrada es solo una de las medidas preventivas de muchas que aún deben implementarse. Las aplicaciones aún deben defenderse contra otras vulnerabilidades comunes, como XSS, CSRF, inyección de SQL, secuestro de sesión, etc.