描述:检查输入数据是否为有效的UTF-8字符串。


例:


#确保所有请求参数仅包含有效的UTF-8

SecRule ARGS "@validateUtf8Encoding" "id:193"


使用@validUtf8Encoding运算符可能会遇到以下问题:


字节不够:UTF-8支持两个,三个,四个,五个和六个字节的编码。ModSecurity将查找字符中缺少一个或多个字节的情况。

无效字符:大多数字符中的两个最高有效位应固定为0x80。一些攻击技术使用不同的值作为规避技术。

超长字符:ASCII字符直接映射到UTF-8,这意味着ASCII字符同时是一个UTF-8字符。但是,在UTF-8中,许多ASCII字符也可以用两个,三个,四个,五个和六个字节进行编码。在较新版本的Unicode中,这已不再合法,但许多较旧的实现仍然支持它。使用超长UTF-8字符来绕过防火墙的做法很常见。

备注:

大多数但不是所有应用程序都使用UTF-8。如果您正在处理一个应用程序,验证所有请求参数都是有效的UTF-8字符串是防止使用各种UTF-8弱点的一些规避技术的好方法。如果在不使用UTF-8的应用程序中使用此运算符,则可能出现误报。

许多Web服务器还允许在请求URI中使用UTF-8。如果是,您可以使用@validateUtf8Encoding验证请求URI。



Created with the Personal Edition of HelpNDoc: Easy EPub and documentation editor