ADC

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

以下の操作は、リクエストまたはレスポンスの HTML データと POST ボディの XML データのエンコーディングで動作します。

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

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

    変換を適用すると、エクスプレッションで指定する追加の演算子が、選択したテキストに適用されます。以下は一例です。

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

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

    この操作により、応答分割攻撃を防ぐことができます。

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

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

    URL セーフ文字は次のとおりです。他のすべては安全ではありません。

    • 英数字:a-z、A-Z、0-9
    • Asterix: “*”
    • アンパサンド:「&」
    • アットサイン:「@」
    • コロン:「:」
    • カンマ:「,」
    • ドル:「$」
    • Dot: “.”
    • 等しい:「=」
    • Exclamation mark: “!”
    • ハイフン:「-」
    • 開括弧と閉じ括弧:「(「,「)」
    • パーセント:「%」
    • プラス:「+」
    • セミコロン:「;」
    • 一重引用符:「’」
    • スラッシュ:「/」
    • 疑問符:「?」
    • チルダ:「~」
    • アンダースコア:「_」
  • <text>.MARK_SAFE:

    いかなる種類のデータ変換も適用せずに、テキストを安全とマークします。

  • <text>.SET_TEXT_MODE(URLENCODED|NOURLENCODED)

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

    次の例では、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 オプションはプラス文字を空白に置き換えます。たとえば、「ハロー+ワールド」というテキストは「ハローワールド」になります。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 です。たとえば、エンコードされたテキスト「http\ 72//」と「http\ 072//」は両方ともに<http://>にデコードされます。ここで、コロン (:) は ASCII で 8 進数値「72」に相当します。
    • 出現する「\xHH」はすべて文字「Y」に置き換えられます(HH は 16 進法の数字を表し、Y は HH と同等の ASCII を表します)。たとえば、エンコードされたテキスト「http\ x3a//」は<http://>にデコードされます。ここで、コロン (:) はASCIIで16進値の「3a」に相当します。
    • 出現する「\ 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 |NO_BAD_ENCODE_RAISE_UNDEF):

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

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

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

この記事の概要