• # Beispielkonfiguration für mod_security
    # Erstellt von Christopher Kunz
    # Erhebt keinerlei Anspruch auf irgendeine Vollständigkeit
    # Nicht auf Produktionsseiten einsetzen!
    # Erstellt im November 2004 für die PHP Conference
    # Vielen Dank an Sebastian "GPF" Wiesinger


    # Filter anschalten - kann per VHost (de-)aktiviert werden
    SecFilterEngine On
    SecFilterCheckURLEncoding On
    SecAuditEngine RelevantOnly
    SecAuditLog /usr/local/apache/logs/security-audit.log
    SecFilterScanPOST On

    # ServerSignature fälschen - erfordert ServerTokens Full
    SecServerSignature "PHPConf/WebServ 1.2.3.4"

    # Default-Aktion für SecFilter(-Selective)
    SecFilterDefaultAction "log,status:401"

    # anti-XSS in Request und Client
    SecFilterSelective THE_REQUEST ""
    SecFilterSelective "HTTP_USER_AGENT" "<.+>"

    # Umgehung von nmap's Webserver-Identifizierungsversuchen
    SecFilterSelective THE_REQUEST "^(HELP|default|\||TNMP|DmdT|\:)$" "pass,log"

    # Typo3 benötigt "../../" in URIs für eine bestimmte URI
    SecFilterSelective QUERY_STRING "\.\./" chain
    SecFilterSelective SCRIPT_FILENAME !"alt_file_navframe.php" "deny,log"

    # Gallery benötigt "http://" in URI für return-URLs nach Ausfüllen eines
    # Formular-Popups
    SecFilterSelective QUERY_STRING "http://" chain
    SecFilterSelective SCRIPT_FILENAME !do_command.php deny,log,status:403

    # Einige generische Regeln, die auf das gesamte Request Scope angewendet werden
    # SecFilter ist teurer als SecFilterSelective, sollte also sparsam verwendet
    # werden
    SecFilter "\.(bash|mysql)_history"
    SecFilter "/etc/(passwd|shadow)"

    # Aufruf bestimmter Binaries wird verboten
    SecFilterSelective "QUERY_STRING" "bin/(kill|ls|passwd|perl|chmod|wget|lynx|links|net(stat|cat)|who|whoami|id|cd|ld)" "log,redirect:/denied-binaries.html"

    # Shells sollten auch nicht über den Query-String ausgeführt werden
    SecFilterSelective "QUERY_STRING" "bin/(ba|a|z|c|k)?sh" "log,redirect:/denied-bash.html"