js防止注入實現


今天其他項目組同事過來問過我是否遇到過這種情況?

場景:在項目input框中輸入含有script標簽包含的腳本,提交后卻意外的被執行了。(所有惡意攻擊的腳本標簽)

問題:HTML沒有進行轉義的發送,會導致回顯或者提交的時候html語義無法解釋 < 和 > 符號,認為其是標簽。故進行標簽模式的渲染。

解決:每次發送前對輸入的字符串進行特殊符號的轉義,避免html標簽符號和特殊符號給解釋器造成沖突。從而導致XSS的惡意腳本攻擊。

 

下面附上防止js腳本注入的源碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <textarea id="textarea" style="width:300px;height:100px;"></textarea>
        <button id="getValue" onclick="getVal()">獲取</button>
        <button id="setValue" onclick="setVal()">賦值</button>
    </body>
    <script>
        var $ = document.getElementById('textarea');
        var _val = '';
        function getVal(){
            _val = htmlEncode ($.value);
            alert(_val);
            $.value = '';
        }
        function setVal(){
            $.value = htmlDecode (_val);
        }
        //轉義  元素的innerHTML內容即為轉義后的字符
        function htmlEncode (str) {
          var ele = document.createElement('span');
          ele.appendChild( document.createTextNode( str ) );
          return ele.innerHTML;
        }
        //解析 
        function htmlDecode (str) {
          var ele = document.createElement('span');
          ele.innerHTML = str;
          return ele.textContent;
        }
    </script>
</html>

 

使用方式

1、將XSS攻擊的腳本語言輸入到textarea文本域中,點擊獲取會彈出其轉義后的字符串。

2、點擊賦值會將轉移后的字符串賦值給textarea文本域的value。從而html解釋器解釋特殊字符,並顯示出用戶想要顯示的特殊語義。

 

有問題歡迎廣大代碼愛好者交流,互相學習。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM