人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

セッションを利用した認証のセキュリティについて

PHPを利用してウェブサイトを作っています
ログインする際、セッションにログインidや名前を入れて
他のページたとえば自分のプロフィール編集画面で
if (!isset($_SESSION['user_id'])) {
exit();
}
という感じで認証しているのですが
(編集する際も
WHERE user_id = " . $_SESSION['user_id'] . "";
という感じでキーとして利用しています。)


セキュリティの本を読んで盗聴などには、session_id()というものを安全な乱数にすれば大丈夫
などとかいてありましたが、上記の例の場合適当なランダムな数字入れてしまえば勝手に編集できるようになってしまう気がします。

これはセキュリティ的に問題があるとおもうのですがどうなんでしょうか?

もし問題ある場合どのような対策をすればいいのかアドバイスいただけたらと思います。


●質問者: robopit
●カテゴリ:ウェブ制作 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● y-kawaz
●100ポイント ベストアンサー

> 例えば、ログインパスがわからなくても
> 編集ページで適当なセッション作って 数字入れて言ったら
> このユーザでなくて編集できるようになっちゃうんじゃないかと思いまして

「編集ページで適当なセッション作って」これが出来ないから問題無いです。$_SESSION 自体が既にランダムIDに紐付いたものとして使えるようになっているので大丈夫なのです。
ブラウザのクッキーを見るとPHPSESSIONIDという名前でランダムな値が入っているクッキーがありますよね?予測できないようにランダムにするべきというのは、このPHPSESSIONIDという名前のクッキーの値です。これはPHPが勝手にランダムで作ってくれます。

認証成功した際にセットされる $_SESSION['user_id'] の値はサーバ側プログラムがセットするもので、ユーザの入力がそのまま入れるわけではないですよね。
質問者さんは ?user_id=1 などのクエリを編集画面に投げたら、PHP内部で$_SESSION['user_id']が1になってしまうんじゃないか?と勘違いされて心配しているのだと思いますが、ユーザの入力が入るのは $_GET や $_POST や $_REQUEST であって、$_SESSION ではありません。$_SESSIONにユーザが直接値を代入することは出来ません。


robopitさんのコメント
ありがとうございます。 疑問はすべて晴れました。 おかげさまで前に進めそうです
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