Php 如何使用codeigniter中的set_value功能避免双重逃逸并确保xss安全

Php 如何使用codeigniter中的set_value功能避免双重逃逸并确保xss安全,php,codeigniter-3,xss,Php,Codeigniter 3,Xss,嗨,谢谢你的阅读 我使用PHP7.0处理CodeIgniter 3,并使用form_助手的表单 首先,在控制器中使用表单验证库之后,我在使用set_value函数重新填充表单时遇到问题。我在form_helper中使用了set_值,如下所示: $my_input = array( 'name' => 'my_name', 'value' => set_value('my_name') ); echo form_label('Title :'); echo form_t

嗨,谢谢你的阅读

我使用PHP7.0处理CodeIgniter 3,并使用form_助手的表单

首先,在控制器中使用表单验证库之后,我在使用set_value函数重新填充表单时遇到问题。我在form_helper中使用了set_值,如下所示:

$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
she's the chief's lady
因此,对于这样的文本:

$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
she's the chief's lady
表单重新填充如下:

$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
she's the chief's lady
这不是什么大问题,因为当我注册这些数据并填写一个字段时,它将以HTML格式生成正确的句子

但如果表格中有其他错误,则句子将如下所示:

$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
she's the chief's lady
现在我的数据不再正确了

因此,我阅读了CodeIgniter的文档,发现:

第三个(可选)参数允许您关闭的HTML转义 如果需要将此函数与 i、 e.形成_input()并避免双重转义

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

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

2) 唯一一个看到邪恶输入的人就是编写它的人,但它对我的web应用程序是否仍然有危险

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


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

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

但是,关于JavaScript或其他标记,您有一个很好的观点。假设唯一可以访问输入框的人是其内容的作者,并且当其他人查看输入框时,您正在逃避其结果,那么他们唯一可以为自己生成警报框(或更糟)的人就是他们自己,当然他们可以在控制台中执行此操作


如果您仍然担心,您可以在这个领域使用PHP。

因此,如果我理解得很好,它对应用程序和最终用户来说并不危险,因为它只影响坏内容的作者!?我只想知道这些,谢谢你的回答;)PS:有趣的函数strip_tags(),但不是100%安全,所以我更喜欢HTML净化器。我想了想你说的话,我还有另一个问题:如果用发送的数据重新填充表单时没有危险,为什么我们需要在set_value()中将转义参数设置为FALSE?为什么默认值没有设置为FALSE?当然,你能确认一下这个事实吗?唯一一个看到邪恶输入的人就是编写它的人,但它对我的web应用程序是否仍然有危险???谢谢你,托马斯·爱德华兹