你不能僅靠保護自己免受瀏覽器中有害的用戶編碼來保護自己免受XSS攻擊。即使沒有瀏覽器,我也可以向您發送有害請求。在存儲用戶數據或生成html時,您需要保護自己免受服務器端的XSS攻擊,具體取決於您的方法。
這是一個PHP函數,你可以保護自己免受此類攻擊:當它要保證生成的HTML是安全
public static function protectArrayAgainstXSS(&$arr) {
$changed = false;
foreach ($arr as $index => $a) {
if (is_array($a)) {
$changed = $changed || Common::protectArrayAgainstXSS($arr[$index]);
} else if ($a !== null) {
$changed = $changed || ($arr[$index] === strip_tags($a));
$arr[$index] = strip_tags($a);
}
}
return !$changed;
}
您的代碼應該運行此。
至於你關於jQuery的問題:.val()
不應該處理你想要的。如果你想編碼解碼的東西,你可以做這樣的事情:
function htmlEncode(value){
//create a in-memory div, set it's inner text(which jQuery automatically encodes)
//then grab the encoded contents back out. The div never exists on the page.
return $('<div/>').text(value).html();
}
function htmlDecode(value){
return $('<div/>').html(value).text();
}
function myVal(context, v) {
return v ? context.val(htmlEncode(v)) : htmlDecode(context.val());
}
Source。
但是,只要你需要保護,你需要在服務器端有一個保護。您可以保護您的客戶端以及XSS輸入,但這是可選的。
顯示哪裏?它不會對它進行解碼,因爲您輸入的值不是'&'它是'&'。這對我來說似乎是非常正確的行爲。你的問題真的不是很清楚嗎? – Liam
HTML文件內的'&'在瀏覽器的HTML解析器到達渲染引擎之前已經被解碼。這是XML/HTML的一部分。 JavaScript文件沒有這樣的解碼發生。 (可能有嵌入HTML的JavaScript代碼片段)。 – Thilo
我使用自動完成,我使用htmlspecialchars ecnode我的數據並返回自動完成,可以說我會返回A & D公司,我想我的輸入填充與A和D(但值應該是A & D) –