Codeigniter 3のset_rules関数に問題がある
ユーザーのメールを確認します:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
私が投稿するとこのエラーが発生します:
フィールド名Eメールに対応するエラーメッセージにアクセスできません。
Codeigniter githubから:
XSSクリーニングに関するほとんど知られていないルールは、入力データではなく、出力にのみ適用することです。
自動およびグローバルXSSクリーニング機能(上記のXSSについての前のステップを参照)でその間違いを犯したため、今ではその実践を阻止するために努力しています 'xss_cleanも削除しています'正式にサポートされているフォーム検証ルールのリストから。
通常、フォーム検証ライブラリは入力データを検証するため、「xss_clean」ルールは単にその中に属していません。
本当に本当にそのルールを適用する必要がある場合は、xss_clean()を通常の関数として含むセキュリティヘルパーもロードする必要があります。検証ルールとしても使用されます。
そして、すべてにもかかわらず、本当に必要な場合は、application/config/autoload.phpにアクセスしてください:
$autoload['helper'] = array('security');
または、フォームの検証前
$this->load->helper('security');
xss_cleanは検証ではなくサニタイズを行うため、代替手段は使用しないことです。 xss_cleanはセキュリティヘルパーの一部です。必要な場合は、検証後に行います。
$this->load->helper('security'); ` $value = $this->input->post('email',TRUE); //where TRUE enables the xss filtering
また、config.phpファイルでグローバルxssフィルタリングを有効にできます
$config['global_xss_filtering'] = TRUE;
他の人はそれをほのめかしていますが、誰も簡潔に言っていません。このエラーを修正する方法はxxs_clean
検証ルールから。私はこの問題に自分で出会ったばかりで、ここで提供されたヒントのおかげで問題を修正することができました。
この:
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email');
これになる:
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
Autoload.phpでsecurity
ヘルパーをロードしてください
$autoload['helper'] = array('security');
これ以上何もする必要はありません。
使用する必要があります。
$this->load->helper('security');
また、config/autoload.phpで以下のコードを使用できますが、上記のコードを使用することをお勧めします。以来、Codeigniter liteの重量を維持します。
$autoload['helper'] = array('security');
ルールをグローバルにオーバーライドすると、次の方法でカスタムメッセージでルールが拡張されます。
$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean|valid_email',
array('xss_clean' => 'Error Message: your xss is not clean.')
);