2

私は Codeigniter のコメント システムに取り組んでおり、どのような検証規則を採用すべきかについてアドバイスをいただければ幸いです。画像やその他の HTML を許可したくありません。

これまでのところ、私はただ持っtrimmax_length設定しています。htmlspecialcharsまた、データベースに挿入する前にコンテンツを実行します。XSS フィルタリングをグローバルに有効にしています。

他にどのような予防措置を講じる必要がありますか? Javascript やその他の悪意のあるコードの入力を防ぐには、htmlspecialchars で十分ですか?

4

1 に答える 1

3

データベースにプッシュする前に、required と max_length に対して通常のフォーム検証を行い、明らかに xss フィルタリングを行う必要があります。htmlspecialchars は、タグに含まれていない文字にのみ適用する必要があるため、htmlspecialchars を直接実行することはできません。必要がある:

<br/>1 - " " や " "<b>などのタグ要素を削除 (および保存) します。おそらくpreg_matchでこれを行うことができます。<b></b>

2 - 残りのすべてのテキストに対して htmlentities を実行します

3 - 不要な明示的なタグをすべて削除します (保存されているタグの束から)

strip_tags ( string $str [, string $allowable_tags ] )

4 - 次に、属性とコンテンツの許可されたタグをフィルタリングします。ハッカーが次のようなコードを使用することは珍しくありません

<b onMouseOver="window.open(..)"></b>

これを修正するには、少し余分な作業を行うか、おそらくいくつかの正規表現を使用する必要があります。もっとサンプル コードを書いてほしい場合は、お知らせください。

6 - タグ要素をドキュメントに再度追加します。

私は基本的に今これを調理しました。アルゴリズムの効率を改善することはできます (つまり、最初に不要なタグを削除してから、html エンティティとタグ コンテンツのフィルタリングに進みます) が、それはあなたに任せます。

これは、現在潜在的なハッキングを見ることができる限りです. ただし、入力をハッキングする方法は他にもあるかもしれないので、phpbb フォーラム システムなど、他のコメント ボックス システムが検証に使用するものを確認することをお勧めします。別のオプションとして、phpbb 角括弧形式を使用してタグを処理し、ユーザーが html タグをまったく入力できないようにすることもできますが、代わりに、制御する角括弧タグを使用します。

これはあなたの質問に答えていますか?

于 2012-08-15T19:08:26.023 に答える