Codeigniter - 消毒输入的最佳实践

vin*_*ent 6 php validation codeigniter sanitize

我想知道使用Codeigniter清理用户输入的最佳做法是什么.

我知道CI提供了form_validation,例如set_rules.

'set_rules'=>'trim|xss_clean|alpha_numeric|htmlspecialchars'
Run Code Online (Sandbox Code Playgroud)

"任何接受一个参数的本机PHP函数都可以用作规则,如htmlspecialchars,trim,MD5等."

我现在的问题是,

这足以保护我们免受xss,sql注入攻击等?

我可以申请哪些其他规则?

在绩效方面,我们将所有这些规则应用于所有投入是否代价高昂?

我理解MD5是一个哈希函数,但是如果你将MD5设置为规则的一部分会发生什么?

以上我也添加了javascript验证.我是否正确处理消毒输入和验证用户输入?请指教.

Rep*_*pox 14

消毒更多的是通过各种过滤器运行您的输入.

消除您的输入是关于不使用您不想要的用户数据污染您的应用程序.
但是,最重要的问题是,你不想要的是什么?

第一个例子

您创建了一个页面,允许用户发送短信.您的预期输入将是电话号码和短信.
看一下手册中的规则参考,我可能会考虑这些规则:

numeric|exact_length[8]
Run Code Online (Sandbox Code Playgroud)

这些规则,因为我想确保输入是nummeric并且输入与我所在区域中的phonenumbers的长度相匹配.由于我已经验证输入是nummeric,我可以假设XSS和SQL注入尝试失败(因为这些攻击包含非nummeric字符).

对于文本消息字段,我会使用trim和required:trim|required因为我不想发送空消息.

第二个例子

允许用户发表评论是允许用户向您的网站发送垃圾邮件或注入恶意代码的好方法.

基本上,你不是一个名字,一封电子邮件和评论.

需要所有输入.电子邮件需要验证.但是注释和名称需要对XSS和开销空间/换行进行一些清理.

我对sanitazion的验证看起来像这样:

$this->form_validation->set_rules('name', 'Name', 'required|trim|xss_clean');
$this->form_validation->set_rules('email', 'Email', 'required|trim|valid_email');
$this->form_validation->set_rules('comment', 'Comment', 'required|trim|xss_clean');
Run Code Online (Sandbox Code Playgroud)

消毒你必须的东西 - 而不是你能做什么 - 并为你所需要的东西做好准备.
确保在将数据插入后端时使用Active Record/Query Builder正确转义输入,或者使用Query Bindings为您执行相同操作.