我正在开发一个允许用户提交博客帖子的网站,但是,似乎有一点问题。我正在使用global_xss_filtering
(TRUE
),因此所有内容都会被过滤掉。
但是,当我使用xss_filtering
时,正删除了<strong>
等HTML标记。如果我将global_xss_filtering
设置为FALSE
,一切都很有效。
但是如何才能将此global_xss_filtering
设置为TRUE
并同时保护?有什么建议?
答案 0 :(得分:2)
问题在于:
如果您打开了全局xss_clean,则输入类构造函数会通过$_GET
清除所有$_POST
,$_COOKIE
和_sanitize_globals()
数据。
这种情况在CI执行中发生得太早,您以后可以对此做任何事情。一旦数据为xss_cleaned
,就无法取消清理。
您有两种选择:
我没有任何关于使用钩子的建议,但我建议简单地禁用全局xss_clean,原因如下:
明显:它不会改变数据,并将你置于控制之下,鼓励你注意XSS攻击实际发生的时间和地点。
xss_clean函数非常繁重且具有攻击性,大多数情况下您不需要它。在每个帖子,get和Cookie项目上运行它会占用执行时间。
将xss_clean
添加为表单验证规则或使用$this->security->xss_clean()
作为最佳做法,您仍然应该清理数据和HTML输出,而不是信任全局过滤器并忘记它。
我需要为CMS提供<script>
标记,并且禁用全局过滤器是获取它们的唯一方法。这是一个很大的变化,可能会让你感到紧张,但不幸的是,这是唯一的方法(除非你能弄明白如何编写一个有用的钩子)。
正如评论中所提到的,它不应该过滤<strong>
标签...
答案 1 :(得分:0)
在您应用XSS验证之前,您可以使用htmlentities(),然后当您从数据库中获取它时,您可以使用html_entity_decode()。
答案 2 :(得分:0)