ホームページ > バックエンド開発 > PHPチュートリアル > ユーザーのパスワードをハッシュする前にサニタイズする必要がありますか?

ユーザーのパスワードをハッシュする前にサニタイズする必要がありますか?

DDD
リリース: 2024-12-22 03:32:09
オリジナル
519 人が閲覧しました

Should I Sanitize User Passwords Before Hashing Them?

ユーザー パスワードのクレンジング: 総合ガイド

ユーザーが指定したパスワードをデータベースに保存するために準備する場合、クレンジングまたはエスケープを適用したくなります。メカニズム。ただし、このアプローチは多くの場合逆効果であり、特にパスワードのハッシュ化に PHP のpassword_hash() 関数を使用する場合には不必要です。

ハッシュ化されたパスワードにクレンジングが不要な理由

パスワードのハッシュ化これを、簡単に元に戻せない、または SQL インジェクション攻撃に使用できない形式に変換します。ハッシュ関数は入力内の特定のバイトに特別な意味を持たないため、セキュリティ目的でのクレンジングは不要です。

ユーザーがスペースや特殊文字を含む任意のパスワードやフレーズを使用できるようにすることで、ハッシュされたパスワードの安全性が確保されます。 。 Password_hash() のデフォルトのハッシュ アルゴリズムである PASSWORD_BCRYPT は、ランダムなソルト、ハッシュされたパスワード情報、およびコスト パラメーターで構成される 60 文字の文字列を生成します。

パスワード ハッシュに対するサニタイズの影響

サニタイズ方法が異なると、パスワードに大きく異なる影響を与える可能性があります。 「私は "デザート トッピング" & !」というパスワードを考えてみましょう。

  • trim(): 末尾のスペースが削除され、結果として次のものが失われます。末尾にスペースが 5 つあります。
  • htmlentities(): 二重に変更されます引用符、アンパサンド、中括弧を HTML エンティティに組み込み、パスワードの外観を変更しますが、ハッシュ値は変更しません。
  • htmlspecialchars(): htmlentities() に似ていますが、すべての HTML 特殊文字に影響します。
  • addslashes(): 特定のプレフィックスエスケープ文字を含む文字。後でパスワード検証を妨げます。
  • strip_tags(): HTML タグを削除し、その結果、床ワックスのテキストが失われます。

パスワード クレンジングの結果

これらのクレンジングを採用するメソッドは不必要な複雑さをもたらします。パスワードを検証する場合は、password_verify() を使用する前に、投稿されたパスワードに同じクレンジング メソッドを再適用する必要があります。そうしないと、検証が失敗します。

password_hash() が使用される場合、クレンジングによって追加のセキュリティは提供されず、プロセスが複雑になるだけです。

代替ソリューション

ユーザーのパスワードをサニタイズする代わりに、以下:

  • 信頼性の高いパスワード ハッシュを実現するには、PASSWORD_BCRYPT アルゴリズムを備えた PHP のpassword_hash() 関数を使用します。
  • ブルート フォース攻撃に対する脆弱性があるため、MD5 パスワード ハッシュの使用は避けてください。
  • 強力なパスワードポリシーを実装する
  • データベースのパスワードが侵害されていないか定期的に監視し、必要に応じて適切な措置を講じてください。

以上がユーザーのパスワードをハッシュする前にサニタイズする必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート