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


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


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

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

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

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/05/30 12:38:33
  • 終了:2012/05/30 18:00:45

ベストアンサー

id:y-kawaz No.1

y-kawaz回答回数1420ベストアンサー獲得回数2252012/05/30 17:28:53

ポイント100pt

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

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

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

id:robopit

ありがとうございます。
疑問はすべて晴れました。
おかげさまで前に進めそうです

2012/05/30 18:00:25
  • id:standard_one
    質問の意図がよくわからないけど、セッションにuser_id入れなければ少しはマシになるんじゃないの?
    key=ランダムな値 とかを入れておいて、サーバ側でランダムな値とuser_idのマップを持っておくとか。
    で、ページ遷移するたびにランダムな値を更新してセッションに入れなおして(当然マップも更新)いけばセキュリティっぽいでしょw
  • id:robopit
    初心者なので、あまりうまく伝えられなくてすいません

    ログインする際

    ユーザ名とパスワード要求しますよね

    そのユーザ名やデータベースの主キーであるIDをデータベースから呼び出してセッションに入れてます。

    USER_ID | USER_NAME | PASSWARD

    1 | test | ****

    だったら 1と test をセッションに入れます

    プロフィールを編集する機能ページでは
    情報を編集する際

    UPDATE product.user USER_NAME = '$USER_NAME' WHERE user_id = " . $_SESSION['user_id'] . "";

    ってな形でユーザの項目を探しだして編集しています

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

    素人考えなので、まったく心配がないのでしたらそれでよいのですが
    的が外れていてもセキュリティ上の問題があれば教えていただければとおもいます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません