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;

逻辑解释

  1. 判断 URL 长度: 首先,代码判断 URL 的长度 url_len 是否超过最大长度 WAF_WL_LOG_MAX

  2. 查找中文字符: 如果 URL 长度超过了最大长度,代码会从 URL 末尾向前查找中文字符。它会从倒数第 1 个字符开始,判断该字符是否为中文字符的起始字节。如果是,则将 out_len 设置为该字符前面的位置,并截取 URL 的前 out_len - 3 个字符,并在末尾添加省略号。否则,继续向前查找倒数第 2、3 个字符,直到找到中文字符或者尝试了 3 个字符。

  3. 截取并添加省略号: 如果没有找到中文字符,代码会将 out_len 设置为 WAF_WL_LOG_MAX,并截取 URL 的前 WAF_WL_LOG_MAX - 3 个字符,并在末尾添加省略号。

  4. 直接截取: 如果 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 函数来判断字符是否为中文字符的起始字节。这个函数需要根据实际的字符编码来实现。

WAF URL 截断处理:超过最大长度时如何添加省略号

原文地址: https://www.cveoy.top/t/topic/nf4E 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录