Digamos que tengo un formulario de búsqueda para un blog (o cualquier otro sistema que usaría SQL para ejecutar consultas) y quiero protegerlo de la denegación de servicio. Un atacante quiere atacar mi sitio inundando la función de búsqueda, lo que causaría muchas consultas SQL y podría resultar en DoS.
Esto es teórico, así que no se trata de un solo tipo de lenguaje o sistema de administración de base de datos, pero si lo desea, puede imaginar que es PHP y MySQL (aunque me pregunto por los efectos en general más que por una plataforma específica) .
Una solicitud como GET /search.php?s=[SEARCH]
busca en la base de datos todos los artículos que contienen [SEARCH]
y los devuelve. Digamos que la longitud máxima de caracteres para [SEARCH]
es 128.
Me pregunto en términos de "pérdida de rendimiento", que sería la peor forma de ataque entre estos dos escenarios:
- El atacante busca una cadena aleatoria de 128 caracteres (por ejemplo,
aisoizeuf[...]deuedujed
). - El atacante busca un solo carácter cada vez (por ejemplo,
e
).
Al principio pensé que el ataque # 1 sería más efectivo, legitimando así un límite estricto en la longitud del carácter de la consulta de búsqueda. Pero luego pensé, ya que en mi ejemplo estamos hablando de un blog, que las búsquedas múltiples en un solo personaje pueden devolver muchos más artículos porque casi todo lo que escriba contendrá al menos una vocal. Entonces me di cuenta de que tal vez no es una respuesta tan clara.
El ataque # 1 requerirá más recursos para enviar la consulta y escanear todas las entradas en la base de datos, pero no devolverá nada, mientras que el ataque # 2 hará lo contrario: no ocupará muchos recursos para escanear la base de datos, pero dado que casi todas las entradas contendrán una aparición de la consulta de búsqueda, devolverá casi todas las entradas en la base de datos
¿Qué ataque crees que será más peligroso y usará más recursos?