Filtrar inyecciones SQL y XSS con Mod_Rewrite en Apache

Revisando un servidor me encontré con la siguientes reglas para el módulo ModRewrite de apache, que nos ayudan a filtrar las URLs potencialmente maliciosas. Este codigo nos va a ayudar a proteger el servidor de las aplicaciones que tengan fallas de seguridad.

RewriteEngine On         
########## Begin - Rewrite rules to block out some common exploits
        #
        # Block out any script trying to set a mosConfig value through the URL
        RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]
        # Block out any script trying to base64_encode crap to send via URL
        RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
        # Block out any script that includes a <script> tag in URL
        RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
        # Block out any script trying to set a PHP GLOBALS variable via URL
        RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
        # Block out any script trying to modify a _REQUEST variable via URL
        RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
        # Send all blocked request to homepage with 403 Forbidden error!
        RewriteRule ^(.*)$ index.php [F,L]
######### End - Rewrite rules to block out some common exploits

Nos protegerá de ataques XSS y SQL Injection. Este script podría afectar el funcionamiento de algunas aplicaciones.

4 comentarios

  1. Genial
    creo que habia visto un par de esas reglas anteriormente, igual las guardare por si las moscas 😀

    saludos

  2. Y se que sabes que se puede bypasser pero estaba aburrido y lo hice igual:

    # Block out any script trying to set a mosConfig value through the URL
    RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|\%3D) [OR]

    # Block out any script trying to base64_encode crap to send via URL
    RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]
    #Bypass: $a=’base6′.’4_encode’; echo $$a(1234);

    # Block out any script that includes a tag in URL
    RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
    #Bypass:

    # Block out any script trying to set a PHP GLOBALS variable via URL
    RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
    #Bypass: $GLOBALS=((3))

    # Block out any script trying to modify a _REQUEST variable via URL
    RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
    #Bypass: $_REQUEST =2

    no se que hace mosconfig y ni ganas de fijarme pero de ultima se usa eval

  3. seth: Ben tip! Bueno, al menos es un filtro mas, se puede bypasear pero por te da mas trabajo y no cualquiera lo haria 😉

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.