簡體   English   中英

如何處理JavaScript中可能的HTML編碼值

[英]How to handle possibly HTML encoded values in javascript

我無法確定輸入的內容是否是HTML編碼的。 我該如何處理? 我也有可用的jQuery。

function someFunction(userInput){
    $someJqueryElement.text(userInput);
}

// userInput "<script>" returns "&lt;script&gt;", which is fine
// userInput "&lt;script&gt;" returns &amp;lt;script&amp;gt;", which is bad

我可以避免轉義“& & ,但是這樣做有什么風險呢? 很感謝任何形式的幫助!

重要說明:此用戶輸入不在我的控制范圍內。 它從外部服務返回,有人可能會對其進行篡改並避免該服務本身提供的html轉義。

您確實需要確保避免這些情況,因為它會引入難以預測的條件。

嘗試向該函數添加其他變量輸入。

function someFunction(userInput, isEncoded){
    //Add some conditional logic based on isEncoded
    $someJqueryElement.text(userInput);
}

如果查看fckEditor之類的產品,則可以選擇編輯源代碼或使用RTF編輯器。 這避免了自動編碼檢測的需要。

如果您仍然堅持自動檢測html編碼字符,我建議使用index of來驗證某些關鍵短語是否存在。

str.indexOf('&lt;') !== -1

上面的示例將檢測<字符。

~~~編輯后在此行下方添加了新文本。~~~

最后,我建議您看一下這個答案 他們建議使用解碼功能並檢測長度。

var string = "Your encoded &amp; decoded string here"

function decode(str){
    return decodeURIComponent(str).replace(/&lt;/g,'<').replace(/&gt;/g,'>');
}

if(string.length == decode(string).length){
    // The string does not contain any encoded html.
}else{
    // The string contains encoded html.
}

再次,這仍然存在用戶通過輸入那些經過特殊編碼的字符來弄亂該過程的問題,但這就是html編碼。 因此,一旦出現這些字符序列之一,就應該假定html編碼。

在將不受信任的輸入連接成HTML之類的結構化語言之前,必須始終正確對其進行編碼。

否則,您將啟用XSS之類的注入攻擊。

如果輸入應包含HTML格式,則應使用消毒劑庫剝離所有潛在的不安全標記和屬性。

您還可以使用正則表達式/<|>|&(?![az]+;)檢查字符串是否包含任何非編碼字符;例如, 但是,您無法將已編碼的字符串與談論編碼的未編碼字符串區分開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM