1

PHP開発初心者です。また、PHP について話し合う同僚もいません。だから私はここに私の質問を投稿します。

私はなんとか自分用のログインスクリプトを作成しました。魔女はこのサイトのスクリプトによく似ています: http://www.phpeasystep.com/phptu/6.html

私の質問はです。これは安全なアプローチですか?PHP ログイン スクリプトに関する適切なチュートリアルはありますか? セッションに情報を保存するアプローチに何か問題がありますか?

4

6 に答える 6

4

投稿したチュートリアルに関するいくつかの問題。

  1. さすがに古そうです。ストリップスラッシュ? session_register? これらはすべて、以前のバージョンの PHP の構成要素であり、現在ではすべて悪い習慣と見なされています。
  2. 著者は mysqlinjection は安全だと言っていますが、そうではありませんが、mysql_real_escape_string をだますこともできます。データベース関連の準備済みステートメントでPDOを使用します。
  3. コードから判断すると、パスワードはすべて暗号化されずにデータベースに保存されているようです。これは賢明ではありません。安全な方法でパスワードをハッシュ/保存する方法については、PHP パスワードのセキュア ハッシュとソルトを確認してください。
  4. 読み取り可能なパスワードはセッションに保存されます。Cookie にアクセスできる人は誰でも、Cookie からパスワードを 1 対 1 で読み取ることができます。悪い!

正しく実行したい場合は、フォームベースの Web サイト認証の決定版ガイドを読んで、その提案を実装してください。

于 2012-04-19T08:10:29.070 に答える
2

絶対に安全ではありません。パスワードをハッシュせずにテキストとして保存しています。パスワードのハッシュ化 (少なくとも sha256、md5 または sha1 ではありません) を確認し、ソルティング ハッシュ化によってパスワードがエンコードされるため、db 攻撃が成功した場合に誰もパスワードを取得できなくなります。ソルティングはある程度のセキュリティを追加します。すべてのパスワードに文字列を追加してハッシュするだけです。すべてのユーザーのカスタム ソルトと、キーボードにない特殊な文字を含むサーバー ソルトを使用できます。これにより、パスワードはかなり安全になります。SQL クエリに PDO とパラメーターを使用すると、SQL インジェクション攻撃からより安全になります。
セッションでの保存については、パスワードを保存しないでください。パスワードは挿入され、ハッシュされ、少なくとも別のログインまで二度と使用されません。

于 2012-04-19T08:07:21.317 に答える
2

まったく安全ではありません:

  • 暗号化されていないパスワードをデータベースに保存しています。ハッシュ (sha256 以上: sha512) のみをデータベースに保存し (salt を使用)、ユーザー名と POST パスワードのハッシュをクエリします。
  • 暗号化されていないパスワードを Cookie に保存しています。絶対にやるべきではありません。ページがロードされるたびにセッションステータスを確認できるデータベースにセッションIDを保存する必要があります。
  • 使用しているかどうかはわかりませんが、ユーザー資格情報の暗号化転送に SSL 暗号化 (https) を試してみてください。
于 2012-04-19T08:04:24.490 に答える
0

SHA512ハッシュは、可能であればソルトを使用する最良の方法ですが、これとPDOの使用に関する負荷が見つかりましたが、sha512ハッシュを使用する登録フォームを作成できません。アイデアを返信してください

于 2012-12-21T23:58:12.443 に答える
0

そのスクリプトを見ると、ストリップ スラッシュ機能を実装し、パスワードの保存にハッシュ アルゴリズム (SHA256) を使用している限り、適切な行が長く続くと言えます。ハッシュにソルトを追加することでこれをさらに拡張できます。これにより、誰かがデータベースを攻撃して SELECT * FROM Password WHERE Password = 'HASH'; を実行した場合に保護されます。これにより、すべてのユーザー名が返され、攻撃者はこれらの資格情報を使用してログインを試みることができます。SQL インジェクションと XSS は、Web サイトに対する一般的なタイプの攻撃であり、ログイン システムを介して実行できます。それらを一読することをお勧めします。

その他のリソース:

http://www.webstockbox.com/php/7-tutorials-on-how-to-create-a-php-login-system/

http://en.wikipedia.org/wiki/Cross-site_scripting

http://en.wikipedia.org/wiki/SQL_injection

于 2012-04-19T08:05:44.583 に答える
0

いいえ。パスワードをそのまま保存しない方がはるかに安全です。パスワードを (つまり md5() で) ハッシュし、ハッシュを DB に保存することをお勧めします。ログインするには、フォームから送信されたパスワードを取得し、それをハッシュして、DB に保存されているハッシュと比較します。

于 2012-04-19T08:06:32.417 に答える