2011-06-09 11 views
6

¿Cómo es posible implementar un slowban que no será una herramienta para DoS en nuestro sitio?Slowban amigable para el servidor. ¿Posible?

El problema es que un retraso deliberado en el servicio de una respuesta http mantendrá ocupados los recursos del servidor (hilos del servidor web y posiblemente otros subsistemas).

Respuesta

4

Si su aplicación web es compleja y ocupa recursos considerables, podría ser el lugar incorrecto para implementar una slowban debido a la problemática de un slowloris-attack.

En su lugar, puede introducir la cámara lenta procesando su aplicación a través de un proxy liviano o servidor web como lighttpd o nginx que sirve desde caché y contenido estático y utilizando su firewall. Desde allí, puede shape the bandwidth en su firewall, manteniendo los recursos necesarios relativamente bajos, ya que la conexión de un troll es servida principalmente por el proxy ligero en lugar de su servidor de aplicaciones pesadas.

Si bien esto tiene algunos peligros a considerar en sí mismo (es decir, para habilitar una aplicación posiblemente insegura para insertar reglas basadas en ip en su firewall), iptables y kernel son relativamente fáciles de usar.

Lo único que debe tener en cuenta es la cantidad de conexiones abiertas que su sistema puede tolerar y cuándo comenzar a eliminar las conexiones abiertas más largas para dejar espacio a las nuevas. Definitivamente prepare su sitio para fighting against low bandwidth -ataques.

+2

Qué gran respuesta. ¡Gracias! – cherouvim

2

Puede incorporar la cámara lenta con la supervisión de recursos para que, si se vuelve aparente, el usuario de banda lenta intente hacer una denegación de servicio, en su lugar se permanen.

-2

¿Cuán astutos son tus trolls? Podría introducir un retraso en javascript en cualquier elemento que se haya publicado en el servidor.

-2

se puede implementar el lado del cliente en lugar de slowban del lado del servidor, por ejemplo:

CSS:

body { 
    visibility: hidden; 
} 

JavaScript:

$(document).ready(function() { 
    window.setTimeout(function() { 
     $("body").css("visibility", "visible"); 
    }, /*How long you want the delay to be*/); 
}); 
Cuestiones relacionadas