【问题标题】:how sanitize input codeigniter 3?如何清理输入codeigniter 3?
【发布时间】:2016-01-29 21:21:06
【问题描述】:

首先,我应该提醒您,我已经阅读了this post 和其他一些关于我的问题的帖子,但大多数帖子都差不多老了,大约是 3 年前。

现在我正在使用 CodeIgniter 3,我想知道在插入数据库之前我从用户那里检索数据的最佳清理过滤器是什么。

这是为我的网站注册的,我不知道注册的是哪种用户,我无法信任他们。我想在将所有输入插入数据库之前对其进行清理可能会很危险我不知道input 类足以对其进行清理吗?
请告诉我codeigniter的消毒功能!

我已经阅读了 codeigniter 文档中的安全类,但我想确定一下。

【问题讨论】:

    标签: php codeigniter security input input-sanitization


    【解决方案1】:

    根据Docsinput 类执行以下操作:

    • 过滤 GET/POST/COOKIE 数组键,只允许字母数字(和少数其他)字符。
    • 提供 XSS(跨站点脚本攻击)过滤。这可以全局启用,也可以根据要求启用。
    • 还有其他一些处理,不过为了安全,这就够了。

    所以,这解决了 SQL 注入和 XSS 的问题。对于大多数用途来说,这就足够了。

    要启用XSS 保护,请使用:

    $val = $this->input->post('some_data', TRUE); // last param enables XSS protection.
    

    另外,您可能需要查看CSRF 保护。但是,如果您正在执行 ajax 调用,则启用它有点棘手。

    【讨论】:

    • 我正在使用 ajax ,我想上传文件 ajax 。是否不正确?
    • 当然不是。但是如果你启用了CSRF,你会遇到很多问题让它工作。就个人而言,在我所有的 CI 项目中,我毫无遗憾地使用了$this->input->post(到目前为止)。并且没有遇到任何安全漏洞
    • 在启用 CSRF 的情况下让 AJAX 工作并不是很困难。所需的小步骤很容易实现,非常值得考虑。
    • 你最好再检查一遍。 CI3 手册说 GLOBAL_XSS_FILTERING 已弃用,xss_filtering 应该用于输出,而不是输入。
    • 诸如“尝试在真实框架中启动新项目,例如 Zend、Laravel 等”这样的评论在 StackOverflow 上是完全不合适的。请熟悉社区准则。
    【解决方案2】:

    在接受任何数据到您的应用程序之前,无论是来自表单提交的 POST 数据、URI 数据,您必须按照以下步骤操作:

    1. 过滤数据。
    2. 验证数据以确保其符合正确的类型、长度、大小等(有时这一步可以代替 第一步)
    3. 在将数据提交到数据库之前对其进行转义。 CodeIgniter 提供以下函数来协助完成此过程:

    XSS 过滤

    此过滤器查找常用技术来嵌入恶意软件 JavaScript 到您的数据中

    要通过 XSS 过滤器过滤数据,请使用 xss_clean() 方法:Read More

    验证数据

    CodeIgniter 有一个表单验证库,可帮助您验证、过滤和准备数据

    $this->form_validation->set_rules('username', 'Username','trim|required|min_length[5]|max_length[12]');

    修剪字段,在必要时检查长度并确保两个密码字段匹配。 Read more

    在插入数据库之前转义所有数据

    永远不要在未转义的情况下将信息插入数据库。

    请参阅查询构建器类以获取更多信息https://www.codeigniter.com/userguide3/database/query_builder.html

    更多信息

    Codeigniter 不会让你的应用程序安全看到这个https://security.stackexchange.com/questions/97845/how-secure-is-codeigniter-3-x

    一切都取决于开发者。框架只会提供一个结构来构建你的应用程序。如果你编写核心 php,你会更安全。

    更多链接:

    How do you use bcrypt for hashing passwords in PHP?

    Are PDO prepared statements sufficient to prevent SQL injection?

    【讨论】:

    • 诸如“编写核心 php 会更安全”之类的评论。是意见,在答案中并不受欢迎。此外,您的答案中的链接已损坏,可能需要修复这些链接。
    猜你喜欢
    • 1970-01-01
    • 2014-08-12
    • 2013-01-23
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多