2

PHPを使用してデータをフィルタリングする最良の方法については、何年にもわたって多くの議論があることを知っていますが、現在のプロジェクトではホワイトリストアプローチを採用したいと思います。

ユーザーが次のHTMLのみを使用できるようにしたい

<b>bold</b>
<i>italics</i>
<u>underline</u>
<s>strikethrough</s>
<big>Big size</big >
<small>Small size</small>

Hyperlink <a href="http://www.site.com">website</a>

A Bulleted List:
<ul>
<li>One Item</li>
<li>Another Item</li>
</ul>

An Ordered List:
<ol>
<li> First Item</li>
<li> Second Item</li>
</ol>

<blockquote>Because it is indented</blockquote>

<h1>Heading 1</h1>
<h2>Heading 2</h2>
<h3>Heading 3</h3>

PHPでのパフォーマンスのためにこれを行うための最良の方法を誰かに教えてもらえますか?私は過去にのみ、特定のコードを除いたすべてのhtmlを許可しました

4

4 に答える 4

8

HTMLPurifierLibraryはうまく機能すると思います。

http://htmlpurifier.org/

HTML Purifierは、PHPで記述された標準準拠のHTMLフィルターライブラリです。HTML Purifierは、徹底的に監査され、安全でありながら寛容なホワイトリストを使用してすべての悪意のあるコード(XSSとして知られる)を削除するだけでなく、ドキュメントが標準に準拠していることを確認します。これは、W3Cの仕様に関する包括的な知識がなければ達成できません。不十分または安全でないHTMLフィルターの現在の状況のた​​めにBBCodeを使用するのにうんざりしていませんか?WYSIWYGエディターを持っていますが、使用できませんでしたか?構築しているアプリケーション用の高品質で標準に準拠したオープンソースコンポーネントをお探しですか?HTML清浄機はあなたのためです!

于 2009-12-29T16:55:19.387 に答える
1

最も簡単な解決策はstrip_tags(),、許容されるタグを含む2番目の引数を受け入れることです。

strip_tags($string, "<b><i><u><a><s><big><small><ul><li><ol><blockquote><h1><h2><h3>");
于 2009-12-29T17:00:08.583 に答える
1

別のルートは、2番目の引数でstrip_tagsを使用することです。

http://php.net/manual/en/function.strip-tags.php

于 2009-12-29T17:00:41.373 に答える
1

送信されたコードをtidyで実行して最初に正規化し、次にxpathを使用するか、xsltを適用して許可された要素のみを選択します。このように、も漏れることはありません。また、特定のWebサイトの状況では、[tidyとxpath / xsltを使用する]すべての書き込み要求に対して数十万とは言わないまでも数千の読み取り要求があるため、平均してパフォーマンスへの影響は無視できることにも注意してください。一方、バッチ処理を行っている場合。

編集:ああ、:正規表現でこれを行わないでください。それを正しく行うことは数学的に不可能です。

于 2009-12-29T17:06:41.193 に答える