ユーザーがテキストボックスに入力できる HTML の種類を制限するにはどうすればよいですか? ベータ テスト中のカスタム ソフトウェアを使用して小さなフォーラムを運営していますが、HTML 入力を制限する方法を知る必要があります。助言がありますか?
6 に答える
少し別のアプローチをお勧めします:
- 着信ユーザー データをフィルター処理しません (SQL インジェクションの防止を超えて)。ユーザーデータはできるだけ純粋に保つ必要があります。
- データベースからのすべての発信データをフィルタリングします。これは、タグの削除などが行われる場所です。
ユーザー データをクリーンに保つことで、表示方法の柔軟性が向上します。すべての送信データをフィルタリングすることは、(never trust data meme に沿って) 身につけるのに良い習慣です。
フォーラムが何を使用して構築されたかは述べていませんが、それが PHP である場合は、以下を確認してください。
ライブラリの機能:ホワイトリスト、削除、整形式、ネスティング、属性、XSS セーフ、標準セーフ
テキストが送信されたら、PHP で正規表現を使用して、定義済みのセットに一致しないタグをすべて削除できます。
次のようになります。
find open tag (<)
if contents != allowed tag, remove tag (from <..>)
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 を使用します。
何を使用するかに関係なく、どのような HTML コンテンツが危険な可能性があるかを必ず把握しておいてください。
たとえば、< script > タグは非常に明白ですが、IE では < style > タグは JScript コマンドを呼び出すことができるため、同様に不適切です。
実際、どの style="..." 属性でも IE でスクリプトを呼び出すことができます。
< object > はもう 1 つのタグであり、うんざりします。
入力提供を解析し、許可しているリストと正確に一致しないすべての html タグを取り除きます。これは複雑な正規表現にすることも、入力文字列の char[] を使用してステートフルな反復を実行して、許可された入力文字列を構築し、 のようなタグの不要な属性を削除することもできます
img
。別のコード システムを使用する (BBCode、Markdown)
既にこれを行っているコードをオンラインで見つけて、実装の基礎として使用してください。たとえば、スラッシュコードはこれを実行する必要があるため、Perl でその実装を探し、正規表現を使用します (そこにあると思います)。