2011-05-14 158 views

回答

17

如果你指的是使用input方法,是的,你可以在技术上开拓system/libraries/Input.php,低着头此代码:

/** 
* Clean Input Data 
* 
* This is a helper function. It escapes data and 
* standardizes newline characters to \n 
* 
* @access private 
* @param string 
* @return string 
*/ 
function _clean_input_data($str) 
{ 
    if (is_array($str)) 
    { 
     $new_array = array(); 
     foreach ($str as $key => $val) 
     { 
      $new_array[$this->_clean_input_keys($key)] = $this->_clean_input_data($val); 
     } 
     return $new_array; 
    } 

    // We strip slashes if magic quotes is on to keep things consistent 
    if (get_magic_quotes_gpc()) 
    { 
     $str = stripslashes($str); 
    } 

    // Should we filter the input data? 
    if ($this->use_xss_clean === TRUE) 
    { 
     $str = $this->xss_clean($str); 
    } 

    // Standardize newlines 
    if (strpos($str, "\r") !== FALSE) 
    { 
     $str = str_replace(array("\r\n", "\r"), "\n", $str); 
    } 

    return $str; 
} 

,并在之后的XSS干净,你可以把你自己的过滤功能,像这样:

// Should we filter the input data? 
if ($this->use_xss_clean === TRUE) 
{ 
    $str = $this->xss_clean($str); 
} 

$str = strip_tags($str); 

但这意味着每次更新CodeIgniter时,都必须重新进行此更改。此外,由于这在全球范围内完成了这一切,所以如果您获得的价值是数字,那么它就没有意义。由于这些原因

Code Igniter Cat Does Not Approve

现在一个替代的解决方案,你可以使用CodeIgniter Form Validation库,它让你设置字段的自定义规则,包括PHP函数,可以接受一个参数,如strip_tags

$this->form_validation->set_rules('usertext', 'User Text', 'required|strip_tags'); 

我不确定情况是什么,所以我会让你决定采取哪条路径,但总的来说,我建议在每个案例的基础上处理数据验证,因为在大多数情况下,验证数据是唯一的。

+3

林不知道我能投了这个足以做到公正。谢谢你的回答和笑声! – neolaser 2011-05-14 06:09:41

+2

+1代言人猫 – CyberJunkie 2012-08-31 04:07:12

+0

你不应该使用strip_tags。它完全删除了标签。即用户没有得到与他输入相同的输出,而是使用htmlspecialchars。它会给用户相同的输出,但会使其无害。 – ANTARA 2016-06-21 11:59:04

2

这是我用的时候我想消除XSS,HTML和仍然保留用户的帖子内容(甚至是恶意代码的尝试)

private function stripHTMLtags($str) 
{ 
    $t = preg_replace('/<[^<|>]+?>/', '', htmlspecialchars_decode($str)); 
    $t = htmlentities($t, ENT_QUOTES, "UTF-8"); 
    return $t; 
} 

第一个正则表达式删除具有HTML格式和ヶ辆一切照顾报价和东西。 每次你需要清理干净的东西时,在你的控制器上使用它。快速和简单。

例如,这个非常恶意的海峡有很多代码标签和东西

Just another post (http://codeigniter.com) blablabla text blabla:</p>1 from users; update users set password = 'password'; select * <div class="codeblock">[aça]<code><span style="color: rgb(221, 0, 0);">'username'</span><span style="color: rgb(0, 119, 0);">);&nbsp;</span><span style="color: rgb(255, 128, 0);">//&nbsp;filtered<br></span><span style="color: rgb(0, 0, 187);">- HELLO I'm a text with "-dashes_" and stuff '!!!?!?!?!$password&nbsp;</span></span> 

<确定。 >

变为

Just another post (http://codeigniter.com) blablabla text blabla:1 from users; update users set password = 'password'; select * [aça]'username');&nbsp;//&nbsp;filtered- HELLO I'm a text with "-dashes_" and stuff '!!!?!?!?!$password&nbsp; <ok.> 

它仍然有代码,但不会在你的数据库做任何事情。 使用它像

$this->stripHTMLtags($this->input->post('html_text')); 

你可以把这个函数库里面,所以你不必砍CI :)