HTTP、HTML 和 XML 编码和“安全”字符的操作
以下操作适用于请求或响应中的 HTML 数据和 POST 正文中的 XML 数据的编码。
.HTML_XML_SAFE: 将特殊字符转换为 XML 安全格式,如以下示例所示:左向角括号 (<) 转换为 < 右向角括号 (>) 转换为 > 和符号 (&) 转换为 & 此操作可防止跨站点脚本攻击。转换后的文本的最大长度为 2048 字节。这是一个只读操作。
应用转换后,您在表达式中指定的其他运算符将应用于所选文本。以下是一个例子:
http.req.url.query.html_xml_safe. contains(“myQueryString”)
.HTTP_HADER_SAFE: 将输入文本中的所有新行 (‘n’) 字符转换为 ‘%0A’,以便在 HTTP 标头中安全使用输入。此操作可防止响应分割攻击。
转换后的文本的最大长度为 2048 字节。这是一个只读操作。
.HTTP_URL_SAFE: 将不安全的 URL 字符转换为 ‘%xx’ 值,其中“xx”是输入字符的基于十六进制的表示形式。例如,和符号 (&) 在 URL 安全编码中表示为 %26。转换后的文本的最大长度为 2048 字节。这是一个只读操作。下面是 URL 安全字符。所有其他都是不安全的:
- 字母数字字符:a-z、A-Z、0-9
- 阿斯泰里克斯:*
- & 符号:“&”
- 在符号:“@”
- 冒号:“:”
- 逗号:“,”
- 美元:“$”
- 点:“。“
- 等于:“=”
- 感叹号:“!“
- 连字符:“-”
- 打开和关闭括号:“(“,“)”
- 百分比:“%”
- 加:“+”
- 分号:“;”
- 单引用:“’”
- 斜线:“/”
- 问号:“?“
- 蒂尔德:“~”
- 下划线:“_”
.MARK_SAFE: 在不应用任何类型的数据转换的情况下将文本标记为安全。
.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)
.SET_TEXT_MODE(PLUS_AS_SPACE|NO_PLUS_AS_SPACE): 指定如何处理加号字符 (+)。PLUS_AS_SPACE 选项将加号字符替换为空格。例如,文本“你好 + 世界”变成“你好世界。“ NO_PLUS_AS_SPACE 选项会保留加上字符。
.SET_TEXT_MODE(BACKSLASH_ENCODED|NO_BACKSLASH_ENCODED): 指定是否对由表示的文本对象执行反斜杠解码
。 如果指定了反斜拉什编码,则 SET_TEX_MODE 运算符对文本对象执行以下操作:
- 所有匹配的“XXX”将被字符“Y”替换(其中 XXX 表示八进制系统中的一个数字,Y 表示相当于 XXX 的 ASCII)。此类编码的八进制值的有效范围为 0 到 377。例如,编码的文本 http\72// 和 http\072// 都将被解码为
,其中冒号 (:) 是八进制值“72”的 ASCII 等效值。 - 所有出现的“xHH”将被字符“Y”替换(HH 表示十六进制系统中的一个数字,Y 表示 HH 的 ASCII 等效值。例如,编码的文本“http\x3a//”将被解码为
,其中冒号 (:) 是十六进制值“3a”的 ASCII 等效值。 - 所有出现的“UWxx”将被字符序列“YZ”替换(其中 WW 和 XX 代表两个不同的十六进制值,Y 和 Z 代表它们的 ASCII 等值,WW 和 XX 分别是 WW 和 XX。例如,编码的文本“http%u3a2f/”和“http%u003a//”都将被解码为
,其中“3a”和“2f”是两个十六进制值,冒号 (:) 和正斜杠 (“/”) 分别表示其 ASCII 等效值。 - 所有匹配的“b”、“n”、“t”、“f”和“r”都替换为相应的 ASCII 字符。
如果指定了 NO_BACHASH 编码,则不会对文本对象执行反斜杠解码。
- 所有匹配的“XXX”将被字符“Y”替换(其中 XXX 表示八进制系统中的一个数字,Y 表示相当于 XXX 的 ASCII)。此类编码的八进制值的有效范围为 0 到 377。例如,编码的文本 http\72// 和 http\072// 都将被解码为
.SET_TEXT_MODE(BAD_ENCODE_RAISE_UNDEF|NO_BAD_ENCODE_RAISE_UNDEF): 如果设置了 URLENCODED 模式或 BACKSLASH_ENCODED 模式,并且在由表示的文本对象中遇到与指定编码模式对应的错误编码,则执行关联的未定义操作
。 如果指定了 NO_BAD_ENCODE_RAISE_UNDEF,则当在由表示的文本对象中遇到错误编码时,将不会执行关联的未定义操作
。