ADC

对 HTTP、HTML 和 XML 编码以及“安全”字符的操作

以下操作适用于请求或响应中的 HTML 数据和 POST 正文中的 XML 数据的编码。

  • <text>.HTML_XML_SAFE: 将特殊字符转换为 XML 安全格式,如以下示例所示:

    左向角括号 (<) 转换为 < 右向角括号 (>) 转换为 > 和符号 (&) 转换为 & 此操作可防止跨站点脚本攻击。转换后的文本的最大长度为 2048 字节。这是只读操作。

    应用转换后,您在表达式中指定的其他运算符将应用于所选文本。以下是一个例子:

    http.req.url.query.html_xml_safe. contains(“myQueryString”)

  • <text>.HTTP_HEADER_SAFE: 将输入文本中的所有新行 (‘\n’) 字符转换为 %0A,以便启用要在 HTTP 标头中安全使用的输入。

    此操作可防范响应拆分攻击。

    转换后的文本的最大长度为 2048 字节。这是只读操作。

  • <text>.HTTP_URL_SAFE: 将不安全的 URL 字符转换为 %xx 值,其中“xx”是基于十六进制的输入字符的表示形式。例如,在 URL 安全编码中,和号 (&) 表示为 %26。转换后的文本的最大长度为 2048 字节。这是只读操作。

    以下是 URL 安全字符。所有其他都不安全:

    • 字母数字字符:a-z、A-Z、0-9
    • 阿斯特里克斯:“*”
    • 和号:“&”
    • at 标志:“@”
    • 冒号:“:”
    • 逗号:“,”
    • 美元:“$”
    • 点:”。“
    • 等于:“=”
    • 感叹号:“!“
    • 连字符:“-”
    • 打开和关闭圆括号:“(“,“)”
    • 百分比:“%”
    • 另外:“+”
    • 分号:“;”
    • 单引号:“’”
    • 斜杠:“/”
    • 问号:“?“
    • 波浪号:“~”
    • 下划线:“_”
  • <text>.MARK_SAFE:

    在不应用任何类型的数据转换的情况下将文本标记为安全。

  • <text>.SET_TEXT_MODE(URLENCODED|NOURLENCODED)

    转换字节流中的所有 %HH 编码。此操作适用于字符(不是字节)。默认情况下,单字节表示 ASCII 编码中的字符。但是,如果您指定 URLENCODED 模式,则三个字节可以代表一个字符。

    在以下示例中,PREFIX (3) 操作选择目标中的前 3 个字符。

    http.req.url.hostname.prefix(3)

    在以下示例中,NetScaler 可以从目标中选择最多 9 个字节:

    http.req.url.hostname.set_text_mode(urlencoded).prefix(3)

  • <text>.SET_TEXT_MODE(PLUS_AS_SPACE|NO_PLUS_AS_SPACE):

    指定如何处理加号字符 (+)。PLUS_AS_SPACE 选项用空格替换加号字符。例如,文本“hello+world”变成“您hello world”。NO_PLUS_AS_SPACE 选项使加号字符保持不变。

  • <text>.SET_TEXT_MODE(BACKSLASH_ENCODED|NO_BACKSLASH_ENCODED):

    指定是否对由 <text> 表示的文本对象执行反斜杠解码。

    如果指定了 BACKSLASH_ENCODED,则 SET_TEXT_MODE 运算符对文本对象执行以下操作:

    • 所有出现的“\ XXX”都将替换为字符“Y”(其中 XXX 代表八进制系统中的一个数字,Y 代表 XXX 的 ASCII 等价物)。这种编码类型的八进制值的有效范围为 0 到 377。例如,编码后的文本“http\ 72//”和 http\ 072//”都将被解码为 <http://>,其中冒号 (:) 是等同于八进制值“72”的 ASCII。
    • 所有出现的“\ xHH”都将替换为字符“Y”(HH 代表十六进制系统中的数字,Y 表示 HH 的 ASCII 等效值)。例如,编码后的文本“http\ x3a//”将被解码为 <http://>,其中冒号 (:) 是等同于十六进制值“3a”的 ASCII。
    • 所有出现的“\ uWWxx”都将替换为字符序列“YZ”(其中 WW 和 XX 代表两个不同的十六进制值,Y 和 Z 分别代表它们的 ASCII 等效值 WW 和 XX。例如,编码后的文本“http%u3a2f/”和“http%u003a//”都将被解码为 <http://>,其中“3a”和“2f”是两个十六进制值,冒号 (:) 和正斜杠 (“/”) 分别表示它们的 ASCII 等价物。
    • 所有出现的“\ b”、“\ n”、“\ t”、“\ f”和“\ r”都将替换为相应的 ASCII 字符。

    如果指定了 NO_BACKSLASH_ENCODED,则不对文本对象执行反斜杠解码。

  • <text>.SET_TEXT_MODE(BAD_ENCODE_RAISE_UNDEF|NO_BAD_ENCODE_RAISE_UNDEF):

    如果设置了 URLENCODED 或 BACKSLASH_ENCODED 模式,并且在 <text> 表示的文本对象中遇到与指定编码模式对应的错误编码,则执行相关的未定义操作。

    如果指定了 NO_BAD_ENCODE_RAISE_UNDEF,则在由 <text> 表示的文本对象中遇到错误的编码时,将不会执行相关的未定义操作。

对 HTTP、HTML 和 XML 编码以及“安全”字符的操作

在本文中