javascript过滤危险脚本方法


脚本藏身之处不过有四:

  1、<script>标签、<link>标签、<style>标签、iframe标签 2、on开头的标签属性

  3、javascript(vbscript)伪协议

  4、css的epression

  下面是他们的字符串规则:

1、<(script|link|style|iframe)(.|n)*</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((.|n)*);?

了解他们的规则后,抓虫行动就水到渠成。

  运行可以看到效果:

<textarea id="bug" cols="80" rows="16">
<button id="kick">抓虫1</button>
<script>
function kickBug(str) {
return str.replace(/<(script|link|style|iframe)(.|n)*/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)(.|n)*/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({GetProperty(Content)},{GetProperty(Content)}){
return {GetProperty(Content)}.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({GetProperty(Content)},{GetProperty(Content)}){
{GetProperty(Content)} = {GetProperty(Content)}.replace(/&#(6[5-9]|[78][0-9]|9[0789]|1[01][0-9]|12[012]);?/g,function({GetProperty(Content)},{GetProperty(Content)}){return String.fromCharCode({GetProperty(Content)});});
return {GetProperty(Content)}.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({GetProperty(Content)},{GetProperty(Content)}){
{GetProperty(Content)} = {GetProperty(Content)}.replace(/&#(6[5-9]|[78][0-9]|9[0789]|1[01][0-9]|12[012]);?/g,function({GetProperty(Content)},{GetProperty(Content)}){return String.fromCharCode({GetProperty(Content)});});
return {GetProperty(Content)}.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))))

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



相关阅读:
不错的新闻标题颜色效果" target="_blank">不错的新闻标题颜色效果
免安转MySQL服务的启动与停止方法
Ajax兴起, 传统Web框架与狼共舞
关于 .Net 开发下的分布式缓存设计
javaScript DOM方法与属性摘要
Asp.net 控件开发—数据回传
js截取函数(indexOf,join等)
用cssText属性批量操作样式技巧
List the Codec Files on a Computer
在视图中使用递归生成树状结构
js漂浮广告代码,静止浮动与右下角浮动(兼容多浏览器)
SQL Select语句完整的执行顺序
Discuz! 6.0.0到Discuz! 7.0.0升级教程
静态页面的值传递(三部曲)
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 江南,我愿变成你怀中的一枝青莲 机关党工委2004年工作总结和2005年工作思路 忆思友作文200字 下学期工作总结报告 放暑假了2 小学六年级作文500字:它,永远不会像命运低头 未来的电动翅膀 哈哈狗日记 第一次逛动物园 改写《桃花源记》这不是梦是现实650字 女人之离开 二年级数学说课稿——乘法的初步认识 想想就开心作文700字 工厂年度工作计划 读《狼牙山五壮士》有感(转载)作文600字 写给父母的祝福语 想找个女孩爱我 市交通局党组科学发展观分析检查报告 放假了,无聊了…… 经典语录:遇到了就该珍爱,错过了那就释怀 由蚊子叮咬所想到的 大地的话作文900字 经典唯美语录_超经典唯美语句 迷恋它——学乐中国 老磨 神奇种子--胖大海 小学五年级作文500字:“贵妃醉酒记” 2015护士职业生涯规划书 农业局落实全县经济工作会议精神情况汇报 “不善变”的日本人 中学暑假安全保证书 苏少版七年级美术教案第4课 又画又做又印 小学五年级作文600字:奇雨 无心处便是禅 假面乖?!作文450字 我的阶段爱情 矿山毕业实习报告 在校会上的演讲 暖洋洋的初春去拾梦 副处级领导干部三讲教育整改措施五 初三化学教师工作总结(2) 来华商务邀请函 奉送袁高使君诏征赴行在,效曹刘体 “吃货”梅花鹿作文900字 暑假里我学会了什么作文800字 小学五年级作文500字:假如我是上帝 爸爸的爱作文350字 此生,你不死,我不老 不一样的星星 雅加埂-红石-草原

Copyright © 2016 phpStudy |