2

そこで、html5 で data 属性を使用すると、javascript ファイルで処理する値を挿入できることを以前に学びました。例えば

<a href="#" data-name="hello" class="check">Hey</a>

処理JavaScriptファイルには、これを行う可能性のあるリンクタグを処理する行があります

var value=$('.check').data('name');
window.location.href="http://www.example.com/'+value+'";

悪意のあるコーダーがこれを悪用できるのでしょうか? リダイレクトに使用する前に値をサニタイズする必要がありますか?

4

4 に答える 4

1

HTML がユーザー入力から取得されたもの、またはユーザー入力から生成されたものである場合、はい、間違いなくサニテーションを実行する必要があります。ただし、他の属性にはない方法でデータ属性に何らかの脆弱性があるかどうかを尋ねている場合、答えはノーです。

于 2013-07-10T00:17:12.090 に答える
1

それは本当に依存します。

攻撃者はブラウザで必要なものを何でも変更できるため、フロントエンドにどれだけサニタイズを加えても問題ありません。攻撃者は、すべての JavaScript 関数などを巧みに回避して、フロントエンド コードを回避できます。

フロントエンドでの入力をサニタイズするべきではないと言っているのではありません。正当なユーザーの使いやすさとエクスペリエンスの点で常に役立つからです。

ユーザーをリダイレクトするアドレスがそのデータ属性を使用してサーバーで何かを行う場合は、必ずフロントエンドとバックエンドの両方でサニタイズしてください。それ以外の場合は、心配する必要はありません。最悪のシナリオは、悪意のあるユーザー (または知識のあるユーザー) が 404 ページに到達することです。

** 編集 **

この回答のコメントを読んだ後、更新された回答は次のとおりです。

危険は、その情報をどのように使用するかにあります。Google アナリティクス スクリプトの例を見てみましょう。

Google では、Google アナリティクス インターフェースを介して訪問者の行動や行動を追跡するのに役立つスクリプトを提供しています。

Google のスクリプトの値を変更すると、Google アナリティクスが機能しなくなり、アナリティクス スクリプトを介して Google をハッキングすることはできなくなります。

グーグルはこれをどのように達成していますか?彼らはすべてのセキュリティをバックエンドに置き、Web サイトでレンダリングされたり、データベースに保存されたり、何らかの方法でサーバーと対話したりする変更可能なユーザー入力をサニタイズします。

ケースに戻ります。

そのデータ属性を使用して document.write() をeval実行する場合、データベース検索または機密操作 (データの削除、更新、取得) を実行する場合は、必ずそうします: サニタイズしてください。

どうやって消毒するの?それは特定の問題であり、おそらく新しい質問をする必要があります。

于 2013-07-10T00:23:14.743 に答える
0

ブラウザーに (XSS 経由などで) アクセスできるユーザーは、何でもデータ属性に挿入できます。しかし、彼はいつでもどこでもリダイレクトできるので、この些細なケースは関係ありません。

ユーザーが他の手段で値を設定した場合、リンクは同じドメイン内の意図されていない場所に設定される可能性があります。これは面倒かもしれませんが、セキュリティ上のリスクにはなりません。

eval属性に javascript 文字列を含め、それがユーザーから (たとえば、データベース値を介して) 取得されるなど、何か他のことを行っている場合、XSS 脆弱性が作成されます。しかし、とにかく、ユーザーが提供した値を決して信頼すべきではありません。そこのhtmlデータ属性について特別なことは何もありません。

于 2013-07-10T00:19:37.903 に答える
0

リダイレクトに使用する前に値をサニタイズする必要がありますか?

にサニタイズする必要はありませんが、にサニタイズする必要があります。

あなたの例では、データをサニタイズしていない場合、従来の XSS の犠牲者になる可能性があります。

つまりhttp://www.example.com/ + value、値はsearch?q=<script>alert(1)</script>であり、検索ページが実際に生のクエリをブラウザに出力する場所です。

ps: これはデータ属性に固有のものではありません。通常の属性と同じように機能します。

于 2013-07-10T00:23:07.290 に答える