问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

js用什么函数过滤非法字符防止跨站脚本攻击

发布网友 发布时间:2022-04-24 16:55

我来回答

2个回答

懂视网 时间:2022-04-24 21:17

脚本藏身之处不过有四: 1、<script>标签、<link>标签、<style>标签、iframe标签 2、on开头的标签属性 3、javascript(vbscript)伪协议 4、css的epression

下面是他们的字符串规则:
1、<(script|link|style|iframe)(.| )*</1>s*
2、s*on[a-z]+s*=s*("[^"]+"|'[^']+'|[^s]+)s*(?=>)
3、s*(href|src)s*=s*("s*(javascript|vbscript):[^"]+"|'s*(javascript|vbscript):[^']+'|(javascript|vbscript):[^s]+)s*(?=>)
4、epression((.| )*);?
了解他们的规则后,抓虫行动就水到渠成。

<textarea id="bug" cols="80" rows="16"> 
<button id="kick">抓虫1</button> 
<script> 
function kickBug(str) { 
return str.replace(/<(script|link|style|iframe)(.|
)*/1>s*/ig,""); 
} 
</script> 
<iframe></iframe> 
<link href='test.css'></link> 
<style> 
a { 
height:expression(alert('hei')); 
} 
</style> 
</textarea> 
<button id="kick">抓虫1</button> 
<script> 
function kickBug(str) { 
return str.replace(/<(script|link|style|iframe)(.|
)*/1>s*/ig,""); 
} 
if(!/msie/i.test(navigator.userAgent)){ 
HTMLElement.prototype.__defineGetter__("innerText",function(){ 
return this.textContent; 
}); 
HTMLElement.prototype.__defineSetter__("innerText",function(text){ 
this.textContent = text; 
}); 
} 
document.getElementById("kick").onclick = function() { 
var bug = document.getElementById("bug"); 
bug.innerText = kickBug(bug.innerText); 
} 
</script>


