リプレイ攻撃 (デモンストレーション攻撃とも呼ばれます) は、正規のユーザーによって以前にサーバーに送信されたデータを攻撃者がリプレイして、そのユーザーに割り当てられたアクセス権やその他の権限を取得する攻撃です。
パスワード スニッフィングと同様、リプレイ攻撃を防ぐにはデータの漏洩を認識する必要があります。リプレイ攻撃を防ぐには、制限されたリソースへのアクセスに使用されるデータを攻撃者が取得することをより困難にする必要があります。これには主に、次の行為を避ける必要があります:
保護されたリソースへの永続的なアクセスを設定するデータの使用
保護されたリソースへのアクセスを設定するデータの公開 (一時的なアクセスのみを提供するものであっても);
このように、保護されたリソースへの一時的なアクセスを確立するデータのみを使用し、このデータの漏洩を避けるように努める必要があります。これらは単なる一般的なガイドラインですが、運用方法についての指針となります。
私の知る限り、最初の原則は恐ろしいほど頻繁に破られています。多くの開発者は、機密データを暴露から保護することだけに重点を置き、保護されたリソースへの永続的なアクセスを設定するために使用されるデータが使用されるときに生じるリスクを無視しています。
たとえば、フォーム検証フォームのパスワードのハッシュを計算するローカル スクリプトについて考えてみましょう。この方法では、パスワードの平文は公開されず、そのハッシュ値のみが公開されます。これにより、ユーザーの元のパスワードが保護されます。このプロセスの主な問題は、リプレイの脆弱性が変わらないことです。攻撃者は正規の認証プロセスを一度リプレイして認証に合格することができ、ユーザーのパスワードが一貫している限り、認証プロセスは成功します。
より安全な操作ソリューション、MD5 JavaScript ソース ファイル、およびその他のアルゴリズムについては、http://www.php.cn/ を参照してください。
最初の原則に対する同様の違反は、リソースへの永続的なアクセスを提供するために Cookie を指定することです。たとえば、Cookie を設定して永続的アクセス メカニズムを実行する次の試みを考えてみましょう:
CODE: <?php $auth = $username . md5($password); setcookie('auth', $cookie); ?>
認証されていないユーザーが認証 Cookie を提供した場合、プログラムは Cookie 内のパスワードのハッシュを確認します。値はデータベースに保存されているパスワードのハッシュと一致します。それらが一致する場合、ユーザーは認証されます。
このプロセスの問題は、認証 Cookie が漏洩するリスクが非常に大きいことです。それが捕捉されると、攻撃者は永続的なアクセスを取得します。正規ユーザーの Cookie は期限切れになる可能性がありますが、攻撃者は毎回認証のために Cookie を提供する可能性があります。この状況を示す図については、図 7-2 を参照してください。
より良い永続ログイン ソリューションは、一時的なアクセス権を持つデータのみを使用することです。これについては、次のセクションのトピックでもあります。
上記は PHP セキュリティ リプレイ攻撃の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。