2012-03-03 35 views
4
工作

$this->input->post('question', TRUE)XSS_CLEAN不笨

如果连我添加TRUE,它仍然允许人们添加HTML代码。这是为什么?

回答

5

xss_clean()函数不会删除全部 HTML会删除/替换被认为危险的特定事物,如<script>标记。

http://codeigniter.com/user_guide/libraries/security.html

的XSS过滤器会查找常用技术来触发JavaScript或其他类型的代码试图劫持cookie或做其他恶意行为。如果遇到任何不允许的情况,则通过将数据转换为字符实体来使其变得安全。

有人在您的页面注入<p>标记,虽然可能不需要,但并不是真正有效的攻击。你必须指定你想要用它做什么。在很多情况下,你会想要 HTML输出已被xss_clean()编辑。

这听起来像你想htmlspecialchars()strip_tags()(注意:这两个非常不同的东西)。如果您想编码的HTML,你也可以使用CI的html_escape()

echo html_escape($this->input->post('question')); 

如果你想HTML输出,而不是实体,只是本身使用XSS过滤器:

echo $this->input->post('question', TRUE); 
echo xss_clean($user_input); 
+0

所以,如果我添加html_escape,我想我不需要添加TRUE,对吧? – 2012-03-03 22:28:28

+1

嘿,是的好点。我不是XSS攻击方面的专家,我不能评论CI的过滤器是多么健壮,但我确实相信对于编码而言,'html_escape()'就足够了。如果你想要有实际的HTML输出,但是需要''xss_clean()'''',但是要过滤掉潜在的危险部分。 – 2012-03-03 22:32:10

+1

查看关于'xss_clean()'的这篇文章:http://stackoverflow.com/a/5346696/398242请记住,转义/编码输出始终依赖于上下文相关 - 没有一个工具可以处理每个作业保证你的安全。 – 2012-03-03 22:38:52