如何使用codeigniter中的set_value功能避免两次转义并避免xss的侵害

时间:2019-03-08 14:29:11

标签: php codeigniter-3 xss

嗨,谢谢阅读。

我使用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的DOC并找到了它:

  

第三个(可选)参数允许您关闭HTML的转义   该值,如果您需要结合使用此功能   即form_input()并避免两次转义。

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

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

2)唯一看到恶意输入的人是编写该输入的人,但是对于我的Web应用程序来说仍然有害吗?

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

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

1 个答案:

答案 0 :(得分:0)

CodeIgniter将在模型中包含任何内容时安全地防止SQL注入。当您只是在浏览器中显示结果时,不会出现注入风险,因为您所做的只是显示他们写回的内容。

但是,您对JavaScript或其他标记很了解。假设唯一可以进入输入框的人是其内容的作者,并且您在其他人查看它时逃避了输入结果,那么他们唯一可以产生一个警告框的人(或更糟糕的是)因为它们本身就是他们,当然他们可以在控制台中完成任何操作。

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