ホームページ > ウェブフロントエンド > jsチュートリアル > 応答操作による OTP バイパスの防止を停止する方法

応答操作による OTP バイパスの防止を停止する方法

Linda Hamilton
リリース: 2025-01-22 22:45:14
オリジナル
859 人が閲覧しました

このブログ投稿では、OTP (ワンタイム パスワード) バイパス攻撃を効果的に防ぐ方法について説明します。Node.js と React.js に焦点を当てていますが、他のテクノロジーにも適用できます。 OTP の実装を保護するための技術とベスト プラクティスについて詳しく説明します。

OTP バイパス攻撃について

OTP バイパスは、アプリケーションの脆弱性を悪用して、有効な OTP なしで不正アクセスを取得します。 攻撃者は、OTP 検証を回避するために、無効または期限切れの OTP を使用したり、API 応答を操作したり (Burp Suite などのツールを使用することが多い) する可能性があります。 一般的な攻撃には、正規のユーザーからの有効な応答を傍受し、それを不正アクセスに再利用することが含まれます。

応答操作の防止

API レスポンスを暗号化するだけでは十分ではありません。暗号化 (AES または RSA を使用) は転送中のデータを保護しますが、すべてのユーザーに対して同じ応答を行うと脆弱性が生じます。 暗号化を使用している場合でも、成功/失敗の基準が HTTP ステータス コードまたは一貫した成功メッセージ (「OTP が正常に検証されました」) のみに基づいている場合、攻撃者はキャプチャされた成功応答を再生することで OTP 検証をバイパスできます。

堅牢なソリューション: 固有の応答 ID

この解決策には、リクエストごとにユーザーごとに一意の識別子を生成することが含まれます。これにより、応答リプレイ攻撃が防止されます。 概要を説明した方法では、データベースの使用を回避します。

クライアント側の実装 (React.js の例):

  1. ペイロードの暗号化: サーバーに送信する前に OTP データを暗号化します。
  2. 一意の ID の生成: 一意の 7 文字の ID (UID、rsid) を作成します。 適切なランダム ID 生成方法を使用できます。
  3. ヘッダーで UID を送信: リクエスト ヘッダーに rsid を含めます。
  4. API 呼び出し: 暗号化されたデータと rsid をサーバーに送信します。
  5. 応答の検証: サーバーの応答を復号化します。
  6. UID マッチング: 重要なのは、応答で受信した rsid と要求ヘッダーで送信された
  7. を比較することです。 一致は検証が成功したことを示します。不一致は攻撃の試みを意味します。
<code class="language-javascript">const OnSubmit = async () => {
  let data = await AesEncrypt(form);
  let verifyobj = { "encdata": data };
  let getid = await makeid(7);
  let config = { headers: { "rsid": getid } };
  let ApiCallverify = await axios.post("http://localhost:4000/api/verifyotp", verifyobj, config);
  let decryptedData = await Aesdecrypt(ApiCallverify.data.dataenc);
  if (ApiCallverify && ApiCallverify.data.dataenc && ApiCallverify.status === 200) {
    if (decryptedData.rsid === getid) {
      alert(decryptedData.message);
    } else {
      alert("Invalid User");
    }
  } else {
    alert(decryptedData.message);
  }
};</code>
ログイン後にコピー
ログイン後にコピー

サーバー側の実装 (Node.js の例):

  1. リクエストの検証: リクエストの本文 (暗号化されたデータ) と rsid ヘッダーの存在を確認します。
  2. 復号化: リクエスト本文を復号化します。
  3. OTP 検証: (データベースまたはその他の安全なストレージを使用して) ユーザーの情報と照合して OTP を検証します。
  4. レスポンスの生成: 検証が成功した場合、レスポンスを暗号化し、リクエスト ヘッダーの元の rsid を含めます。
  5. 応答の送信: 暗号化された応答を送信します。
<code class="language-javascript">const OnSubmit = async () => {
  let data = await AesEncrypt(form);
  let verifyobj = { "encdata": data };
  let getid = await makeid(7);
  let config = { headers: { "rsid": getid } };
  let ApiCallverify = await axios.post("http://localhost:4000/api/verifyotp", verifyobj, config);
  let decryptedData = await Aesdecrypt(ApiCallverify.data.dataenc);
  if (ApiCallverify && ApiCallverify.data.dataenc && ApiCallverify.status === 200) {
    if (decryptedData.rsid === getid) {
      alert(decryptedData.message);
    } else {
      alert("Invalid User");
    }
  } else {
    alert(decryptedData.message);
  }
};</code>
ログイン後にコピー
ログイン後にコピー

実証された効果: ブログ投稿には、Burp Suite を使用して応答を傍受し、変更することによるログインの成功と試行の失敗を示すスクリーンショットが含まれています。独自の rsid により、リプレイ攻撃の成功を防ぎます。

How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation How to stop preventing OTP Bypass through Response Manipulation

画像は元の位置に残ります。 画像の URL は保持されることに注意してください。 これらを正しく表示するには、システムがそれらの URL にアクセスできる必要があります。

以上が応答操作による OTP バイパスの防止を停止する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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