0

一重引用符 ( ' ) や二重引用符 ( " ) などの文字を送信し、フォームの送信後に値を保持すると (検証の失敗などにより)、' のようなフォーム値を取得するという問題に直面していました。と "

私は多くのことを試しました-

  • $this->input->post("field", true)の代わりに$_POSTフォーム値にアクセスする
  • 構成からの XSS フィルタリングの有効化、
  • 使用して$this->security->xss_clean($data);

しかし、何も役に立ちませんでした。最後に、system\helpers\form_helper.php に移動し、177 行目の関数 form_input を次のように変更しました -

前へ:$defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);

:$defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => html_entity_decode($value, ENT_QUOTES, 'UTF-8'));

これにより、これまでのところ中断することなく問題が解決されました。

これが目的を果たす正しい方法であるかどうかを知りたいだけですか?

4

1 に答える 1

1

あなたが抱えていた問題についてはよくわかりませんが、システムファイルを編集して修正することは良い考えではありません. システム フォルダ内は一切変更しないでください。変更を加える適切な方法は、application/helpers/MY_form_helper.php(で定義された独自のプレフィックスを使用してapplication/config/config.php) ファイルを作成してフォーム ヘルパーを拡張し、ファイル内で変更する関数をオーバーライドすることです。このように見えるはずです...

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

if ( ! function_exists('form_input'))
{
    /**
    * Text Input Field
    *
    * @param    mixed
    * @param    string
    * @param    string
    * @return   string
    */
    function form_input($data = '', $value = '', $extra = '')
    {
        $defaults = array(
            'type' => 'text',
            'name' => is_array($data) ? '' : $data,
            'value' => html_entity_decode($value, ENT_QUOTES, 'UTF-8')
        );
        return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
    }
}

/* End of file MY_form_helper.php */
/* Location: ./application/helpers/MY_form_helper.php */
于 2014-12-30T22:55:23.377 に答える