Yiiのユーザー入力をどこでエスケープしますか?
CHtml::encode(strip_tags())
それらをdbに保存する前に呼び出す必要がありますか?または、前に、ビューでそれらをかなり正しくエンコードする必要がありますecho
か?検証で入力テキストを自動的にエンコードする方法はありますか?[a-zA-Z0-9] *による検証は、検証でインジェクションをフィルタリングするための最良の方法ですか?
最初のものについては、これは私の個人的な意見ですが、あなたが言ったようCHtml::encode(strip_tags())
に、データを保存する前に行います。以前にそれを行うことの主な利点は、異なるメディア(Webサイト、APIなど)からデータを取得している場合、取得したデータが安全であることを確認できることです。
2つ目のポイントとして、入力テキストを自動的にエンコードする特定のメソッドがあるかどうかはわかりませんが、モデル内のメソッドの1つを使用してそれを行うことができますbeforeValidate()
。beforeSave()
yiiのセキュリティのために、安全なyiiアプリケーションの作成に関するwikiを確認することをお勧めします
私が使う:
$p = new CHtmlPurifier();
$p->options = array(
'URI.AllowedSchemes' => array(
'http' => true,
'https' => true,
));
$search = CHtml::encode($p->purify($search));
それを関数の中に入れて、いつでもそれを呼び出してください:)