• ベストアンサー

【PHPで認証】パスワードの暗号化は無意味では??

PHPにて会員専用ページを作りたいと考えているものです。 パスワードは暗号化すれば安全…と思っていました。しかしよく考えると暗号化されたパスワードをハッカーが盗んで自分のPCのCookieに入れたらなりすましが可能ではないのか?ということに気づきました。正規のユーザーもログイン後は暗号化パスワードをサーバーに渡してページごとに認証しているわけですから。 パスワードの暗号化は本当に意味があるのでしょうか? 暗号化されたパスワードは盗まれても問題ないのでしょうか? お詳しい方、よろしくお願いいたします。

  • PHP
  • 回答数3
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.2

がると申します。 …とりあえず。 「暗号化されたパスワードをハッカーが盗んで自分のPCのCookieに入れたらなりすましが可能ではないのか?」 無理です。というか「暗号化したパスワードをCookieに入れるような実装」は、その時点でNGです。 多分、そのあたりから調べなおしをされるとよいと思います。

ikataro
質問者

補足

自分のPCのCookieに入れたら ← そうなんですか。不可能なんですか。安心しました。 「暗号化したパスワードをCookieに入れる」は割と一般的に行われている手法のような気がしていました。 ヤフーあたりも(http://my.yahoo.co.jp/)Cookieに暗号化したユーザー名とパスワードを入れて自動ログインを実現しているように見えますし… ありがとうございました。

その他の回答 (2)

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.3

がるです。 確認をしたわけではないのですが。もし >> 「暗号化したパスワードをCookieに入れる」は割と一般的に行われている手法のような気がしていました。 ヤフーあたりも(​http://my.yahoo.co.jp/​)Cookieに暗号化したユーザー名とパスワードを入れて自動ログインを実現しているように見えますし… << がtrueだとすると、恐ろしく脆弱性の度合いの高い、危険な設計であるといえます。 通常、こういった「セッションの維持」には、 ・セッションIDと呼ばれる、ユーザIDとはまったく無関係な文字列を用意して ・セッションIDを暗号化、適宜入れ替えたりしながら使う のが通例なので(それでもセッションIDの寿命次第では、セッションハイジャックなどの危険性を孕むので)。 まぁこのあたりは「有名どころがやっているやっていない」ではなくて「理論的にセキュアであるアンセキュアである」で発想されたほうがよいように思われます。

ikataro
質問者

補足

ありがとうございます。 セキュリティの専門書を買って勉強してみます。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

普通、ページごとの認証は、暗号化パスワードではなくてセッションIDでやるのでは?

関連するQ&A

  • php パスワード 暗号化

    phpの会員サイトにてパスワードの暗号化を実装したいと思い、投稿させていただきました。 会員の人はパスワード変更→暗号化でDBに登録。 変更したパスワード(暗号化されている)でログインという流れを作りたいのですが、 暗号化でDBに登録まではできましたが、ログイン認証で一致せず困っております。 どなたか教えていただけないでしょうか? 例: <input type="password"name="password" value="1234"> $pass = $_POST[pass]; $password = crypt($pass); $passwordをDBに保存。 その後ログアウトし、ログインのパスワードで1234を入力すると「一致しません」となります。 login認証の際にどのように実装してよいのかわからず困っています。 また、上記の内容にてセキュリティ上に問題がありましたらご指摘お願いします。

    • 締切済み
    • PHP
  • 【PHP】Basic認証以外でメジャーな認証方法は?

    PHP歴1年、MySQL歴3ヶ月程度の職業プログラマなのですが、今回会員専用ページを作ることになり認証について勉強しています。 Basic認証より安全で「一般的な」認証方法は何でしょうか? 希望として、 ・Basic認証のようなポップアップウインドウは出したくない。  (教えてgooログインのような感じが理想) ・パスワードの送信は暗号化したい。 ・できればログアウトもしたい。 といった感じです。 環境は以下の通りです。 ・ファーストサーバー(レンタル) ・PHP5.2.6(Apache DSO) MySQL4.0.24 Linux 2.4.30 ・PEAR/シェル不可  1人でやっているため何が常識なのかわかりません。 お詳しい方、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • .htaccessを使ったBasic認証の、パスワードを暗号化にしたいです!

    初心者です。 今回初めてBasic認証と言うものを設置してみようと思うのですが、途中から分からなくなってしまいました。そこで色々と疑問が出てきているのですが、もしご経験者の方がおられましたら、よろしくお願いいたします。 質問1 パスワードを暗号化したいのですが、やり方がわかりません。telnetで試みたのですが、入ることが出来ませんでした。なので、暗号化されたパスワードを取得することが出来ませんでした。この場合はどうしたらよいものでしょうか? 質問2 パスワードはサーバーによって違うのでしょうか?探したところ暗号化パスワードを自動で生成してくれるようなツールがネット上にあったのですが、この生成してもらったパスワードはどこのサーバーでも使えるのでしょうか?暗号化の基準はみんな一緒でしょうか? 質問3 安全性についての疑問です。Basic認証でパスワードを暗号化した場合見られても、本当に分からないでしょうか?もし詳しい人が見たら、すぐに解読して入室できてしまうものでしょうか? もし、お一つでも分かることがありましたら、よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • パスワードの暗号化

    基本認証でアクセス制限をしているページがあります。 複数の人にそれぞれユーザID、パスワードを与えるのですが、 数が多くて一つ一つ暗号化するには手間がかかります。 パスワードを一気に暗号化できるようなソフトやCGIはないでしょうか?

    • ベストアンサー
    • CSS
  • PHPでパスワード認証

    PHPでパスワード認証をしたいです。 パスワードは、複数あり、テキストボックスにそのどれかが入力されてログインボタンを押すと、パスワードが一致していれば、ログインを許可します。 認証のセッションは、クッキーに記憶して、一定期間有効にしたいです。 また、パスワードは適宜増える可能性があります。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • PHPでの認証方法

    お世話になります。 現在PHP言語でのActive Directoryへの認証を考えています。 KADM5関数やLDAP関数等を使用するらしい事は分かったのですけれども、使い方がよく分からなくて困っています。 例えば、 サーバー名が「server01」 ドメインが「d01」 ユーザーアカウント「user01」 パスワードが「abc」 の認証を、直接WEBページのフォームからユーザーIDと パスワードを入れて、認証が出来ます基本的な例文などがございましたら、教えていただけましたらと思っています。 また、できましたら、パスワードの期限がきました時の変更などもweb上で、できましたらと思っています。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • BASIC認証のユーザー名をPHPで取得したい

    とあるレンタルサーバで、 BASIC認証のホームページを作成しております。 BASIC認証は「.htaccess」で AuthType Basic AuthName "メンバー専用ページ" AuthUserFile "ファイルパス" require valid-user ログイン後のページにアクセス解析機能をつけたいと思っていますが、BASICで入力したログインのユーザ名が取得できなくて困っております。 echo "test1:" . $_REQUEST['PHP_AUTH_USER']. "<br />\n"; echo "test2:" . $_SERVER['PHP_AUTH_USER']. "<br />\n"; echo "test3:" . $PHP_AUTH_USER . "<br />\n"; と書いて画面に出力してみましたが、正しくログインしていても 空又はNULLの状態です。 Apacheの設定?phpの設定?ソースコードの間違え? などわからない状態になっています。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのパスワード認証とセキュリティ

    パスワード認証で最初に思いついたプログラムは以下のようなものです。 (掲載サイトから引用) (例) <?php // パスワードを設定する。 $pass = 1234; // form.htmlからのパスワードを受け取る $form_pass = $_REQUEST["pass"]; ?> <html> <head> <title>Sample04</title> </head> <body> <?php // form.htmlからの値が$form_passと等しいか評価する if($form_pass == $pass){ print "ログイン成功<br>"; }else{ echo "ログイン失敗<br>", "<a href=\"./form.html\">戻る</a>";} ?> </body> </html> このような単純なプログラムではセキュリティ上安全と言えるでしょうか? 脆弱性があるんじゃないかと疑ってしまうんですが、そもそもパスワードをPHPプログラム内にそのまま記述してもよいものなんでしょうか? ソースが表示されたとしてもプログラムの中身が表示されるわけじゃないので大丈夫だと思いますが、専門家の意見が聞きたいです。 パスワードを暗号化するとセキュリティが向上するということも耳にしますが、そういった技術も導入するべきでしょうか。

    • ベストアンサー
    • PHP
  • phpのパスワードのハッシュ化について

    phpで会員サイトの作成を学習しています。 PDOを使用してMysqlサーバーに接続しています。 開発環境はxamppでphp Version 5.5.15を使用しています。 入力フォームにユーザーの情報を入力してもらい、 データベースに格納する際、 基本的なセキュリティ要件として パスワードをハッシュ化する必要があるということを こちらのサイトで(http://php.net/manual/ja/faq.passwords.php) 知りました。 ハッシュ化については初耳で、いまいちハッシュアルゴリズムの種類による違い等はまだ理解しきれていないのですが、 PHP5.5.15を使用しているので、パスワードのハッシュアルゴリズムは 上記サイトに載っているようにpassword_hashを使用するのが今のところ最善なのでしょうか? また、ハッシュ化されたパスワードの認証についてですが、 ログイン画面でパスワードを認証する際、 ユーザーが入力したパスワードをハッシュ化して 該当レコードのハッシュ化されて保存されたパスワードと 同じであれば認証が成功するという認識で正しいでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • Basic認証のパスワード

    Baisc認証のパスワードを以下のサイトを利用して作りました。 http://www.s-memo.net/sample/htaccess/index.php ここで、試しに ユーザ名にabcdefg パスワードにtest123456 と入力し、.htaccessを作成するボタンを押すと.htpasswd(ユーザー名とパスワード)欄に ユーザ:暗号化されたパスワード という形で表示されますが、ユーザ名、パスワードをそのまま同じものにして 再度、.htaccessを作成するボタンを押すと違う暗号化されたパスワードが表示されます。 ユーザー、パスワードが同じであれば、同じものが表示されると思っていましたが 毎回違った値だと照合できないのではないのでしょうか?

専門家に質問してみよう