笨 - 净化输入的最佳实践(Codeigniter - best practice to sanit

2019-07-19 14:01发布

我想知道什么是最好的做法用笨消毒用户输入。

我明白,CI提供form_validation,如set_rules。

'set_rules'=>'trim|xss_clean|alpha_numeric|htmlspecialchars'

“接受一个参数的任何本机PHP功能可以作为一条规则,像用htmlspecialchars,修剪,MD5等。”

我现在的问题是,

这是否足以保护我们免受XSS,SQL注入攻击等?

什么其他的规则是没有办法,我可以申请吗?

在性能方面,它是昂贵的我们应用这些规则对所有的投入?

我的理解是MD5散列功能可按,但是如果你设置MD5作为规则的一部分,会发生什么?

上面我已经添加JavaScript验证为好。 我是在消毒的投入和验证用户输入正确的轨道上? 请指教。

Answer 1:

消毒是更多的只是通过各种过滤器运行你的输入。

消毒您输入有关不污染与你不想用户数据的应用程序。
最大的问题,不过,是你不想要的东西?

第一个例子

你已经做了一个页面,允许用户发送短信。 您预计投入将是一个电话号码和短信。
综观规则的参考手册中,我可能会去这些规则:

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 /查询生成器的正确逃避你的输入,或者你正在使用的查询绑定该做同样为您服务。



Answer 2:

如果你正在寻找一个私有函数,

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_maparray_walk也可以使用进一步简化它对于像_GET,$ _POST等阵列



文章来源: Codeigniter - best practice to sanitize input