WAF URL 截断处理:超过最大长度时如何添加省略号
WAF URL 截断处理:超过最大长度时如何添加省略号
本文将解释以下代码片段,并说明当URL长度超过最大长度 WAF_WL_LOG_MAX 时,如何截断URL并添加省略号的逻辑。
int i = 0;
int out_len = 0;
if (url_len > WAF_WL_LOG_MAX) {
for (i = 1; i < 4; i++) {
if (is_utf8_chinese_start(url[WAF_WL_LOG_MAX-i])) {
out_len = WAF_WL_LOG_MAX-i-1;
strlcpy(out_url, url, out_len-3);
strcat(out_url, "...");
WAF_DBG("\nurl 1, url : [%s]
", out_url);
goto err;
}
}
out_len = WAF_WL_LOG_MAX;
strlcpy(out_url, url, out_len-3);
strcat(out_url, "...");
WAF_DBG("\nurl 2, url : [%s]
", out_url);
goto err;
}
out_len = WAF_WL_LOG_MAX;
strlcpy(out_url, url, out_len);
err:
WAF_DBG("\nurl for log, url : [%s]
", out_url);
return 0;
逻辑解释
-
判断 URL 长度: 首先,代码判断 URL 的长度
url_len是否超过最大长度WAF_WL_LOG_MAX。 -
查找中文字符: 如果 URL 长度超过了最大长度,代码会从 URL 末尾向前查找中文字符。它会从倒数第 1 个字符开始,判断该字符是否为中文字符的起始字节。如果是,则将
out_len设置为该字符前面的位置,并截取 URL 的前out_len - 3个字符,并在末尾添加省略号。否则,继续向前查找倒数第 2、3 个字符,直到找到中文字符或者尝试了 3 个字符。 -
截取并添加省略号: 如果没有找到中文字符,代码会将
out_len设置为WAF_WL_LOG_MAX,并截取 URL 的前WAF_WL_LOG_MAX - 3个字符,并在末尾添加省略号。 -
直接截取: 如果 URL 长度小于或等于
WAF_WL_LOG_MAX,代码会直接将out_len设置为WAF_WL_LOG_MAX,并截取 URL 的前WAF_WL_LOG_MAX个字符。
总结
这段代码实现了 WAF 中常见的 URL 截断功能,通过优先查找中文字符,尽可能保证截断后的 URL 的完整性和可读性。如果 URL 中没有中文字符,则会直接截取前 WAF_WL_LOG_MAX 个字符。
注意: 该代码使用 is_utf8_chinese_start 函数来判断字符是否为中文字符的起始字节。这个函数需要根据实际的字符编码来实现。
原文地址: https://www.cveoy.top/t/topic/nf4E 著作权归作者所有。请勿转载和采集!