最安全的方式来获取用户输入,将其放在数据库中,并使用php输出它

时间:2015-05-09 17:37:36

标签: php codeigniter xss sanitization input-sanitization

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

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

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

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

  4. 你很高兴......

    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

答案 1 :(得分:0)

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

  • 我想在保存数据或加载数据时防范xss吗?
  • 用户输入修改会如何影响用户体验?有问题吗?有自动修复吗?
  • 如果我在展示时屏蔽xss,是否有可能忘记任何地方?如果是这样,有没有办法消除这种潜在的安全漏洞?

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