爲了保護xss攻擊,我嘗試使用下面的函數對每個要顯示給用戶的消息進行編碼。防止Xss使用編碼,但用戶的可讀性很差
function encodeRFC5987ValueChars(str)
{
return encodeURIComponent(str).
// Note that although RFC3986 reserves "!", RFC5987 does not,
// so we do not need to escape it
replace(/['()]/g, escape). // i.e., %27 %28 %29
replace(/\*/g, '%2A').
// The following are not required for percent-encoding per RFC5987,
// so we can allow for a little better readability over the wire: |`^
replace(/%(?:7C|60|5E)/g, unescape);
}
示例輸入消息是像下面
Start 20 TV's test; star ;; '' -- testagain., comma. </>
我從這個函數接收的輸出消息是象下面這樣。
Start%2020%20TV%27s%20test%3B%20star%20%3B%3B%20%27%27%20--%20testagain.%2C%20comma.%20%3C%2F%3E
我嘗試顯示如下。
document.getElementById("labelResult").innerHTML = "Start%2020%20TV%27s%20test%3B%20star%20%3B%3B%20%27%27%20--%20testagain.%2C%20comma.%20%3C%2F%3E";
一切工作正常,但用戶的可讀性非常差。
我需要解碼嗎?如果我解碼了,那麼恐怕會導致xss攻擊?
請任何建議。
我不會使用'encodeURIComponent'來轉義字符串,它會替換的東西的數量是超級殺傷力。看看這個問題/答案:http://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript –