好吧我有一個表單來創建一條新記錄。表單需要幾個文本字段。在將它們放入數據庫之前,我通過htmlentities($ field,ENT_QUOTES)運行這些字段。那很棒。我沒有辦法容忍XSS,因爲沒有人可以有希望擺脫我的領域。如何正確使用htmlentities()並處理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>
這不是好主意,因爲該領域litteraly顯示爲「約翰·&#u0039;康納」。如果我允許引用,那麼人們可以跳出我的輸入字段並注入XSS。
如果我可以避免的話,我並不想真正將某些事情列入白名單。
就像在SO上一樣。當我編輯帖子時,引號和任何隨機文本仍在框中,但SO對XSS不起作用。
這些字段由一個AJAX請求填充,該AJAX請求返回所有字段的JSON數據。
編輯:
BOSS,你錯過了這一點。我想要輸入字段。我只是想讓VALUES正確顯示。
<input id="name" name="name" value="" />
.
.
.
<script>
//AJAX request to fill fields here
</script>
如果用戶輸入「貓」的輸入字段變爲:
<input id="name" name="name" value="cat" />
和被顯示在框中的字「貓」。
如果用戶輸入的約翰·奧康納輸入框變爲:
<input id="name" name="name" value="John O&#u0039;Conner" />
,並在「約翰·康納'」顯示在對話框(不好)。
如果我允許引號用戶可以把在「約翰‘的onmouseover =‘警報(3);’數據虛擬=’康納」,並輸入字段將變爲:
<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());
});
'html_entity_decode()'顯示()由'ヶ輛編碼數據時' –
是的,但後來此留下我的網站打開漏洞的用戶可以輸入以下內容:約翰·O「的的onmouseover =‘警報(3);’數據虛擬=」康納 –
上面衝着你 –