我想知道什么是最好的做法用笨消毒用户输入。
我明白,CI提供form_validation,如set_rules。
'set_rules'=>'trim|xss_clean|alpha_numeric|htmlspecialchars'
“接受一个参数的任何本机PHP功能可以作为一条规则,像用htmlspecialchars,修剪,MD5等。”
我现在的问题是,
这是否足以保护我们免受XSS,SQL注入攻击等?
什么其他的规则是没有办法,我可以申请吗?
在性能方面,它是昂贵的我们应用这些规则对所有的投入?
我的理解是MD5散列功能可按,但是如果你设置MD5作为规则的一部分,会发生什么?
上面我已经添加JavaScript验证为好。 我是在消毒的投入和验证用户输入正确的轨道上? 请指教。
消毒是更多的只是通过各种过滤器运行你的输入。
消毒您输入有关不污染与你不想用户数据的应用程序。
最大的问题,不过,是你不想要的东西?
第一个例子
你已经做了一个页面,允许用户发送短信。 您预计投入将是一个电话号码和短信。
综观规则的参考手册中,我可能会去这些规则:
numeric|exact_length[8]
这些规则,因为我想,以确保输入是nummeric并且输入PHONENUMBERS的长度匹配在我区。 既然我已经验证输入的是nummeric,我可以假设,XSS和SQL注入尝试将失败(因为这些攻击包含非nummeric字符)。
对于短信场,我会用修剪和要求: trim|required
,因为我不wan't发送空消息。
第二个例子
允许用户发表评论,就是让用户的垃圾邮件网站或注入恶意代码的好方法。
基本上,你wan't什么是名称,电子邮件和评论。
所有输入需要被需要。 电子邮件需要验证。 但是,评论和名称都需要有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');
清理你必须 - 不是你可以 - 你需要什么做sanitaziton。
确保,当你插入数据到后端使用的Active Record /查询生成器的正确逃避你的输入,或者你正在使用的查询绑定该做同样为您服务。
如果你正在寻找一个私有函数,
function sanitizeString($value = ''){
$value = trim($value);
if (get_magic_quotes_gpc()) { $value = stripslashes($value); }
$value = strtr($value,array_flip(get_html_translation_table(HTML_ENTITIES)));
$value = strip_tags($value);
$value = mysqli_real_escape_string(get_mysqli(), $value);
$value = htmlspecialchars($value);
return $value;
}
function get_mysqli() {
$db = (array)get_instance()->db;
return mysqli_connect('localhost', $db['username'], $db['password'], $db['databse']);
}
我用这个作为一个自定义函数来消毒的形式传递的每个参数,进一步此我们可以添加更多的自定义函数,我希望。 总是有一个自定义功能是一个优势array_map
或array_walk
也可以使用进一步简化它对于像_GET,$ _POST等阵列