做者:白狼 出处: http://www.manks.top/article/yii2_filter_xss_code_or_safe_to_database 本文版权归做者,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。html
实际开发中,涉及到的语言也好,框架也罢,web安全问题老是不可避免要考虑在内的,潜意识中的考虑。web
意思就是说喃,有一条河,河很深,在没办法游过去的状况下你只能沿着河上惟一的一座桥走过去。sql
好啦,咱们看看在yii框架的不一样版本中是怎么处理xss攻击,sql注入等问题的。数据库
啥啥啥,xss是啥,sql注入又是啥?哦个人天呐,很差意思,我也不知道,这个您问问小度小哥都行,随您。缓存
通俗的说喃,就是两个原则问题:安全
一、表单提交内容,想安全的存入数据库yii2
二、想安全的对数据进行输出框架
有同窗疑问来了,个人数据都安全的存到数据库了,都已是安全的了,咋输出还要过滤呢?博主si是si犯浑,有毛病勒。yii
不着急,咱们先来看看yii中是怎么处理咱们所说的安全问题。xss
不管是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,又是怎样处理的喃?
<?= \yii\helpers\Html::encode($title) //纯文本 ?>
<?= \yii\helpers\HtmlPurifier::process($content) //html显示的文本 ?>
注意: HtmlPurifier 帮助类的处理过程较为费时,建议增长缓存