Apache httpd で基本的なセキュリティ設定 (2022年10月 更新)
# サーバー情報の秘匿と TRACEメソッドの無効化
ServerTokens Prod
ServerSignature Off
TraceEnable Off
# RequestReadTimeout header=10 body=30
SetEnv proxy-nokeepalive 1
FileETag None
# 無駄な言語情報の秘匿
Header unset "X-Powered-By"
# httpoxy 対策
RequestHeader unset Proxy
# Drop the Range header when more than 5 ranges.
# CVE-2011-3192
SetEnvIf Range (?:,.*?){5,5} bad-range=1
RequestHeader unset Range env=bad-range
# We always drop Request-Range; as this is a legacy
# dating back to MSIE3 and Netscape 2 and 3.
#
RequestHeader unset Request-Range
# optional logging.
CustomLog logs/range-CVE-2011-3192.log common env=bad-range
# クリックジャッキング対策
Header append X-Frame-Options SAMEORIGIN
# XSS対策
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
# DoS 攻撃対策
LimitRequestBody 10485760
LimitRequestFields 20
# slowloris 対策
# RequestReadTimeout header=20-40,MinRate=500 body=20,MinRate=500
.htaccess で対策する場合には、以下のような設定を検討する。
# .htaccessファイルへのアクセスを制限
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
# ディレクトリリストの無効化
Options -Indexes
<IfModule mod_headers.c>
# XSS攻撃の防止
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'"
# 他サイトからの iframe の禁止
Header always append X-Frame-Options SAMEORIGIN
</IfModule>
# SQLインジェクション対策
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (\%27)|(\')|(\-\-)|(\%23)|(#) [NC]
RewriteRule ^(.*)$ - [F,L]
RewriteCond %{QUERY_STRING} (\%24)|($)|(\*.*)|(\+)|(\.)|(\[)|(\]) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} (;|%22|%3D|%27).*(select|insert|union|declare|drop|update) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>
# HTTPメソッドの制限
<LimitExcept GET POST>
Require all denied
</LimitExcept>
# 特定のIPアドレスのブロック
#<RequireAll>
# Require all granted
# Require not ip 192.168.0.1
#</RequireAll>
# 無効なユーザーエージェントのブロック
#<IfModule mod_rewrite.c>
# RewriteEngine On
# RewriteCond %{HTTP_USER_AGENT} ^BadBot [NC,OR]
# RewriteCond %{HTTP_USER_AGENT} ^AnotherBadBot
# RewriteRule ^.* - [F,L]
#</IfModule>