0

OK、新しいレコードを作成するフォームがあります。フォームにはいくつかのテキスト フィールドがあります。それらをデータベースに入れる前に、htmlentities($field, ENT_QUOTES) を介してフィールドを実行します。それは素晴らしいことです。誰も私の分野から抜け出すことを期待できないので、私が XSS に対して脆弱になる方法はありません。

例えば:

Assume the user entered 'Lol <script></script>'

<div>
  <div>Description</div>
  <div>Lol &lt;script&gt;&lt;/script%gt</div>
</div>

それはいいことです。テキスト表示は、ユーザーにとって適切です。次の問題が発生します

Assume the user entered "John O'Conner"

<div>
  <div>Name</div>
  <div><input name="name" value="John O&#u0039;Conner"</div>
</div>

フィールドが文字通り「John O&#u0039;Conner」と表示されるため、これは適切ではありません。引用符を許可すると、人々は私の入力フィールドから抜け出し、XSS を挿入できます。

回避できるのであれば、特定のものをホワイトリストに登録したくありません。

SOのように。投稿を編集すると、引用符とランダムなテキストがボックスに残りますが、SO は XSS の影響を受けません。

フィールドは、すべてのフィールドの JSON データを返す AJAX 要求によって入力されます。

編集:

ボス、あなたは要点を逃しました。入力欄が欲しい。VALUESを正しく表示したいだけです。

<input id="name" name="name" value="" />
.
.
.
<script>
    //AJAX request to fill fields here
</script>

ユーザーが「cat」と入力すると、入力フィールドは次のようになります。

  <input id="name" name="name" value="cat" />

ボックス内に「cat」という単語が表示されます。

ユーザーが John O'Conner と入力すると、入力フィールドは次のようになります。

  <input id="name" name="name" value="John O&#u0039;Conner" />

そして、「John O'Conner」という単語がボックスに表示されます (良くない)。

ユーザーが 'John" onmouseover="alert(3);" data-dummy="Conner' に入力できる引用符を許可すると、入力フィールドは次のようになります。

  <input id="name" name="name" value="John" onmouseover="alert(3);" data-dummy="Conner" />

編集:私はやった:

                      var dummy = $("<div></div>");
          //Itterate through the JSON object 
          $.each(returned_data, function(key,val) {
              dummy.html(val)
              $("#"+key).val(dummy.html());
          });
4

1 に答える 1