今天其他項目組同事過來問過我是否遇到過這種情況?
場景:在項目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解釋器解釋特殊字符,並顯示出用戶想要顯示的特殊語義。
有問題歡迎廣大代碼愛好者交流,互相學習。
