Yii框架防止sql注入,xss攻擊與csrf攻擊的方法
本文實(shí)例講述了Yii框架防止sql注入,xss攻擊與csrf攻擊的方法。分享給大家供大家參考,具體如下:
PHP中常用到的方法有:
/* 防sql注入,xss攻擊 (1)*/ function actionClean($str) { $str=trim($str); $str=strip_tags($str); $str=stripslashes($str); $str=addslashes($str); $str=rawurldecode($str); $str=quotemeta($str); $str=htmlspecialchars($str); //去除特殊字符 $str=preg_replace("/\/|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\_|\+|\{|\}|\:|\<|\>|\?|\[|\]|\,|\.|\/|\;|\'|\`|\-|\=|\\\|\|/", "" , $str); $str=preg_replace("/\s/", "", $str);//去除空格、換行符、制表符 return $str; } //防止sql注入。xss攻擊(1) public function actionFilterArr($arr) { if(is_array($arr)){ foreach($arr as $k => $v){ $arr[$k] = $this->actionFilterWords($v); } }else{ $arr = $this->actionFilterWords($arr); } return $arr; } //防止xss攻擊 public function actionFilterWords($str) { $farr = array( "/<(\\/?)(script|i?frame|style|html|body|title|link|meta|object|\\?|\\%)([^>]*?)>/isU", "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU", "/select|insert|update|delete|drop|\'|\/\*|\*|\+|\-|\"|\.\.\/|\.\/|union|into|load_file|outfile|dump/is" ); $str = preg_replace($farr,'',$str); return $str; } //防止sql注入,xss攻擊(2) public function post_check($post) { if(!get_magic_quotes_gpc()) { foreach($post as $key=>$val){ $post[$key] = addslashes($val); } } foreach($post as $key=>$val){ //把"_"過濾掉 $post[$key] = str_replace("_", "\_", $val); //把"%"過濾掉 $post[$key] = str_replace("%", "\%", $val); //sql注入 $post[$key] = nl2br($val); //轉(zhuǎn)換html $post[$key] = htmlspecialchars($val); //xss攻擊 } return $post; }
調(diào)用:
//防止sql $post=$this->post_check($_POST); //var_dump($post);die; $u_name=trim($post['u_name']); $pwd=trim($post['pwd']); if(empty($u_name)||empty($pwd)) { exit('字段不能非空'); } $u_name=$this->actionFilterArr($u_name); $pwd=$this->actionFilterArr($pwd); //防止sql注入,xss攻擊 $u_name=$this->actionClean(Yii::$app->request->post('u_name')); $pwd=$this->actionClean(Yii::$app->request->post('pwd')); $email=$this->actionClean(Yii::$app->request->post('email')); //防止csrf攻擊 $session=Yii::$app->session; $csrf_token=md5(uniqid(rand(),TRUE)); $session->set('token',$csrf_token); $session->set('token',time()); //接收數(shù)據(jù) if($_POST) { if(empty($session->get('token')) && $session->get('token')!=Yii::$app->request->post('token') && (time()-$session->get('token_time'))>30){ exit('csrf攻擊'); } //防止sql .....
(必須放在接收數(shù)據(jù)之外)
注意:
表單提交值,為防止csrf攻擊,控制器中需要加上:
//關(guān)閉csrf piblic $enableCsrfValidation = false;
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP使用Session遇到的一個(gè)Permission denied Notice解決辦法
這篇文章主要介紹了PHP使用Session遇到的一個(gè)Permission denied Notice解決辦法,本文系統(tǒng)環(huán)境是ubuntu、Debian系統(tǒng),有很小的概率會(huì)遇到這個(gè)提示,需要的朋友可以參考下2014-07-07php如何用PDO操作大數(shù)據(jù)對(duì)象
我們?cè)谑褂脭?shù)據(jù)庫時(shí),很少會(huì)向數(shù)據(jù)庫中存儲(chǔ)很大的內(nèi)容字段。但是,MySQL 其實(shí)也為我們準(zhǔn)備了這種類型的存儲(chǔ),只是我們平常用得不多而已。今天我們就來學(xué)習(xí)了解一下使用 PDO 如何操作 MySQL 中的大數(shù)據(jù)對(duì)象。2021-06-06php+mongodb判斷坐標(biāo)是否在指定多邊形區(qū)域內(nèi)的實(shí)例
本篇文章主要介紹了php+mongodb判斷坐標(biāo)是否在指定多邊形區(qū)域內(nèi)的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2016-10-10Thinkphp 框架擴(kuò)展之Widget擴(kuò)展實(shí)現(xiàn)方法分析
這篇文章主要介紹了Thinkphp 框架擴(kuò)展之Widget擴(kuò)展實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Thinkphp 框架Widget擴(kuò)展概念、原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2020-04-04tp5框架基于ajax實(shí)現(xiàn)異步刪除圖片的方法示例
這篇文章主要介紹了tp5框架基于ajax實(shí)現(xiàn)異步刪除圖片的方法,結(jié)合實(shí)例形式詳細(xì)分析了thinkPHP5使用ajax異步刪除圖片前臺(tái)提交與后臺(tái)處理相關(guān)操作技巧,需要的朋友可以參考下2020-02-02ThinkPHP3.2.3框架郵件發(fā)送功能圖文實(shí)例詳解
這篇文章主要介紹了ThinkPHP3.2.3框架郵件發(fā)送功能,結(jié)合圖文與實(shí)例形式詳細(xì)分析了基于thinkPHP框架進(jìn)行郵件發(fā)送的相關(guān)原理、配置及操作技巧,需要的朋友可以參考下2019-04-04php獲取網(wǎng)頁中圖片、DIV內(nèi)容的簡單方法
這篇文章主要介紹了php獲取網(wǎng)頁中圖片、DIV內(nèi)容的簡單方法,都是通過正則表達(dá)式實(shí)現(xiàn)的,強(qiáng)大的正則啊,需要的朋友可以參考下2014-06-06thinkphp3.2.3版本的數(shù)據(jù)庫增刪改查實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄猼hinkphp3.2.3版本的數(shù)據(jù)庫增刪改查實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09