ADC

HTTP、HTML、XML エンコーディングおよび「安全」文字の操作

以下の操作は、リクエストまたはレスポンス内の HTML データのエンコードと、POST 本文の XML データを使用します。

  • <text>.HTML_XML_SAFE: 次の例のように、特殊文字を XML セーフ形式に変換します。

    左向きの山括弧 (<) は < に変換されます < 右向きの山括弧 () は > アンパサンド (&)に変換されます & この操作は、クロスサイトスクリプティング攻撃から保護します。変換されたテキストの最大長は 2048 バイトです。これは読み取り専用の操作です。

    変換を適用すると、式で指定した追加の演算子が、選択したテキストに適用されます。次に例を示します。

    html_xml_safe.には(「myQueryString」)が含まれています。

  • <text>.HTTP_HEADER_SAFE: 入力テキストのすべての改行 (‘n’) 文字を ‘%0A’ に変換し、入力を HTTP ヘッダーで安全に使用できるようにします。

    この操作は、応答分割攻撃から保護します。

    変換されたテキストの最大長は 2048 バイトです。これは読み取り専用の操作です。

  • <text>.HTTP_URL_SAFE: 安全でないURL文字を ‘%xx’ 値に変換します。ここで、「xx」は入力文字の 16 進数ベースの表現です。たとえば、アンパサンド (&) は、URL セーフエンコードでは%26 と表されます。変換されたテキストの最大長は 2048 バイトです。これは読み取り専用の操作です。

    以下は、URLセーフ文字です。その他はすべて安全ではありません:

    • 英数字:a ~ z、A ~ Z、0 ~ 9
    • アスタリスク:「*」
    • アンパサンド:「&」
    • アットマーク:「@」
    • コロン:「:」
    • カンマ:「,」
    • ドル:「$」
    • ドット:「. 」
    • 等しい:「=」
    • 感嘆符:「! 」
    • ハイフン:「-」
    • 左かっこ:「(“, “)」
    • パーセント:「%」
    • プラス:「+」
    • セミコロン:「;」
    • 一重引用符:「’」
    • スラッシュ:「/」
    • 疑問符:「? 」
    • チルダ:「~」
    • アンダースコア:「_」
  • <text>.MARK_SAFE:

    任意のタイプのデータ変換を適用せずに、テキストを安全としてマークします。

  • <text>.SET_TEXT_MODE (URLENCODED|NOURLENCODED)

    バイトストリーム内のすべての%HHエンコーディングを変換します。この操作は、(バイトではなく)文字で動作します。デフォルトでは、1 バイトは ASCII エンコーディングの文字を表します。ただし、URLENCODED モードを指定すると、3 バイトで文字を表すことができます。

    次の例では、PREFIX (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 オプションは、プラス文字を空白に置き換えます。たとえば、テキスト「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は8進数の数字を表し、YはXXXに相当するASCIIを表します)。このタイプのエンコーディングの 8 進値の有効範囲は 0 ~ 377 です。たとえば、エンコードされたテキスト「http72//」と「http072//」の両方がにデコードされます。コロン (:) は<http://>、8 進値「72」に相当する ASCII 値です。
    • 「xHH」のすべての出現は、文字「Y」に置き換えられます(HH は 16 進数の数値を表し、Y は HH に相当する ASCII を表します。たとえば、エンコードされたテキスト「httpx3a//」はにデコードされます。コロン(:)は<http://>、16 進値「3a」に相当する ASCII です。
    • 「uWWXX」のすべての出現は、文字シーケンス「YZ」に置き換えられます(WW と XX は 2 つの異なる 16 進値を表し、Y と Z は WW と XX にそれぞれ相当する ASCII 値を表します。たとえば、エンコードされたテキスト「http%u3a2f/」と「http%u003a//」は両方とも<http://>にデコードされます。ここで、「3a」と「2f」は 2 つの 16 進値で、コロン(:)とスラッシュ(「/」)はそれぞれの ASCII 値を表します。をそれぞれ指定します。
    • 「b」、「n」、「t」、「f」、「r」のすべての出現は、対応する ASCII 文字に置き換えられます。

    NO_BACKSLASH_ENCODED が指定されている場合、テキストオブジェクトに対してバックスラッシュのデコードは実行されません。

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

    URLENCODED モードまたは BACKSLASH_ENCODED モードが設定されていて、<text>で指定されたエンコーディングモードに対応する不正なエンコーディングがで表されるテキストオブジェクトで検出された場合、関連付けられた未定義のアクションを実行します 。

    NO_BAD_ENCODE_RAISE_UNDEF が指定されている場合、<text>によって表されるテキストオブジェクトで不正なエンコーディングが検出された場合、関連付けられた未定義のアクションは実行されません 。

HTTP、HTML、XML エンコーディングおよび「安全」文字の操作

この記事の概要