Yii框架防止sql注入,xss攻击与csrf攻击的方法

时间:2021-05-02

本文实例讲述了Yii框架防止sql注入,xss攻击与csrf攻击的方法。分享给大家供大家参考,具体如下:

PHP中常用到的方法有:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 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); //转换html $post[$key] = htmlspecialchars($val); //xss攻击 } return $post; }

调用:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 //防止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()); //接收数据 if($_POST) { if(empty($session->get('token')) && $session->get('token')!=Yii::$app->request->post('token') && (time()-$session->get('token_time'))>30){ exit('csrf攻击'); } //防止sql .....

(必须放在接收数据之外)

注意:

表单提交值,为防止csrf攻击,控制器中需要加上:

? 1 2 //关闭csrf piblic $enableCsrfValidation = false;

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章