0

TLDR; 悪のデータを置き換えるときに、xss_clean() のデータベース ロギングを有効にしたいと考えています。


Security.php で xss_clean() 関数のデータベース ロギングを有効にしたいのですが、基本的には、xss_clean() に正常にフィードしている入力に、フィルターで除外された悪意のあるデータが含まれていることが確認されたかどうかを知りたいのです。か否か。

だから基本的に:

$str = '<script>alert();</script>';
$str = xss_clean($str);

私にとって理想的に起こることは次のとおりです。

  1. XSS から文字列を消去する
  2. クリーンな $str を返します
  3. 悪意のあるデータ (および最終的にはログインしているユーザー) に関する情報をデータベースに入力します。

Security.php ファイルを見る限り、これを処理してくれるものは何もないか、フックなどで処理できるものはありません。もちろん、私は間違っているかもしれません。

Security.php で行われた置換の数がログに記録されていないため、Security.php を拡張し、元の関数に現在のコードをコピーして貼り付け、これをサポートするように変更する必要がありますか? または、CodeIgniter の将来の更新 (および特に改ざん/拡張されるファイル) に対して、よりクリーンで安全なソリューションはありますか?

4

1 に答える 1

1

Security クラスを拡張する必要がありますが、入出力のログだけが必要な場合は、コードをコピーして貼り付ける必要はまったくありません。次の行に沿って何かを行うと、そうすることができます。

Class My_Security extends CI_Security {

    public function xss_clean($str, $is_image = FALSE) {
        // Do whatever you need here with the input ... ($str, $is_image)

        $str = parent::xss_clean($str, $is_image);

        // Do whatever you need here with the output ... ($str)

        return $str;
    }

}

そうすれば、既存の関数をラップして、入出力をいじるだけです。基礎となるメソッドの変更が心配な場合は、PHP 関数get_argsを使用して引数オブジェクトを透過的に渡すことで、より前方互換性を高めることができます。

于 2011-07-06T03:52:11.800 に答える