【问题标题】:How to avoid double-escaping and keep safe from xss using the set_value fonction in codeigniter如何使用 codeigniter 中的 set_value 函数避免双重转义并防止 xss
【发布时间】:2019-03-08 14:29:10
【问题描述】:

您好,感谢您的阅读。

我使用 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 的文档并找到了这个:

第三个(可选)参数允许您关闭 HTML 转义 该值,以防您需要将此功能与 即 form_input() 并避免双重转义。

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

1) 什么是保证安全的最佳方法,以及在我必须重新填充表单时避免逃逸??

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

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

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

【问题讨论】:

    标签: php codeigniter-3 xss


    【解决方案1】:

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

    但是,您对 JavaScript 或其他标签有一个很好的看法。假设唯一可以进入输入框的人是其内容的作者,并且当其他人查看它时您正在逃避它的结果,那么他们唯一可以产生警报框的人(或更糟) for 是他们自己,当然他们可以在控制台中做任何事情。

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

    【讨论】:

    • 所以如果我理解得好,这对应用程序和最终用户来说并不危险,因为它只影响不良内容的作者!?这就是我想知道的,谢谢你的回答;) PS:有趣的函数 strip_tags(),但不是 100% 安全,所以我更喜欢 HTML Purifier 之类的东西。
    • 我想你所说的,我还有一个问题:如果用发送的数据重新填充表单时没有危险,为什么我们需要在 set_value( ) ?为什么默认值未设置为 FALSE ?可以肯定的是,你能证实这个事实吗?唯一看到邪恶输入的人是编写它的人,但它对我的 Web 应用程序仍然危险吗???谢谢@Thomas Edwards
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    相关资源
    最近更新 更多