0

我目前正在使用 CodeIgniter。我有 4 个表单(学生登录、登录表单、创建帐户和请求帐户)

我目前正在使用它来过滤我在其中一种表单上的输入(创建帐户):

function create()
    {
        $this->load->library('bcrypt'); 
        $this->load->library('form_validation');

        $this->form_validation->set_rules('fname', 'First Name', 'trim|required|alpha|max_length[14]');
        $this->form_validation->set_rules('lname', 'Last Name', 'trim|required|alpha|max_length[14]');
        $this->form_validation->set_rules('email', 'Email Address', 'trim|required|is_unique[users.email]|valid_email');
        $this->form_validation->set_rules('username', 'Username', 'trim|is_unique[users.username]|required|alpha_numeric||min_length[4]|max_length[15]');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[7]|alpha_dash|max_length[20]');
        $this->form_validation->set_rules('passwordconf', 'Confirm Password', 'trim|required|min_length[7]|max_length[20]|matches[password]|alpha_dash');

        if($this->form_validation->run() == FALSE)
        {
            $this->view();
        }

据我了解,仅当用户数据将在表格、论坛、博客(等)中以 HTML 形式回显/输出时,才应使用 HTML Purifier。我对此的理解是否正确?我问是因为我的学生登录表单将用于将数据输入数据库。然后我的学生队列页面将用于 SELECT ... FROM ... 该数据库。所以这让我感到困惑,因为当我为学生队列创建输出时,数据将存储在数据库中。它不会直接发布。

所以反过来我的思路如下:

  • 验证数据以确保它是您所期望的
  • 像我现在一样使用 xss_clean 过滤数据。
  • 使用 PDO 准备查询将数据插入数据库
  • (现在这一步让我感到困惑)我应该如何回显我的数据库数据?我应该在这一步使用 HTML Purifier 吗?

抱歉,如果这个问题已经被问了一百万次,我似乎找不到我要找的东西。我没有完全理解 HTML 净化器的概念。

编辑 1:在配置文件中使用全局 xss_clean 过滤器。

4

1 回答 1

1

HTML Purifier 适用于当您有一个数据类型为 HTML 的字符串并且您想要限制可能出现在其中的 HTML 种类时。

但是,您在此处拥有的所有字段都不是 HTML——它们都只是字符串。因此,要显示它们,您只需转义字符串以在 HTML 中显示,就像对任何字符串一样。

更新版本的 CodeIgniter 有一个html_escape()功能。在您的视图中使用它,如下所示:

<p><?=html_escape($mystring)?></p>

如果您使用的是旧版本,请htmlspecialchars($mystring, ENT_NOQUOTES, 'utf-8')直接使用。您可能应该将其包装在一个单参数函数中。

于 2013-02-17T16:05:55.117 回答