0


0

一部のタグと属性を保存するHTML文字列のクリーニング

(要求された詳細に従って)サニタイズ機能を実装した後、上司は受け入れられた入力を変更することにしました。 ここで、特定のタグとその属性を保持したいと考えています。 私は、より安全な私見であるBBCodeのような言語を実装することを提案しましたが、彼はそれがたいへんな仕事になるので、そうしたくありません。

今回はシンプルにしたいので、次回彼が私にこのことを変えるように頼んだときに彼を殺さないようにします。 そして、私は彼がすることを知っています。

最初にhttpパラメータを保持するhttp://www.php.net/manual/en/function.strip-tags.php [strip_tags]を使用し、次にhttp://www.php.netを使用するだけで十分ですか? /manual/en/function.htmlentities.php [htmlentities]?

2 Answer


2


strip_tags`は必ずしも安全なコンテンツになるとは限りません。 `strip_tags`に続いて htmlentities`は安全です。HTMLエンコードされたものはすべて安全ですが、意味がありません。

ユーザーがプレーンテキストを入力している場合(「htmlspecialchars」を使用して出力する必要がある場合(「htmlentities」より優先))、またはHTMLマークアップを入力している場合、適切に解析し、破損したマークアップを修正する必要があります安全なホワイトリストにない要素/属性を削除します。

それがあなたの望むものであるならば、それをするために既存のライブラリを使用してください(例えば。 htmlpurifier)。 それは簡単な作業ではなく、間違えた場合はXSSのセキュリティホールを与えられているためです。


0


次の構文で strip_tags`を使用して特定のタグを保持できます: strip_tags($ text、 '`

');

このスニペットは、「p」と「a」を除くすべてのタグを取り除きます。 許可したタグの属性は保持されます(上記の例では「p」と「a」)。

ただし、これは属性が安全であることを意味しません。 特定の属性が必要ですか、それとも許可されたタグにすべての属性を保持しますか? 最初のケースでは、各タグを解析して必要なタグを削除し、値をサニタイズする必要があります。 許可されたタグのすべての属性を保持するには、それらをサニタイズする必要があります。 属性値で「htmlentities」を実行してそれらをサニタイズすることをお勧めします(表示のために、私は仮定します)。