セキュリティの専門家の方からの指摘で、
本日は、
以前組んだシステムに脆弱性対策を施しています。
で、
指摘された内容の中に、
■セッション管理に使用するクッキー(Cookie)にセキュア属性(secure属性)を付けるようにしろ!!
■セッション管理に使用するクッキー(Cookie)のパスはちゃんと設定しろ!!
というものがありました。
まず、
secure属性に関してですが、
このsecure属性を付けてやることにより、
HTTPS通信時にのみクッキーを送信できるようになるとのことです。
どうしてsecure属性が必要かというと、
HTTP通信時にクッキーの情報を盗聴によりひっこ抜かれると、
そのクッキーの中に含まれている重要情報が漏洩してしまう可能性があります。
なので、
HTTPS通信時にのみクッキーを送信するようにして、
極力安全な通信のみを行いましょう!!
とのことです。
ただし、
HTTP通信とHTTPS通信が混在しているサイトの場合には、
当然HTTP通信からはクッキーを送信できなくなるので、
それにより不都合が生じる場合もあります。
その為、
サイト側の仕様を考慮して最終的に対応するかどうかを決めて!!
とのことでした。
今回チェックして貰ったシステムは常時SSL通信を設定しており、
HTTPでの通信は許可していないので、
当然対応しておくことにします。
対応方法は、
ini_set("session.cookie_secure", 1);
というコードを追記してやれば、
これで設定完了です。
次に、
クッキー(Cookie)のパス設定についての説明です。
今回指摘があったサイトのトップページURLは、
https://www.sample.com/rent/
というように本サイト(https://www.sample.com/)とは別に、
「rent」というディレクトリを設けてサイトの構築を行っています。
※本サイトとrentサイトは、ドメインは同じだけど、全くの別サイト。
この場合には、
仮に本サイト(https://www.sample.com/)にクロスサイトスクリプティングの脆弱性が存在していた場合、
そちらから、
/rent/直下のクッキーデータも引っこ抜かれる危険性が生じるので、
きちんとクッキーのパスも指定しておくように!!
とのことでした。
で、
こちらも、
ini_set("session.cookie_path", "/rent/");
とini_set()で設定すれば、
Cookieの保存パスの指定は完了します。
まとめると、
<?php
ini_set("session.cookie_secure", 1);
ini_set("session.cookie_path", "/rent/");
session_start(); //セッション開始
・
・
?>
みたいなコードで今回指摘があった「Secure属性の追加」と「保存パスの設定」は完了です。
念の為にクッキーの確認も行って下さい。
以下の様になっていれば修正完了です。
因みに、
session_set_cookie_params()関数
を使っての設定も可能です。
使い方は、
session_set_cookie_params("クッキー有効期限", "クッキーの保存パス", "クッキーが有効なドメイン", "セキュアフラグ, "HTTP通信フラグ");
となるので、
今回のシステムであれば、
session_set_cookie_params(0, "/rent/", "sample.com", true, false);
とすればOKです。
※5番の引数「HTTP通信フラグ」を「true」にした場合、HTTP通信のみがクッキーにアクセス可能となります。
あと、
上記のようなクッキーの設定情報を確認したい場合には、
session_get_cookie_params()関数
で確認が可能です。
PHP脆弱性対応PHP脆弱性対応 クリックジャッキング攻撃への対応
PHP脆弱性対応PHP脆弱性対応:XSS(クロスサイトスクリプティング)
PHP脆弱性対応PHP脆弱性対応:フォームのセキュリティー対策 入力値の妥当性チェック
この記事へのコメントはありません。