如何使用 codeigniter 中的 set_value 函数避免双重转义并避免 xss 攻击

How to avoid double-escaping and keep safe from xss using the set_value fonction in codeigniter

您好,感谢阅读。

我使用 PHP 7.0 开发 CodeIgniter 3,并使用 form_helper.

的表单

首先,在我的控制器中使用 form_validation 库后,我无法使用 set_value 函数重新填充表单。我在我的 form_helper 中使用 set_value 是这样的:

$my_input = array(
    'name' => 'my_name',
    'value' => set_value('my_name')
);
echo form_label('Title :');
echo form_textarea($my_input);

所以像这样的一些文字:

she's the chief's lady

表单重新填写如下:

she's the chief's lady

这不是什么大问题,因为当我注册这个数据并填写一个字段时,在HTML中它会产生正确的句子。

但是如果表格中还有其他错误,那么句子将这样注册:

she's the chief's lady

现在我的数据不对了。

所以我阅读了 CodeIgniter 的文档并发现了这个:

The third (optional) parameter allows you to turn off HTML escaping of the value, in case you need to use this function in combination with i.e. form_input() and avoid double-escaping.

太棒了,解决了我的转义问题。但是 xss 注入呢?这种做法似乎非常危险,我不明白为什么这是最好的方法,如果我相信 CodeIgniter 的 DOC(我使用警报脚本进行了快速测试,但安全性失败了)。所以:

1) 当我必须重新填写表格时,确保安全和避免逃逸的最佳方法是什么???

2) 唯一看到恶意输入的人是编写它的人,但它对我的 Web 应用程序是否仍然危险???

3) 如果用发送的数据重新填充表单没有危险,为什么我们需要在 set_value() 中将转义参数设置为 FALSE?为什么默认值没有设置为 FALSE?

编辑:我添加了最后两个问题

CodeIgniter 将安全地阻止 SQL 任何东西进入其模型时的注入。由于您只是在浏览器中显示结果,因此不存在 注入 风险,因为您所做的只是显示他们写回给他们的内容。

但是,关于 JavaScript 或其他标签,您有一个很好的观点。假设唯一可以访问输入框的人是其内容的作者,并且当其他人查看它时您正在逃避它的结果,那么他们唯一可以产生警告框的人(或更糟) for 是他们自己,他们当然可以在控制台中这样做。

如果您仍然担心,可以随时在此字段上使用 PHP 的 strip_tags()