作者:白狼 出处:http://www.manks.top/article/yii2_filter_xss_code_or_safe_to_database 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
实际开发中,涉及到的语言也好,框架也罢,web安全问题总是不可避免要考虑在内的,潜意识中的考虑。
意思就是说喃,有一条河,河很深,在没办法游过去的情况下你只能沿着河上唯一的一座桥走过去。
好啦,我们看看在yii框架的不同版本中是怎么处理xss攻击,sql注入等问题的。
啥啥啥,xss是啥,sql注入又是啥?哦我的天呐,不好意思,我也不知道,这个您问问小度小哥都行,随您。
通俗的说喃,就是两个原则问题:
1、表单提交内容,想安全的存入数据库
2、想安全的对数据进行输出
有同学疑问来了,我的数据都安全的存到数据库了,都已经是安全的了,咋输出还要过滤呢?博主si是si犯浑,有毛病勒。
不着急,我们先来看看yii中是怎么处理我们所说的安全问题。
无论是yii还是yii2版本,数据查询,数据入库,我们都可以很好的用AR操作进行,这样就灰常简单的避免了sql注入问题,为啥就so easy的避免了呢,这是因为在AR的底层,其实对PDO进行的封装,所以喃,妈妈再也不用担心注入的问题了
有同学在嘀咕了,我们查询的sql很复杂的,用yii的AR操作不了,不写sql不行,你看着办吧。吓唬小孩呢,还有操作不了的,头一次见!
当然啦,在不涉及接收参数的情况下,要不要用原生sql您随意,但是涉及外参的情况下,您要是想用sql查询请尽量用占位去操作,不是不相信您自己个的"过滤",其实也是不敢相信,如果您坚持自己个写原生sql,您随意好吧
下面我们来看看问题2,数据安全的输出,这个在yii和yii2中还是有一丁点差别滴。
yii中,纯文本输出呢,很简单,我们对要输出的内容CHtml::encode()即可,别嚷嚷,我知道你想说啥,对于想输出html文本,可以采用如下方式:
$purifier = new CHtmlPurifier;echo $purifier->purify($content);
放心,代码里面的js啥的统统会以文本的形式输出显示,那这里的xss问题我们也就可以放心了。
那要是yii2,又是怎样处理的喃?
[考虑目前国内网站大部分采集文章十分频繁,更有甚者不注明原文出处,原作者更希望看客们查看原文,以防有任何问题不能更新所有文章,避免误导!]