繁体   English   中英

Codeigniter-清理输入的最佳实践

[英]Codeigniter - best practice to sanitize input

我想知道使用Codeigniter清理用户输入的最佳实践是什么。

我知道CI提供form_validation,例如set_rules。

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

“任何可以接受一个参数的本地PHP函数都可以用作规则,例如htmlspecialchars,trim,MD5等。”

我的问题是

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

还有哪些其他规则可以应用?

在性能方面,对所有输入应用所有这些规则是否对我们造成成本?

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

上面我还添加了JavaScript验证。 我在清理输入和验证用户输入方面是否走上了正确的轨道? 请指教。

消毒不仅仅是通过各种过滤器运行您的输入。

清理您的输入意味着不要用不需要的用户数据污染应用程序。
不过,最大的问题是,您不想要什么?

第一个例子

您已经制作了一个页面,允许用户发送短信。 您希望输入的是电话号码和短信。
查看手册中的“ 规则”参考 ,我可能会选择以下规则:

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正确转义输入,或者确保您正在使用与您相同的查询绑定

私人功能,如果您正在寻找,

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,$ array_map等数组

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM