No necesita técnicas especiales, herramientas, marcos o cortafuegos para defenderse de Havij. Cualquiera que te diga algo diferente está vendiendo algo.
Havij no puede explotar una página web que ya no es vulnerable a la inyección SQL ordinaria: Havij lo hace más rápido y ayuda a los niños de script a perpetrar intrusiones.
Las defensas contra Havij y herramientas similares son las mismas defensas contra cualquier ataque de inyección SQL:
- ¿Cómo se volvieron tan ricos los usuarios del sitio web Neopets?
- ¿Qué debe hacer una persona si su cuenta de correo electrónico fue pirateada?
- ¿Cuál es el mejor lugar para comer algo en Clemson?
- ¿Cuál es el mejor foro de piratería de todos los tiempos?
- ¿Aprender demasiados lenguajes de programación es contraproducente?
- Filtre contenido no confiable para quitarle cualquier carácter inesperado. Por ejemplo, si espera un número entero, coaccione la entrada a un número entero eliminando cualquier carácter después de los dígitos numéricos iniciales.
- Escape del contenido dinámico antes de interpolarlo en expresiones SQL. Básicamente, esto significa usar una función para asegurarse de que los caracteres de comillas literales en la entrada no sirvan como un terminador de cadena al interpolar.
- Mejor aún, use parámetros de consulta SQL para valores dinámicos. Esto significa que no necesita hacer ningún escape, porque un parámetro siempre se interpreta como un valor constante único. Los parámetros nunca pueden causar inyección SQL. Tenga en cuenta que algunas bibliotecas de bases de datos “simulan” parámetros, pero en realidad están interpolando.
- Incluya en la lista blanca cadenas legítimas y descarte todo lo que no esté en la lista blanca. Esta es una buena manera de protegerse contra la inyección cuando el contenido dinámico no se puede escapar o parametrizar. Por ejemplo, nombres de tablas, nombres de columnas, palabras clave SQL, expresiones SQL.
La mejor manera de implementar estas defensas es mediante la revisión del código en su aplicación, y para cada caso de SQL dinámico, asegúrese de saber dónde se originaron todas las entradas y si se han desinfectado fielmente.
También puede leer mi presentación Mitos y falacias de la inyección SQL.