2013-02-17 44 views
0

我目前使用CodeIgniter。我有4种形式(学生登入,登录形式,创建账户,并要求帐户)理解HTML净化器

我目前使用这个目前以过滤的一种形式我输入(创建账户):

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时使用。我的理解是否正确?我在问,因为我的学生登录表单将用于将数据输入到数据库中。然后我的学生队列页面将被用于SELECT ... FROM ...那个数据库。所以这让我感到困惑,因为当我为学生队列创建输出时,数据将被安置在数据库中。它不会直接发布。

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

  • 验证数据并确保它是你所期望的
  • 过滤器中的数据与xss_clean像我目前。
  • 使用PDO准备的查询将数据插入数据库
  • (现在这一步使我感到困惑)我应该如何回应我的数据库数据? 我应该在这一步使用HTML净化器吗?

对不起,如果这个问题已被问及一百万次,我似乎无法找到我在找什么。我没有完全理解HTML净化器的概念。

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

+0

如果数据中包含用户提交的HTML代码 - 是的 – 2013-02-17 14:25:05

+0

没错,它不应该有HTML或脚本。我只会允许aplha_numberic字符。 – RaGe10940 2013-02-17 14:33:50

+0

然后你不需要净化器。只需[过滤](http://www.php.net/manual/en/filter.filters.sanitize.php)字段,并确保它们只包含A-Z,0-9 – 2013-02-17 14:37:23

回答

1

HTML净化器适用于您有一个字符串,其数据类型为HTML并且您想限制可能出现在其中的HTML种类。

但是,这里没有任何字段是HTML - 它们都只是字符串。因此,为了显示它们,您只需将字符串转义为用HTML显示,就像您对任何字符串所做的那样。

更新版本的CodeIgniter具有html_escape()函数。用它在你的看法,像这样:

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

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

+0

非常感谢。我刚刚从htmlpurifier.org上的其中一个人那里得到了同样的答案,这要感谢很多人。 – RaGe10940 2013-02-17 17:54:03