OK、新しいレコードを作成するフォームがあります。フォームにはいくつかのテキスト フィールドがあります。それらをデータベースに入れる前に、htmlentities($field, ENT_QUOTES) を介してフィールドを実行します。それは素晴らしいことです。誰も私の分野から抜け出すことを期待できないので、私が XSS に対して脆弱になる方法はありません。
例えば:
Assume the user entered 'Lol <script></script>'
<div>
<div>Description</div>
<div>Lol <script></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());
});