2

考えすぎかもしれませんが、データベースに Web サイト フィールドがあるとします。すべての HTML タグを削除するために strip_tags を使用しました。しかし、ユーザーがこれを入力すると

javascript:alert('テスト')

文字列なので渡されます。しかし、その後、HTMLが生成されます

<a href="<?php echo prep_url($website);?>">Website</a> //the code in view file
<a href="javascript:alert('test')">Website</a> //bad

クリックするとJavascriptが実行されます。prep_url が機能しないことにも注意してください。

なにか提案を?私は HTMLPurifier を見てきましたが、サイズが非常に大きく、大きな変更を加えたくありません。

ありがとう

4

2 に答える 2

2

URL が必要な場合は使用しstrip_tagsないでください。URL とおそらくurlencodeそれを検証する必要があります。これが 1 つの方法filter_varです。

$url = "javascript:alert('test')";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
// bool(false)

$url = "http://stackoverflow.com/questions/10918132";
var_dump(filter_var($url, FILTER_VALIDATE_URL));
// string(43) "http://stackoverflow.com/questions/10918132"

である場合filter_var($user_input, FILTER_VALIDATE_URL)FALSE、ユーザー入力を受け入れないでください。これにより、CI の必要性がなくなりxss_clean()ますが、HTML 属性に配置するときにとにかく実行したい場合があります。prep_urlユーザーがパーツを入力する必要がない場合は、検証する前に入力に対して実行する必要がある場合がありますhttp://

URL を検証するにはさまざまな方法があります。好きな方法を選択してください。

于 2012-06-06T16:27:06.897 に答える
1

Codeigniter には xss フィルター クラスがあります。これは世界で最高のものではありませんが、最も一般的な問題をフィルタリングします. セキュリティ クラス

設定ファイルのオプションを変更することで、codeigniter がすべての POST と GET をフィルター処理できるようにするか、これを実行して手動でフィルター処理するように要求することができます。

$this->input->post('whatever',TRUE); //Note the TRUE
于 2012-06-06T16:23:11.677 に答える