作者:白狼 出處: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,又是怎樣處理的喃?
<?= \yii\helpers\Html::encode($title) //純文本 ?>
<?= \yii\helpers\HtmlPurifier::process($content) //html顯示的文本 ?>
注意: HtmlPurifier 幫助類的處理過程較為費時,建議增加緩存