説明
入力文字列を標準化またはデコードします。
クロスサイトスクリプティング(XSS)は、Web アプリケーションの安全上の欠陥として最も一般的であり、ユーザーの入力データが適切に検証されないままブラウザーに送信されたときに発生します。標準化は、エンコードされる可能性のある文字列を最もシンプルな形にするプロセスです。データの検証の前に、データを標準化する必要があります。canonicalize メソッドは、HTML エンティティ、URL(パーセント)エンコーディング、および JavaScript エンコーディングをデコードできます。canonicalize では、単純なデコードのみならず、次のような様々な手法でエンコードされた入力も処理できます。
複数のエンコーディング
特定のエンコード方式で入力を複数回エンコードするか、エンコーディングをネストする手法。
例:
エンコーディング |
説明 |
< -> < -> &lt; |
HTML エンティティ エンコーディングを使用して複数回エンコード |
< -> %3C -> %253C -> %25253C |
パーセント エンコーディングを使用して複数回エンコード |
\ -> %5C -> %%33%63 |
URL(パーセント)エンコーディングを使用してエンコーディングを複数回ネスト |
エンコーディングの組み合わせ
異なるエンコード方式を使用して入力をエンコードする手法(HTML エンコーディングと URL エンコーディングの両方を使用してエンコードする場合など)。
例:
エンコーディング |
説明 |
< -> < -> &%6ct; |
最初に HTML エンティティ エンコーディングを使用してエンコードし、次にパーセント エンコーディングを使用してエンコード |
< -> %3C -> %&x33;c |
最初に URL(パーセント)エンコーディングを使用してエンコードし、次に HTML エンティティ エンコーディングを使用してエンコードされた 3 をネスト |
複数回エンコード(ネストまたは組み合わせ)されたデータは、通常のユーザーが生成しないデータです。したがって、このような入力データは悪意のあるデータと見なされます。
戻り値
入力文字列をデコードした形式
カテゴリ
表示および書式制御関数
シンタックス
canonicalize(inputString, restrictMultiple, restrictMixed [, throwOnError])
履歴
ColdFusion 11:throwOnError という新しい属性が追加されました。
ColdFusion 10: この関数が追加されました。
関連項目
EncodeForHTML,EncodeForHTMLAttribute, EncodeForJavaScript, EncodeForCSS, EncodeForURL
パラメータ
パラメータ
|
説明
|
inputString
|
必須。エンコードする文字列です。
|
restrictMultiple
|
必須。true に設定すると、複数のエンコードは制限されます。
この引数を true に設定することで、複数のエンコーディングまたはネストされたエンコーディングが検出された場合に入力を制限できます。この引数が true に設定されており、入力が 1 つのエンコード方式で複数回エンコードされるか、ネストされた場合は、エラーが発生します。
|
restrictMixed
|
必須。true に設定すると、混合エンコードは制限されます。
この引数を true に設定することで、組み合わされたエンコーディングが検出された場合に入力を制限できます。この引数が true に設定されており、組み合わされたエンコーディングにより入力がエンコードされた場合は、エラーが発生します。
|
throwOnError |
オプション。デフォルト値は false です。この引数の値が true に設定されており、restrictMultiple または restrictMixed が true で、指定された入力に混合または複数のエンコードされた文字列が含まれる場合は、例外がスローされます。この引数の値が false に設定されている場合は、例外の代わりに空の文字列が返されます。 |
例
<! --- canonicalize the simple html entity encoded string ---> <cfoutput>#canonicalize("<",false,false)#</cfoutput><br/>
<!--- enforce multiple and mixed encoding detection. Mixed encoding is detected as the data is encoded using URL and HTML entity encoding. Multiple Encoding is also detected ---> <cftry> <cfoutput>#canonicalize("%26lt; %26lt; %2526lt%253B %2526lt%253B %2526lt%253B",true,true, true)#</cfoutput><br/> <cfcatch type="any" > <!--- throws Error when throwOnError set to true when mixed or mutiple encoding is detected. ---> <cfdump var="#cfcatch#" > </cfcatch> </cftry>
<!--- enforce multiple and mixed encoding detection. Mixed encoding is detected as the data is encoded using URL and HTML entity encoding. Multiple Encoding is also detected ---> <! --- an Empty string will be returned if the throwOnError is set to false and multiple or mixed encoding is found ---> <cfoutput>#canonicalize("%26lt; %26lt; %2526lt%253B %2526lt%253B %2526lt%253B",true,true, false)#</cfoutput><br/>
<!--- enforce mixed but not multiple encoding detection returns an Empty String---> <cfoutput>#canonicalize("%25 %2526 %26##X3c;script&##x3e; &##37;3Cscript%25252525253e",false,true)#</cfoutput><br/>
<cftry> <cfoutput>#canonicalize("%26lt; %26lt; %2526lt%253B %2526lt%253B %2526lt%253B",false,true, true)#</cfoutput><br/> <cfcatch type="any" > <!--- throws Error when throwOnError set to true. ---> <cfdump var="#cfcatch#" > </cfcatch> </cftry>
<!--- Mixed encoding is detected as the data is encoded using URL and HTML entity encoding. Multiple Encoding is also detected ---> <!--- Decodes the string using both percent and HTML Entity encodings as the flags were set to false ---> <cfoutput>#canonicalize("%26lt; %26lt; %2526lt%253B %2526lt%253B %2526lt%253B",false,false)#</cfoutput><br/>
<cfoutput>#canonicalize("&##X25;3c",false,false)#</cfoutput><br/> <cfoutput>#canonicalize("&##x25;3c",false,false)#</cfoutput><br/> <!--- Simple Javascript decoding ---> <!--- http://www.planetpdf.com/codecuts/pdfs/tutorial/jsspec.pdf see section 2.7.5 for JS Encoding ---> <cfoutput>#canonicalize("\\U003C",false,false)#</cfoutput><br/> <cfoutput>#canonicalize("\\X3C",false,false)#</cfoutput><br/>
|