Merak Email Server是一个全面的办公室局域网或Internet通讯邮件解决方案。 为了防止在HTML邮件中执行JavaScript和VBScript代码并过滤掉不希望的HTML标签,Merak邮件服务器WebMail模块的cleanHTML()函数会对HTML邮件执行过滤。从462行到482行,cleanHTML()函数删除或更改了各种恶意关键字,包括删除所有以on开始的属性(如onmouseover、onload等),并将javascript和vbscript重写为noscript。之后在485行,cleanHTML()函数彻底的删除了邮件中的各种HTML标签: $string = preg_replace('</*(meta|xml|blink|link|embed|object|iframe| frame|frameset|ilayer|layer|bgsound)[^>]*>#i',"",$string); 在之前过滤掉的关键字之间注入这些HTML标签,cleanHTML()函数就无法识别,之后该函数删除HTML标签时关键字会再次生效。 另外一种绕过过滤的方法是使用16进制的HTML实体。cleanHTML()函数在459行对输入字符串进行一次解码: $string = html_entity_decode($string, ENT_COMPAT, "UTF-8"); 通过双重编码输入,所有用于过滤的正则表达式在第一次解码后也无法识别出恶意的内容。
Merak Email Server是一个全面的办公室局域网或Internet通讯邮件解决方案。 为了防止在HTML邮件中执行JavaScript和VBScript代码并过滤掉不希望的HTML标签,Merak邮件服务器WebMail模块的cleanHTML()函数会对HTML邮件执行过滤。从462行到482行,cleanHTML()函数删除或更改了各种恶意关键字,包括删除所有以on开始的属性(如onmouseover、onload等),并将javascript和vbscript重写为noscript。之后在485行,cleanHTML()函数彻底的删除了邮件中的各种HTML标签: $string = preg_replace('</*(meta|xml|blink|link|embed|object|iframe| frame|frameset|ilayer|layer|bgsound)[^>]*>#i',"",$string); 在之前过滤掉的关键字之间注入这些HTML标签,cleanHTML()函数就无法识别,之后该函数删除HTML标签时关键字会再次生效。 另外一种绕过过滤的方法是使用16进制的HTML实体。cleanHTML()函数在459行对输入字符串进行一次解码: $string = html_entity_decode($string, ENT_COMPAT, "UTF-8"); 通过双重编码输入,所有用于过滤的正则表达式在第一次解码后也无法识别出恶意的内容。