1、當(dāng) HTML 字符串包含一個(gè)標(biāo)記為 defer 的 script 標(biāo)簽(<script defer>…</script>)時(shí),如 innerHTML 屬性處理不當(dāng),在 Internet Explorer 上會(huì)引起腳本注入攻擊。 2、設(shè) " /> 欧美猛妇色xxxxxbbbb,久久88色综合色鬼,久久最新网址

一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

js innerHTML 的一些問(wèn)題的解決方法

然而,你需要知道 innerHTML 有一些自身的問(wèn)題: 

1、當(dāng) HTML 字符串包含一個(gè)標(biāo)記為 defer 的 script 標(biāo)簽(<script defer>…</script>)時(shí),如 innerHTML 屬性處理不當(dāng),在 InterNET Explorer 上會(huì)引起腳本注入攻擊。 
2、設(shè)置 innerHTML 將會(huì)破壞現(xiàn)有的已注冊(cè)了事件處理函數(shù)的 HTML 元素,會(huì)在某些瀏覽器上引起內(nèi)存泄露的潛在危險(xiǎn)。 

還有幾個(gè)其他次要的缺點(diǎn),也值得一提的: 

1、你不能得到剛剛創(chuàng)建的元素的引用,需要你手動(dòng)添加代碼才能取得那些引用(使用 DOM APIs)。 
2、你不能在所有瀏覽器的所有 HTML 元素上設(shè)置 innerHTML 屬性(比如,InterNET Explorer 不允許你在表格的行元素上設(shè)置innerHTML 屬性)。 
我更關(guān)注與使用 innerHTML 屬性相關(guān)的安全和內(nèi)存問(wèn)題。很顯然,這不是新問(wèn)題,已經(jīng)有能人圍繞這些中的某些問(wèn)題想出了方法。 

       Douglas Crockford 寫(xiě)了一個(gè) 清除函數(shù) ,該函數(shù)負(fù)責(zé)中止由于 HTML 元素注冊(cè)事件處理函數(shù)引起的一些循環(huán)引用,并允許垃圾回收器(garbage collector)釋放與這些 HTML 元素關(guān)聯(lián)的內(nèi)存。 

       從 HTML 字符串中移除 script 標(biāo)簽并不像看上去那么容易。一個(gè)正則表達(dá)式可以達(dá)到預(yù)期效果,雖然很難知道是否覆蓋了所有的可能性。這里是我的解決方案: 
/<script[^>]*>[/S/s]*?<//script[^>]*>/ig
現(xiàn)在,讓我們將這兩種技術(shù)結(jié)合在到一個(gè)單獨(dú)的 setInnerHTML 函數(shù)中,并將 setInnerHTML 函數(shù)綁定到 YUI 的 YAHOO.util.Dom 上:
YAHOO.util.Dom.setInnerHTML = function (el, html) {
    el = YAHOO.util.Dom.get(el);
    if (!el || typeof html !== 'string') {
        return null;
    } 
    // 中止循環(huán)引用
    (function (o) {

        var a = o.attributes, i, l, n, c;
        if (a) {
            l = a.length;
            for (i = 0; i < l; i += 1) {
                n = a[i].name;
                if (typeof o[n] === 'function') {
                    o[n] = null;
                }
            }
        }

        a = o.childNodes;

        if (a) {
            l = a.length;
            for (i = 0; i < l; i += 1) {
                c = o.childNodes[i];

                // 清除子節(jié)點(diǎn)
                arguments.callee(c);

                // 移除所有通過(guò)YUI的addListener注冊(cè)到元素上所有監(jiān)聽(tīng)程序
                YAHOO.util.Event.purgeElement(c);
            }
        }

    })(el);

    // 從HTML字符串中移除script,并設(shè)置innerHTML屬性
    el.innerHTML = html.replace(/<script[^>]*>[/S/s]*?<//script[^>]*>/ig, "");

    // 返回第一個(gè)子節(jié)點(diǎn)的引用
    return el.firstChild;
};

如果此函數(shù)還應(yīng)有其他任何內(nèi)容或者在正則表達(dá)式中遺漏了什么,請(qǐng)讓我知道。 

       很明顯,在網(wǎng)頁(yè)上還有很多其他注入惡意代碼的方法。setInnerHTML 函數(shù)僅能在所有 A-grade 瀏覽器上規(guī)格化 <script> 標(biāo)簽的執(zhí)行行為。如果你準(zhǔn)備注入不能信任的 HTML 代碼,務(wù)必首先在服務(wù)器端過(guò)濾,已有許多庫(kù)可以做到這點(diǎn)。

JavaScript技術(shù)js innerHTML 的一些問(wèn)題的解決方法,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 91国在线产| 欧美videos在线观看 | 欧美色视频网站 | 黄色高清在线观看 | 人人狠狠综合久久亚洲婷婷 | 久草婷婷| 国产aⅴ精品一区二区三区久久 | 欧美精品视 | 啪啪伊人网 | 加勒比东洋精品映画防屏蔽 | 国内久久久 | 美女被性调教视频在线观看 | 精品综合久久88色鬼首页 | 91视频免费观看 | 国产小视频在线高清播放 | 四虎最新紧急入口 | 日韩精品中文字幕一区二区三区 | 国产精品第一页在线 | 99精品免费观看 | 一区在线看 | 美女性视频网站 | 伊人久久影院大香线蕉 | 亚洲视频一二 | 91欧美激情一区二区三区成人 | 成人精品视频一区二区三区 | 狠狠色伊人亚洲综合第8页 狠狠色伊人亚洲综合网站l | 中日韩免费视频 | 欧美一区二区激情视频 | 久久综合久久伊人 | 亚洲精品无码专区在线播放 | 黄篇网站在线观看 | 一级做a爰片性色毛片2021 | 日韩在线一区二区三区免费视频 | 日本伊人久久 | 久久精品国产清自在天天线 | 东北普通话清晰对白 | 国产成人午夜精品5599 | 精品在线免费观看视频 | 久久伊人久久亚洲综合 | 综合五月天堂 | 青青亚洲 |