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 |
サイトの |
参照元情報に含まれるべき文字列を指定する | |
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 によるセッション管理のみを使う方針とし、それなりに設定します。
今日の所はこんな感じです。セキュリティーについて勉強したらだいぶ頭がすっきりしてきました。