2

私はブログシステムを持っており、ユーザーは、などのhtmlタグを含むコンテンツをhtmlテキスト領域に入力する必要があります<p>。これはデータベースに保存されます。この入力がphpを使用してWebページにエコーされる場合、XSSから保護するために出力をエスケープし、ブログ投稿が正しくフォーマットされるようにhtmlタグの意味を保持するにはどうすればよいですか?私がhtmlentities($blog_content)それを使用すると、文字通りhtmlタグがページに印刷されるので、が表示されます<p>hello this is a blog</p>

これは可能ですか?

4

2 に答える 2

1

必要なのは、選択的なフィルタリングまたはサニタイズです。つまり、一部のHTMLを許可したいが、他の、おそらく悪意のあるタグは許可したくないということです。これは非常にトリッキーなビジネスです。特に、HTML構文は非常に複雑であり、過度に単純なサニタイズの試行ではエラーが発生しやすく、とにかく不正な形式のHTMLを介してタグを挿入できます。

可能であれば、ユーザーにHTMLを送信させないようにする必要があります。Wikiマークアップ、マークダウン、BBcodeなどの特別なマークアップ言語を使用します。

自分が何をしているのかが確かな場合は、そのようなサニタイズ機能を提供する、十分にテストされた堅牢なライブラリを選択する必要があります。この説明に当てはまるのは、私が知っているHTMLPurifierだけです

于 2013-02-11T16:22:19.297 に答える
-1

さて、これ<script>を使用してタグを削除することはできますが、strip_tags() これは防弾ソリューションではありませんが、いくつかのタグ(基本的に太字、斜体、リンクなど)を許可するだけで安全性を向上させることができます...

その後、コンテンツを簡単に印刷して、JavaScriptの実行を回避できます。

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p>, <a> and some formatting
echo strip_tags($text, '<p><a><i><em><b><strong>');
于 2013-02-11T16:19:11.150 に答える