github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/html/template/content.go (about)

     1  // Copyright 2011 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package template
     6  
     7  // 信頼できるソースからのコンテンツの文字列。
     8  type (
     9  	// CSSは、以下のいずれかに一致する既知の安全なコンテンツをカプセル化します:
    10  	//   1. CSS3のスタイルシートの生成、例えば `p { color: purple }`。
    11  	//   2. CSS3のルールの生成、例えば `a[href=~"https:"].foo#bar`。
    12  	//   3. CSS3の宣言の生成、例えば `color: red; margin: 2px`。
    13  	//   4. CSS3の値の生成、例えば `rgba(0, 0, 255, 127)`。
    14  	// https://www.w3.org/TR/css3-syntax/#parsing および
    15  	// https://web.archive.org/web/20090211114933/http://w3.org/TR/css3-syntax#style を参照してください。
    16  	//
    17  	// このタイプの使用はセキュリティリスクを伴います:
    18  	// カプセル化されたコンテンツは信頼できるソースから来るべきであり、
    19  	// それはテンプレートの出力にそのまま含まれます。
    20  	CSS string
    21  
    22  	// HTMLは、既知の安全なHTMLドキュメントフラグメントをカプセル化します。
    23  	// それは、第三者からのHTMLや、閉じられていないタグやコメントが含まれるHTMLには使用すべきではありません。
    24  	// 信頼できるHTMLサニタイザの出力と、このパッケージによってエスケープされたテンプレートは、HTMLでの使用に適しています。
    25  	//
    26  	// このタイプの使用はセキュリティリスクを伴います:
    27  	// カプセル化されたコンテンツは信頼できるソースから来るべきであり、
    28  	// それはテンプレートの出力にそのまま含まれます。
    29  	HTML string
    30  
    31  	// HTMLAttrは、信頼できるソースからのHTML属性をカプセル化します。
    32  	// 例えば、` dir="ltr"`。
    33  	//
    34  	// このタイプの使用はセキュリティリスクを伴います:
    35  	// カプセル化されたコンテンツは信頼できるソースから来るべきであり、
    36  	// それはテンプレートの出力にそのまま含まれます。
    37  	HTMLAttr string
    38  
    39  	// JSは、例えば `(x + y * z())` のような、既知の安全なEcmaScript5の式をカプセル化します。
    40  	// テンプレートの作者は、型付けされた式が意図した優先順位を壊さないこと、そして
    41  	// "{ foo: bar() }\n['foo']()" のような式を渡すときのように、
    42  	// ステートメント/式の曖昧性がないことを確認する責任があります。
    43  	// これは、非常に異なる意味を持つ有効な式と有効なプログラムの両方です。
    44  	//
    45  	// このタイプの使用はセキュリティリスクを伴います:
    46  	// カプセル化されたコンテンツは信頼できるソースから来るべきであり、
    47  	// それはテンプレートの出力にそのまま含まれます。
    48  	//
    49  	// 有効だが信頼できないJSONを含めるためにJSを使用することは安全ではありません。
    50  	// 安全な代替手段は、json.UnmarshalでJSONを解析し、
    51  	// 結果のオブジェクトをテンプレートに渡すことです。これは、JavaScriptのコンテキストで提示されるときに、
    52  	// サニタイズされたJSONに変換されます。
    53  	JS string
    54  
    55  	// JSStrは、JavaScriptの式のクォートの間に埋め込むことを意図した一連の文字をカプセル化します。
    56  	// 文字列は一連のStringCharactersに一致しなければなりません:
    57  	//   StringCharacter :: SourceCharacter ただし `\` または LineTerminator は除く
    58  	//                    | EscapeSequence
    59  	// LineContinuationsは許可されていません。
    60  	// JSStr("foo\\nbar")は問題ありませんが、JSStr("foo\\\nbar")は許可されていません。
    61  	//
    62  	// このタイプの使用はセキュリティリスクを伴います:
    63  	// カプセル化されたコンテンツは信頼できるソースから来るべきであり、
    64  	// それはテンプレートの出力にそのまま含まれます。
    65  	JSStr string
    66  
    67  	// URLは、既知の安全なURLまたはURL部分文字列(RFC 3986を参照)をカプセル化します。
    68  	// 信頼できるソースからの`javascript:checkThatFormNotEditedBeforeLeavingPage()`のようなURLは
    69  	// ページに含まれるべきですが、デフォルトでは動的な`javascript:` URLは、
    70  	// 頻繁に悪用されるインジェクションベクトルであるためフィルタリングされます。
    71  	//
    72  	// このタイプの使用はセキュリティリスクを伴います:
    73  	// カプセル化されたコンテンツは信頼できるソースから来るべきであり、
    74  	// それはテンプレートの出力にそのまま含まれます。
    75  	URL string
    76  
    77  	// Srcsetは、既知の安全なsrcset属性をカプセル化します
    78  	// (https://w3c.github.io/html/semantics-embedded-content.html#element-attrdef-img-srcset を参照)。
    79  	//
    80  	// このタイプの使用はセキュリティリスクを伴います:
    81  	// カプセル化されたコンテンツは信頼できるソースから来るべきであり、
    82  	// それはテンプレートの出力にそのまま含まれます。
    83  	Srcset string
    84  )