如何使用 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()。
您好,感谢阅读。
我使用 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()。