Codeigniter 如何处理转义输出?

2022-08-31 01:09:04

我正在使用CodeIgniter。

最近,我读了一本PHP书,看到了一些函数,可以使用

*_escape_string()

以及从服务器到浏览器,使用:

htmlentities()
htmlspecialchars()

在我的 Codeigniter 应用程序中,如何处理这些函数?它是由框架内部处理的,还是我必须手动处理它?

在Ccodeigniter表单验证中,我见过xss_clean

$this->form_validation->set_rules('password', 'Password', 'required|xss_clean|min_length[6]|matches[confirmpassword]' );

是为了防止跨站点脚本,还是它处理我上面提到的上述内容?xss_clean


答案 1

如果您使用的是 Active Record 类,则通常不需要转义发送到数据库的任何内容 - 它会自动完成:

http://codeigniter.com/user_guide/database/active_record.html

“它还允许更安全的查询,因为系统会自动转义这些值。

手动转义似乎正在成为过去,因为大多数人现在都使用PDO进行数据库交互,使用带有占位符的参数化查询,而不是将SQL字符串混合在一起。不过,CI 仍然在内部使用这些函数。mysql_*

在我看来,CI对于我们这些不知道如何以及何时正确逃避数据的人来说更像是一种故障保险。您通常不需要它。它一直是批评的目标,因为它在清理数据方面采取了缓慢而激进的方法,而且只是“不够好”。xss_clean()

对于转义HTML输出,在大多数情况下,您只需要这样做,但您可以随时使用该函数。我不建议将其用作表单验证规则,因为它会损坏您的输入,插入原始字符串中发现“顽皮”内容的位置。相反,您可以手动调用它来清理输出htmlspecialchars()xss_clean()[removed]

总结:

  • 数据库:CI 将(通常)转义您传递给 Active Record 类的字符串。
    有关详细信息,请参阅用户指南:http://codeigniter.com/user_guide/database/queries.html

  • HTML输出:您需要自己使用或使用CI的函数(从2.1.0开始)来转义HTML输出。这不会自动完成,因为无法知道您使用数据的上下文。htmlspecialchars()html_escape()

  • xss_clean()- 如果你知道你在做什么,你就不需要它。在输出上使用比在输入上使用更好。


答案 2

默认的 CodeIgniter 视图只是 PHP,因此您可以在视图文件中使用 htmlentities() 和 htmlspecialchars()。

为了将数据转义到数据库中(即防止SQL注入),CodeIgniter提供了参数化查询。基本上,把一个 ?在 SQl 中,无论要插入一段数据,然后提供数组中的所有数据。请参阅 http://codeigniter.com/user_guide/database/queries.html 中的“查询绑定”。在该页面上,另请参阅“转义查询”,其中描述了 *_escape_string 函数的 CI 包装器。但是,查询绑定/参数化查询是更好的方法。


推荐