filter_xss()およびcheck_plain()をいつどのように使用しますか?


11

views-view-fields--magazine--magazine.tpl.php私のウェブサイトには、このようなテンプレートファイルがたくさんあります。セキュリティを向上させるために、filter_xss()およびcheck_plain()をどのように、いつ使用する必要がありますか?例えばこれはコードです:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

それらの関数をどのように適用できますか?


filter_xss()潜在的に危険なコンテンツ(つまり、信頼できないユーザーからのコンテンツ)からXSSをフィルタリングする場合、およびcheck_plain()文字列からHTMLの特殊文字をエスケープする場合に使用します
Clive

回答:


13

まず、これらについてDrupal APIで確認します。

したがってcheck_plain()、HTMLで特別な意味を持つ特殊文字(<およびなど&)をプレーンテキストエンティティ(つまり&lt;&amp;それぞれ)にエンコードし、文字列が(HTMLとして解釈されずに)レンダリングされるようにします。 HTMLマークアップ。この関数はfilter_xss()、HTML文字列をフィルタリングして、クロスサイトスクリプティング(XSS)の脆弱性を防ぎます。それは4つのことをします:

  • ブラウザをだますことができる文字や構造を削除する
  • すべてのHTMLエンティティが整形式であることを確認する
  • すべてのHTMLタグと属性が整形式であることを確認する
  • HTMLタグに、許可されていないプロトコル(javascript:など)のURLが含まれていないことを確認します。

両方の機能は、ユーザーからのデータを無害化して、データがサイトに表示される前にユーザーインジェクションが無効化されるようにするために使用れます。

両方に同じ文字列を渡すことはありません。

使用する場合check_plain()、関数に渡される文字列は(HTMLではなく)プレーンテキストとして使用されることになっています。続いてfilter_xss()以来、必要とされていないcheck_plain()常に文字列のプレーンテキストを行います。

を使用する場合filter_xss()、関数に渡される文字列はHTMLであることが想定されており、check_plain()混乱を招きます。

例として使用するテンプレートを見ると、渡された3つのフィールドすべてprint()が、既にサニタイズされているコンテンツから取得されているように見え、サニタイジングは不要です。

ただし、「Filtered HTML」や「Plain」などの「安全な」テキストフィルターを通過せずにユーザー入力を収集する独自のモジュールを作成する場合は、衛生目的でこれらの関数を使用する必要があります。


ユーザーからの入力をどこで確認できますか?たとえば、コンテンツタイプがあり、匿名ユーザーはその種類のノードを作成できます。
ママD

@Drupalist、匿名ユーザーに「安全でない」テキスト形式の使用を許可しないでください。[ 管理]»[設定]»[コンテンツの作成]»[テキスト形式]に移動します。Drupalに付属する「安全な」テキスト形式は、「フィルターされたHTML」と「プレーンテキスト」です。これらが匿名ユーザーに許可されている唯一のフォーマットである場合、Drupalは組み込みのノードタイプとコアフィールド機能で作成したノードタイプに対して必要なチェックを実行します。ユースケースがこれと異なる場合は、ユースケースを詳しく説明する新しい質問をします。
フリーラジカル、2014年

匿名ユーザーのみが使用できますplain text
ママD

@Drupalist、それで結構です。プレーンテキストをサニタイズするためにこれらの関数を使用する必要はありません。
フリーラジカル、

3
@ARUN、いいえ。標準のDrupalの実践では、ユーザーがDBに入力した内容を常に正確に保存し、レンダリングする前にテキストをサニタイズします。
フリーラジカル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.