消毒不仅仅是通过各种过滤器运行您的输入。
清理您的输入是为了不让您不想要的用户数据污染您的应用程序。
但是,最大的问题是,您不想要什么?
第一个例子
您已经创建了一个页面,允许用户发送文本消息。您预期的输入将是电话号码和短信。
查看手册中的规则参考,我可能会选择这些规则:
numeric|exact_length[8]
这些规则我想确保输入是数字的,并且输入与我所在地区的电话号码长度相匹配。由于我已经验证输入是数字,我可以假设 XSS 和 SQL 注入尝试应该失败(因为这些攻击包含非数字字符)。
对于文本消息字段,我会使用 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');
消毒你必须做的——而不是你能做的——并为你需要的做清洁。
确保当您将数据插入后端以使用Active Record/Query Builder正确转义您的输入时,或者您正在使用对您执行相同操作的查询绑定。