1

どこにも送信されないテキストエリアがある場合、これは初歩的な質問です...

 <form onsubmit="return false;">
      <textarea name="new_title_text" id="new_title_text"></textarea>
 </form>

jQueryを使用して、テキストエリアの値をdivに追加します...

var textValue = $('#new_title_text').val()
$('#myDiv').prepend('<div>' + textValue + '</div>');

これにセキュリティ上の脆弱性はありますか? 誰かがどうにかして JavaScript を挿入し、XSS、CSRF、またはその他の種類の攻撃を実行できますか? 値をサーバーに送信したら、チェックする必要があることは理解していますが、送信前に何かできることはありますか?

ありがとうございます!

4

3 に答える 3

4

基本的に、クライアント側で行われた検証を信頼することはできません。なぜなら、人々は (かなり簡単に) JavaScript 検証をバイパスできるからです。

サーバーで適切な検証とサニテーションを行い、クライアント側の検証は単にユーザーエクスペリエンスのために残し、値が必要な空のフィールドなど、明らかに無効なデータでサーバーを「悩ませ」ないようにします。


ユーザーが PHP コードまたは JavaSctipt コードを送信して、サイトの別の場所で実行できるようにしている場合を除き、安全です。ユーザーから送られてくるデータは信用しないでくださいすべての着信データを潜在的な脅威として扱い、後で使用する予定がある場合は、処理するものをすべてサニタイズします。

于 2012-07-27T22:59:03.520 に答える
1

誰かが何らかの方法で JavaScript を挿入し、XSS、CSRF、またはその他の種類の攻撃を実行できますか

はい。HTML エスケープなしでテキストを HTML 文字列に挿入しているため、その文字列 (<または&) 内のメタ文字は失敗し、インジェクション攻撃に対して脆弱になる可能性があります (例: <script>...)。

問題は、その誰かが誰であるかです。現在のコードからは、外部パーティがテキストエリアを事前に入力することはできないように見えるため、ユーザーが自分自身を攻撃している必要があります (実際には脆弱性ではありません)。

したがって、HTML に入る文字列を HTML エスケープするか、または や のような DOM スタイルのアクセス メソッドを使用して、粗い文字列マークアップ生成を使用せずにテキスト コンテンツと属性を設定する.text()必要があります。.attr()または作成の速記:

$('#myDiv').prepend(
    $('<div>', {text: $('#new_title_text').val()})
);
于 2012-07-30T07:18:04.360 に答える
0

基本的な考え方は、はい、信頼できないデータで prepend を使用するのは安全ではないということです。ただし、悪用可能性はシナリオによって異なります。攻撃者が信頼できない値でスクリプトを実行させる URL を作成できる場合、XSS の問題が発生していることは間違いありません。ただし、ユーザーが安全でないデータを入力してボタンをクリックすることによってのみこれをトリガーできる場合は、より安全ですが、完全ではありません。これはしばしば self-xss と呼ばれ、クリックジャッキングなどと一緒に悪用されることがあります。

安全でない jquery 関数の詳細については、http://erlend.oftedal.no/blog/?blogid=127 を参照してください

于 2012-07-28T16:26:43.037 に答える