14
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ApacheでPHPを使用する場合の.htaccess

Last updated at Posted at 2017-02-05

自分が実際の案件で使う際の雛形用にメモ。あくまでも雛形なので、必要に応じて追加変更削除は必要になると思います。
.htaccessではなく、httpd.confなどで設定するのも勿論有効です。
他にも含めておくといい設定はありそうなので、随時更新することになるかも。

#.htaccessの設定内容

Options -Indexes
DirectoryIndex index.php

Header set X-XSS-Protection "1; mode=block"
Header set X-Frame-Options DENY
Header set X-Content-Type-Options nosniff

<Files ~ "\.(log|ini)$">
    Deny from all
</Files>

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) index.php/$1
</IfModule>

php_flag register_globals Off
php_flag magic_quotes_gpc Off

php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_value mbstring.input_encoding pass
php_value mbstring.output_encoding pass
php_value mbstring.substitute_character none

php_flag session.use_trans_sid Off
php_flag session.use_cookies On
php_flag session.use_only_cookies On
php_flag session.cookie_httponly On
php_flag session.auto_start Off
php_value session.cache_limiter none
php_value session.gc_divisor 1000
php_value session.gc_maxlifetime 10800
php_value session.gc_probability 1

php_value error_reporting 2047
php_flag display_errors Off
php_flag display_startup_errors Off
php_flag log_errors On
php_value error_log "/path/to/error.log"

#設定内容補足

##ファイル一覧の設定

Options -Indexes

ファイル名を省略してディレクトリにアクセスした場合、index.htmlなどが無くてもファイル一覧を表示しません。

DirectoryIndex index.php

ファイル名を省略してディレクトリにアクセスした場合、index.phpがあればそのファイルを表示します。

##不正アクセス対策の設定

Header set X-XSS-Protection "1; mode=block"

ブラウザのXSSフィルターを有効化し、XSSによる攻撃を緩和します。

Header set X-Frame-Options DENY

クリックジャンキング対策に、ページをフレーム内に表示することを禁止します。
同じサイトからの読み込むを許可する場合、DENYSAMEORIGINに変更します。

Header set X-Content-Type-Options nosniff

IEがHTML以外のファイルをHTML扱いすることを防ぎます。(IE8以降で有効)

##ファイルアクセスの設定

<Files ~ "\.(log|ini)$">
    Deny from all
</Files>

拡張子がloginiのファイルへの直接アクセスを禁止します。

##mod_rewriteの設定

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule (.*) index.php/$1
</IfModule>

http://www.example.com/index.php/view/5のようなURLに、http://www.example.com/view/5のようなURLでアクセスできるようにします。

##PHPの動作設定

php_flag register_globals Off

想定外の変数に値が格納されないようにします。

php_flag magic_quotes_gpc Off

入力データが自動的にエスケープされないようにします。エスケープ処理は、必要に応じて各プログラム側で行います。

##文字コードの設定

php_value default_charset UTF-8
php_value mbstring.language Japanese
php_value mbstring.internal_encoding UTF-8
php_value mbstring.input_encoding pass
php_value mbstring.output_encoding pass
php_value mbstring.substitute_character none

デフォルトの文字コードをUTF-8に設定します。(文字化け対策&UTF-7 XSS 対策。)

##セッションの設定

php_flag session.use_trans_sid Off
php_flag session.use_cookies On
php_flag session.use_only_cookies On
php_flag session.cookie_httponly On
php_flag session.auto_start Off

セッションをCookieでのみ扱うようにします。(セッションハイジャック対策。)

php_value session.cache_limiter none
php_value session.gc_divisor 1000
php_value session.gc_maxlifetime 10800
php_value session.gc_probability 1

セッションの有効期限を設定します。(期限は一例。10800は3時間。)

##エラー出力の設定

php_value error_reporting 2047
php_flag display_errors Off
php_flag display_startup_errors Off
php_flag log_errors On
php_value error_log "/path/to/error.log"

PHPプログラムのエラー情報をブラウザに表示せず、error.logへ出力するように設定します。(パス情報や脆弱性情報の漏洩対策。)
error_logは記録したいファイルへのパスを設定します。

.htaccessではエラーレベルを定数で指定できないので、上のように数値で指定します。以下は定数と数値の比較です。必要ならば、表を参考にしてエラーレベルを変更します。

定数表現 数値表現
E_ALL 2047
E_ALL & ~E_NOTICE 039
E_ALL | E_STRICT 4095
14
33
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?