web-dev-qa-db-ja.com

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

このようなテンプレートファイルはたくさんあります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>

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

11
M a m a D

まず、これらについてDrupal API:

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

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

両方の関数は、ユーザーからのデータをサニタイズして、データがサイトにレンダリングされる前に中和されるようにするために使用されます

同じ文字列からbothを渡してはいけません。

check_plain()を使用する場合、関数に渡される文字列はplain text(HTMLではない)として使用されることになっています。その場合、filter_xss()は常に文字列をプレーンテキストにするため、check_plain()は必要ありません。

filter_xss()を使用する場合、関数に渡される文字列はHTMLであると想定され、check_plain()はそれを台無しにします。

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

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

13
Free Radical