【问题标题】:CodeIgniter's XSS Protection is removing <script> tags from user inputs... but I don't want it to!CodeIgniter 的 XSS 保护正在从用户输入中删除 <script> 标记......但我不希望它这样做!
【发布时间】:2010-11-22 23:24:13
【问题描述】:
CodeIgniter 非常棒,但我正在使用它来开发一个网站,用户需要在该网站上分享他们的网站代码。不幸的是,CodeIgniter 一直在做“正确”的事情,从我的用户输入到数据库中删除 <script> 标签,所以当它返回的数据看起来像这样:
[已删除] 用户数据 [已删除]
但是,我需要我的网站来显示脚本标签,但显然不需要解析它们。如何让 CodeIgniter 或 PHP 返回 <script> 标签,但仍为数据库清理它们并在不执行它们的情况下返回它们?
谢谢!
杰克
编辑:顺便说一句,使用 Markdown 之类的东西不是一个选项,所有内容都必须输出到可复制粘贴的代码,无需在其他地方修改即可工作
【问题讨论】:
标签:
php
codeigniter
xss
script-tag
【解决方案1】:
那么,您希望显示脚本标签,但又不希望它们被浏览器呈现?
如果是这样,那么我会使用一个简单的htmlspecialchars() 函数来解析代码并将所有&lt;script&gt; 标签转换为&lt;script&gt;。
我相信 CodeIgniter 中的一个有点等价的函数是来自 Form helper 的form_prep(),但它在表单元素之外的行为我不知道。所以htmlspecialchars() 函数应该满足你的要求。
我同意上述 Tom 的观点,如果您不希望表单元素在保存之前被剥离 script 标签,则需要禁用全局 XSS 过滤。
【解决方案2】:
我猜你在 config.php 文件中将 XSS 保护设置为全局,将其更改为我下面的内容
/*
|--------------------------------------------------------------------------
| Global XSS Filtering
|--------------------------------------------------------------------------
|
| Determines whether the XSS filter is always active when GET, POST or
| COOKIE data is encountered
|
*/
$config['global_xss_filtering'] = FALSE;