获取用户输入、将其放入数据库并使用 php 输出的最安全方式

safest way to take user input, put it on database, and the output it using php

这是我今天遇到的最令人困惑的部分,我正在使用 codeigniter,但它的 xss 过滤器似乎没有像我们预期的那样正常工作,所以我们尝试在将数据保存到数据库时使用 htmlentities,但是我在某处读到,我们永远不应该 change/edit 用户将数据输入数据库,我们应该在浏览器上输出时始终这样做,所以在这里我完全困惑什么是最安全和最好的用户输入方式,保存在数据库中并使用 php

输出该数据

这取决于你的意图。如果有人在不了解您的项目的情况下告诉您永远不应该修改用户的输入,那么他或她就是 bullsh1tt1ng。你需要问自己正确的问题:

  • 我想在数据保存时或数据加载时防止 xss 攻击吗?
  • UX 将如何受到用户输入修改的影响?有什么问题吗?有自动修复吗?
  • 如果我在显示时防止 xss,是否有可能忘记任何地方?如果是这样,是否有办法消除这种潜在的安全漏洞?

但最重要的是,您的问题应该是: 是否有任何有效的潜在原因可以验证用户注入脚本的尝试?

您对 CI XSS 过滤有什么期望,但您认为它无法正常工作?

要回答您的问题,请按照以下所有步骤操作:

  1. 首先验证用户输入数据(在对其进行任何操作之前)而不是过滤和更正它,使用 CodeIgniter Form Validation Class

    指南Link:https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html

  2. 对于您的数据库查询,请使用 CodeIgniter Active Record Class,所有数据都会自动转义

    例如$this->db->insert('mytable', $data);

    指南Link:https://ellislab.com/codeigniter/user-guide/database/active_record.html

  3. 从数据库或其他任何地方回显用户输入数据 使用 CodeIgniter html_escape() 函数

一切顺利...

P.S. Links were for version 2.2, if you're using version 3, routine is the same but simply find the guide on codeigniter.com