Codeigniter如何处理转义输出?

Kan*_*iya 15 php codeigniter

我正在使用CodeIgniter.

最近,我读了一本PHP书,看到了一些函数,用于将输出转换为服务器到数据库

*_escape_string()
Run Code Online (Sandbox Code Playgroud)

从服务器到浏览器使用:

htmlentities()
htmlspecialchars()
Run Code Online (Sandbox Code Playgroud)

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

在Ccodeigniter表单验证中,我已经看到了 xss_clean

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

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

Wes*_*rch 15

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

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

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

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

xss_clean()在我看来,CI 对于我们这些不知道如何以及何时正确逃避数据的人来说更像是一种失败保障.你通常不需要它.它一直是批评的目标,因为它的缓慢,积极的方法来消毒数据,以及只是"不够好".

对于转义HTML输出,在大多数情况下htmlspecialchars()是您所需要的,但您可以随时使用该xss_clean()功能.我不建议将它用作表单验证规则,因为它会破坏您的输入,插入[removed]原始字符串中发现"顽皮"的地方.相反,您可以手动调用它来清理输出.

摘要:

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

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

  • xss_clean() - 如果你知道自己在做什么,就不应该需要它.最好在输出上使用而不是输入.