<textarea id="bug" cols="80" rows="5"> 
<a onclick="test(); 
test1()" onblur= 
"test3()">test</a> 
</textarea> 
<button id="kick">抓虫2</button> 
<script> 
function kickBug(str) { 
return str.replace(/<[a-z][^>]*s*on[a-z]+s*=[^>]+/ig,function($0,$1){ 
return $0.replace(/s*on[a-z]+s*=s*("[^"]+"|'[^']+'|[^s]+)s*/ig,""); 
}); 
} 
if(!/msie/i.test(navigator.userAgent)){ 
HTMLElement.prototype.__defineGetter__("innerText",function(){ 
return this.textContent; 
}); 
HTMLElement.prototype.__defineSetter__("innerText",function(text){ 
this.textContent = text; 
}); 
} 
document.getElementById("kick").onclick = function() { 
var bug = document.getElementById("bug"); 
bug.innerText = kickBug(bug.innerText); 
} 
</script>


<textarea id="bug" cols="80" rows="5"> 
<a onclick="test();" href=" 
jAvascript:alert('a')" href="jAvascript:" 
href="vbscript:alert()" 
>test</a> 
</textarea> 
<button id="kick">抓虫3</button> 
<script> 
function kickBug(str) { 
return str.replace(/<[a-z][^>]*s*(href|src)s*=[^>]+/ig,function($0,$1){ 
$0 = $0.replace(/&#(6[5-9]|[78][0-9]|9[0789]|1[01][0-9]|12[012]);?/g,function($0,$1){return String.fromCharCode($1);}); 
return $0.replace(/s*(href|src)s*=s*("s*(javascript|vbscript):[^"]+"|'s*(javascript|vbscript):[^']+'|(javascript|vbscript):[^s]+)/ig,""); 
}); 
} 
if(!/msie/i.test(navigator.userAgent)){ 
HTMLElement.prototype.__defineGetter__("innerText",function(){ 
return this.textContent; 
}); 
HTMLElement.prototype.__defineSetter__("innerText",function(text){ 
this.textContent = text; 
}); 
} 
document.getElementById("kick").onclick = function() { 
var bug = document.getElementById("bug"); 
bug.innerText = kickBug(bug.innerText); 
} 
</script>


<textarea id="bug" cols="80" rows="5"> 
expression() 
<a style="color:expression( 
'red' 
)">test</a> 
</textarea> 
<button id="kick">抓虫4</button> 
<script> 
function kickBug(str) { 
return str.replace(/<[a-z][^>]*s*styles*=[^>]+/ig,function($0,$1){ 
$0 = $0.replace(/&#(6[5-9]|[78][0-9]|9[0789]|1[01][0-9]|12[012]);?/g,function($0,$1){return String.fromCharCode($1);}); 
return $0.replace(/s*styles*=s*("[^"]+(expression)[^"]+"|'[^']+2[^']+'|[^s]+2[^s]+)s*/ig,""); 
}); 
} 
if(!/msie/i.test(navigator.userAgent)){ 
HTMLElement.prototype.__defineGetter__("innerText",function(){ 
return this.textContent; 
}); 
HTMLElement.prototype.__defineSetter__("innerText",function(text){ 
this.textContent = text; 
}); 
} 
document.getElementById("kick").onclick = function() { 
var bug = document.getElementById("bug"); 
bug.innerText = kickBug(bug.innerText); 
} 
</script>

这样调用就可以
k1(k2(k3(k4(str))))

这样就是单纯地过滤脚本而已,所谓过滤“危险脚本”应该是能够判断哪些属于“危险"脚本,不危险的就不过滤才对……那可就难办了,相当于防火墙了。

热心网友 时间:2022-04-24 18:25

test
如:<input type="text" id="txtceshi" /><input type="button" onclick="yanzheng()" value="ceshi" />
<script type="text/javascript">
function yanzheng() {
var ce = txtceshi.value;//获取文本框的值
var ze = /[^0-9]+/; //只能是数字,这里可以在网上找到一些正则替换成你想要的表达式
if (ze.test(ce)) {
alert("数据不合法!");
}
}
</script>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
水浒揭秘贞芸劫张若贞结局 阴茎的大与小有何区别? 男人的生殖气有大有小吗 穿甲弹和破甲弹哪个好 如何从外表区分尾翼稳定脱壳穿甲弹和尾翼稳定破甲弹 穿甲弹、破甲弹和碎甲弹有什么区别?介绍_穿甲弹、破甲弹和碎甲弹有... ...脱壳穿甲弹、乌金穿甲弹、破甲弹都有什么区别? 超前消费还有什么消费 成子湖面临问题 力学试验过程监测 软钢和不锈钢的区别 不锈钢中C含量多有什么影响 C表示不锈钢什么 黑龙军团之皮什么用 不锈钢C型钢的壁厚是多少才标准? 经常坚持跑步会给身体带来什么好处? 304不锈钢C型钢3米一根有多重 魔兽世界沉泥沼泽部落的任务:挑战黑龙军团。这个任务怎么做? 黑上比斯巨兽掉野兽之一吗 孙子兵法吴子兵法等产生于中国古代军事思想的什么 孙子兵法和孙吴兵法有什么区别 孙子兵法 吴子兵法哪个历害? 孙子兵法吴子兵法是我国古代军事思想的代表 吴起战术思想? 《鬼谷子兵法》和《孙膑兵法》、《孙武兵法》、《吴起兵法》以及《曹操兵法》都有什么不同? 孙子吴起列传的吴子兵法 古代两部著名的兵书是哪两部 在我国古代兵法当中,与《孙子兵法》共同并称“军事双璧”的是指哪部兵书? 孙子兵法,吴子兵法(吴起兵法),不要带个人感情,我叫你客观评价一下,各有什么特点? 中国人喜欢去哪些国家淘宝? 我想买一个随身wifi移动的要多少钱 你好,我想买个随身移动wifi请问有些什么套餐多少钱 随身移动wifi怎么用的,多少钱 冠捷AOC3288W多少功率,几小时用1度电? aoc3288显示器怎么样 为什么我的AOCl3288vwH6显示屏在天猫买的,今天用鲁大师检测出来是型号AOC3288 32 如何多开一个? 双卡手机怎么用两个? 怎样在同一部手机上用两个微信!怎么才能下载另一个! 三只松鼠ipo,章燎原百万投入或翻6685倍,今日资本,idg,峰瑞资本又能赚多少 厦门市买买买文化传媒有限公司怎么样? 90后辣妈挪用公司900多万买买买,虚荣心会让一个人变成啥样? 峰瑞资本的介绍 怎么用同一个手机号码申请多个? 厦门买买买文化传媒有限公司怎么样? 兴义汽车抵押贷款,汽车抵押不押车贷款 如何注册同时使用两个 想入股阿斯顿·马丁,吉利买买买,手里的钱能撑起“大众梦”吗? 贵州兴义分期付款买车没有担保人可以吗? 舟谱数据会上市吗