dari88's diary

これから趣味にするプログラミング/PHP/javascript/kohana/CMS/web design/

PHPのセキュリティーについてお勉強・・・php.ini の設定を見直しました

今日もNetBeansにて「PHP逆引きレシピ」のサンプルコードを教材にPHPの勉強を進めています。

今日は第8章「セキュリティー」をじっくり読んでみました。ハッカーはあらゆる手を使って攻撃してくるので、公開サイトのプログラムを書くに際しては入力値を厳密にチェックする必要があることを理解しました。

セキュリティー対策の第一歩はphp.iniの設定ということで、先ずはこれを検討したのでメモしておきます。

php.ini の検討>
・xampp を導入してからセキュリティ関係でいじった所は下記の1点だけ。
  mbstring.internal_encoding = UTF-8
PHPは Version 5.3.8
・この状況で phpinfo() で調べたセキュリティー関係の現状設定を「PHP逆引きレシピ」の推奨値と比較します。さらに考察した上で今後の設定方針を決めました。
・最初に文字エンコード関係の設定です。

項  目 現在の
設定
推奨
設定
今後の
設定
説  明
default_charset no value UTF-8 UTF-8 HTTPヘッダーに出力するデフォルトの文字エンコーディング
mbstring.language neutral 注1 Japanese   使用する言語
mbstring.internal
_encoding
UTF-8 UTF-8   mbstring関数のデフォルト文字エンコード
mbstring.http
_input
pass auto   HTTP入力文字エンコードの検出
mbstring.http
_output
pass pass   HTTP出力文字エンコード
mbstring.detect
_order
no value 注2   文字エンコードの自動検出の優先順位
mbstring.substitute
_character
no value "none"   変換できない文字を代替えする文字
mbstring.encoding
_translation
Off Off   HTTP入力文字エンコードの自動変換
注1 言語のneutral; デフォルト言語を中立(UTF-8)に設定 (デフォルト)

 ・default_charset は定義した方が安全そうなので設定します。
・mbstring.language は Japanese ではグローバルな感じがしないので、変えない方針とします。
・mbstring.encoding_translation は Off 推奨なので、文字エンコードを自動検出したり、その優先順位を指定したり、代替え文字を指定しても意味ないんじゃないかと今は思えます。

・次はセキュリティー関係の設定です。

項  目 現在の
設定
推奨
設定
今後の
設定
説  明
allow_url
_fopen
On On   外部のURIをローカルのファイルと同じように扱う許可
allow_url
_include
Off Off   include()、include_once()、 require()、require_once() での 外部のURIの読み込みを許可する
default_charset no value 設定する UTF-8 HTTP ヘッダーで出力する文字エンコード(必ず設定する)
disable
_functions
no value 設定する   スクリプト内で指定の関数を使用禁止にする
enable_dl On Off Off PHPの拡張モジュールをスクリプト内からロード可能にする
expose_php On Off   HTTPヘッダーにPHPのバージョンを出力する
file_uploads On Off   ファイルのアップロード機能の設定
log_errors On On   エラーログを記録する設定
magic_quotes
_gpc
Off Off   PHP6で廃止予定
magic_quotes
_runtime
Off Off   PHP6で廃止予定
max_execution
_time
30 30   PHPスクリプトの最大実行時間
max_input
_time
60 60   入力データの解析時間の最大秒数
memory_limit 128M 32M   PHPが使用可能なメモリの上限
open_basedir no value 設定する ? PHPスクリプトがアクセスできるディレクトリを設定する
register
_globals
Off Off   必ずOffにする
safe_mode Off 注3   PHP6で廃止予定
session.cookie
_httponly
Off On On セッションCookieにhttponly属性を指定する(安全)
session.cookie
_lifetime
0 0   セッションCookieの有効期限
session.cookie
_path
/ 注4   セッションCookieで設定するパスを指定する
session.cookie
_secure
Off 注5   セッションCookieにsecure属性を設定する
session.entropy
_file
no value 注6   セッションIDを作成する際のエントロピーソースを指定する
session.gc
_maxlifetime
1440 1440   セッションデータがゴミとみなされるまでの秒数
session.hash
_function
0 (MD5 1 (SHA1   セッションIDを生成するハッシュ関数の指定
session.referer
_check
no value

サイトの
URI

  参照元情報に含まれるべき文字列を指定する
session.use
_cookies
On 1 (On)   Cookieによるセッション管理の設定
session.use
_only_cookies
Off 1 (On) 1 (On) Cookieによるセッション管理のみを使う設定
session.use
_trans_sid
0 (Off) 0 (Off)   透過的なセッションIDを付加する設定
注2 SJIS,EUC-JP,JIS,UTF-8,ASCII
注3 共有サーバーの場合;On
注4 ホスト名を共有している共有サーバー場合;自分のディレクトリ
注5 全ページSSLの場合;On
注6 存在する場合;/dev/urandom

・disable_functions は当面設定しません。
・enable_dl はPHPの拡張モジュールを使うとも思えないので Off に設定します。
・expose_php はこのままでいいんじゃないかと。
・file_uploads は出来ないと困ります。
・open_basedir は取り敢えず c:\xampp でしょうか。
Cookie 関係は Cookie によるセッション管理のみを使う方針とし、それなりに設定します。

今日の所はこんな感じです。セキュリティーについて勉強したらだいぶ頭がすっきりしてきました。