javascript过滤危险脚本方法

下面是他们的字符串规则:
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)*\);?
了解他们的规则后,抓虫行动就水到渠成。

抓虫1

function kickBug(str) {
return str.replace(/\s*/ig,"");
}

a {
height:expression(alert('hei'));
}

抓虫1

function kickBug(str) {
return str.replace(/\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);
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

test

抓虫2

function kickBug(str) {
return str.replace(/]*\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);
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

test

抓虫3

function kickBug(str) {
return str.replace(/]*\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);
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

expression()
test

抓虫4

function kickBug(str) {
return str.replace(/]*\s*style\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*style\s*=\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);
}

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

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

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

(0)

相关推荐

  • javascript实现划词标记+划词搜索功能

    复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  <html>  <head>  <title>Untitled Document</title>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312"

  • javascript 屏蔽鼠标键盘的几段代码

    //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键  function KeyDown(){  if ((window.event.altKey)&&  ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←  (window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 →  alert("不准你使用ALT+方向键前进或后退网页!");  event.returnValue=false; 

  • 在textarea中屏蔽js的某个function的javascript代码

    有一个textarea,我想在这焦点在这个textarea中的时候屏蔽某个function,      就是使这个function失效,移出焦点后重新使其有效,请问该怎样实现??? 1楼 在你的那个函数里通过   document.activeElement   得到当前网页聚焦的那个控件,   判断这个若是这个   textarea   则跳出不执行本函数 2楼 楼上正解,向meizz学习 3楼 to   meizz(梅花雪)        我是用      document.activeEl

  • JavaScript屏蔽指定区域内右键菜单

    [把鼠标放在这里单击右键试试] function click() { if(event.button == 2) { alert("右键被屏蔽"); } } document.getElementById("abc").onmousedown=click [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • JavaScript 关键字屏蔽实现函数

    复制代码 代码如下: <script language="javascript1.2"><!-- function test() { if((a.b.value.indexOf ("***") == 0)||(a.b.value.indexOf ("****") == 0)){ alert(":)"); a.b.focus(); return false;} } // --></script>

  • JavaScript实现自动对页面上敏感词进行屏蔽的方法

    本文实例讲述了JavaScript实现自动对页面上敏感词进行屏蔽的方法.分享给大家供大家参考.具体如下: <html> <head> <title>Bad Words Example</title> <script type="text/javascript"> function filterText(sText) { var reBadWords = /badword|anotherbadword/gi; return sT

  • 实用javaScript技术-屏蔽类

    一.屏蔽键盘所有键<script language="javascript"><!--function document.onkeydown(){event.keyCode = 0;event.returnvalue = false;}--></script> 二.屏蔽鼠标右键 在body标签里加上oncontextmenu=self.event.returnvalue=false 或者:<script language="javas

  • javascript屏蔽右键代码

    javascript屏蔽右键 复制代码 代码如下: <span style="font-size:18px;color:#ff0000;"><strong>document.oncontextmenu=function(e){ return false; };</strong></span>

  • 屏蔽鼠标右键、Ctrl+n、shift+F10、F5刷新、退格键 的javascript代码

    //屏蔽鼠标右键.Ctrl+n.shift+F10.F5刷新.退格键  function KeyDown(){  if ((window.event.altKey)&&  ((window.event.keyCode==37)|| //屏蔽 Alt+ 方向键 ←  (window.event.keyCode==39))){ //屏蔽 Alt+ 方向键 →  alert("不准你使用ALT+方向键前进或后退网页!");  event.returnValue=false; 

  • javascript实现网页屏蔽Backspace事件,输入框不屏蔽

    下面通过javascript代码实现网页屏蔽Backspace事件,输入框不屏蔽,具体代码如下: document.onkeydown = function (e) { var code; if (!e){ var e = window.event;} if (e.keyCode){ code = e.keyCode;} else if (e.which){ code = e.which;} //BackSpace 8; if ( (event.keyCode == 8) && ((eve

  • JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法

    每个人都讨厌广告.看电视.看电影.看优酷.看网页时,对满天飞的广告也是深恶痛绝.广告是一个不招人喜欢的东西.但是,对一个中小网站站长/博客主来说,广告几乎是唯一的能成支持网站/博客正常运转的资金来源.如果一个博客主,只是无私发布稿件,能坚持几年的,很少.大多数慢慢失去了热情. 火狐浏览器和谷歌浏览器里都有能够屏蔽页面给广告的插件,最有名的是AdBlock和AdBlock Plus.前几天,我做一个统计,看看浏览网站的用户中有多少人使用了AdBlock插件,发现这个数目竟然有总浏览人数的1/5.

随机推荐