質問

ユーザーがテキストボックスに入力できるHTMLの種類を制限するにはどうすればよいですか?ベータテスト中のカスタムソフトウェアを使用して小さなフォーラムを運営していますが、HTML入力を制限する方法を知る必要があります。提案はありますか?

役に立ちましたか?

解決

やや別のアプローチを提案します:

  • 着信ユーザーデータをフィルタリングしません(SQLインジェクションの防止を超えて)。ユーザーデータは可能な限り純粋に保つ必要があります。
  • データベースからのすべての発信データをフィルタリングします。これは、タグの除去などの処理が行われる場所です。

ユーザーデータをクリーンに保つと、表示方法の柔軟性が高まります。すべての送信データをフィルタリングすることは、(信頼できないデータのミームに加えて)取り入れるのに適した習慣です。

他のヒント

フォーラムの構成内容は明記していませんが、PHPの場合はチェックアウトしてください:

  

http://htmlpurifier.org/

     

ライブラリの機能:ホワイトリスト、削除、整形式、ネスト、属性、XSSセーフ、標準セーフ

テキストが送信されると、PHPの正規表現を使用して、定義済みのセットと一致しないすべてのタグを削除できます。

次のようになります:

find open tag (<)
if contents != allowed tag, remove tag (from <..>)
  1. 入力が解析され、許可しているリストと完全に一致しないすべてのhtmlタグが取り除かれます。これは複雑な正規表現でも、入力文字列のchar []をステートフルイテレーションして、許可された入力文字列を構築し、img

  2. などのタグの不要な属性を取り除くこともできます。
  3. 別のコードシステム(BBCode、Markdown)を使用します

  4. これを既に実行しているコードをオンラインで見つけて、実装の基礎として使用します。たとえば、Slashcodeはこれを実行する必要があるため、Perlでの実装を探して、正規表現(私はそこにあると仮定)を使用します

使用するものに関係なく、どのような種類のHTMLコンテンツが危険になる可能性があるかを必ず確認してください。

e.g。 <!> lt;スクリプト<!> gt;タグはかなり明白ですが、<!> lt;スタイル<!> gt;タグはJScriptコマンドを呼び出すことができるため、IEでも同様に悪いです。

実際には、任意のスタイル= <!> quot; ... <!> quot;属性はIEでスクリプトを呼び出すことができます。

<!> lt;オブジェクト<!> gt;疲れるもう1つのタグになります。

PHPには、HTMLタグを削除するための単純な関数 strip_tag が付属しています。特定のタグが削除されないようにします。

例#1 strip_tags()の例

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

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>

上記の例が出力されます:

Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>

個人的にフォーラムの場合、BBCodeまたはMarkdownを使用します。これは、ライブプレビューなどのサポートと機能の量が提供されるためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top