Citrix ADC

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

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

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

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

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

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

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

    此操作可防止响应分割攻击。

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

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

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

    • 字母数字字符:a-z、A-Z、0-9
    • Asterix:*
    • & 符号:“&”
    • 在符号:“@”
    • 冒号:“:”
    • 逗号:“,”
    • 美元:“$”
    • 点:“。“
    • 等于:“=”
    • 感叹号:“!“
    • 连字符:“-”
    • 打开和关闭括号:“(“,“)”
    • 百分比:“%”
    • 加:“+”
    • 分号:“;”
    • 单引用:“’”
    • 斜线:“/”
    • 问号:“?“
    • 蒂尔德:“~”
    • 下划线:“_”
  • <text>.MARK_SAFE:

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

  • <text>.SET_TEXT_MODE(URLENCODED|NOURLENCODED)

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

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

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

    在以下示例中,Citrix ADC 可以从目标中选择最多 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 选项将加号字符替换为空格。例如,文本“你好 + 世界”变成“你好世界。“ NO_PLUS_AS_SPACE 选项会保留加上字符。

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

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

    如果指定了反斜拉什编码,则 SET_TEX_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 等效值。
    • 所有出现的“UWxx”将被字符序列“YZ”替换(其中 WW 和 XX 代表两个不同的十六进制值,Y 和 Z 代表它们的 ASCII 等值,WW 和 XX 分别是 WW 和 XX。例如,编码的文本“http%u3a2f/”和“http%u003a//”都将被解码为 <http://>,其中“3a”和“2f”是两个十六进制值,冒号 (:) 和正斜杠 (“/”) 分别表示其 ASCII 等效值。
    • 所有匹配的“b”、“n”、“t”、“f”和“r”都替换为相应的 ASCII 字符。

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

  • <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 编码和“安全”字符的操作