本文实例讲述了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); //转换html $post[$key] = htmlspecialchars($val); //xss攻击 } return $post; }
调用:
//防止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攻击,控制器中需要加上:
//关闭csrf piblic $enableCsrfValidation = false;
更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
本文向大家介绍如何防止XSS攻击?相关面试题,主要包含被问及如何防止XSS攻击?时的应答技巧和注意事项,需要的朋友参考一下 (1) 将前端输出数据都进行转义 (2) 将输出的字符串中的\反斜杠进行转义 (3) 从url中获取的信息,防止方法是由后端获取,在前端转义后再行输出 (4) 使用cookie的HttpOnly属性,保护好cookie 详细参见:http://blog.csdn.net/fe
防御XSS攻击的一般原理 cleaner是Jsoup的重要功能之一,我们常用它来进行富文本输入中的XSS防御。 我们知道,XSS攻击的一般方式是,通过在页面输入中嵌入一段恶意脚本,对输出时的DOM结构进行修改,从而达到执行这段脚本的目的。对于纯文本输入,过滤/转义HTML特殊字符<,>,",'是行之有效的办法,但是如果本身用户输入的就是一段HTML文本(例如博客文章),这种方式就不太有效了。这个时
什么是CSRF CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。 那么CSRF到底能够干嘛呢?你可以这样简单的理解:攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求。攻击者只要借助少许的社会工程学的诡计,例如通过QQ等聊天软件发送的链接(有些还伪装成
本文向大家介绍csrf和xss的网络攻击及防范?相关面试题,主要包含被问及csrf和xss的网络攻击及防范?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: CSRF:跨站请求伪造,可以理解为攻击者盗用了用户的身份,以用户的名义发送了恶意请求,比如用户登录了一个网站后,立刻在另一个tab页面访问量攻击者用来制造攻击的网站,这个网站要求访问刚刚登陆的网站,并发送了一个恶意请求,这时候CSRF就
本文向大家介绍Laravel5中防止XSS跨站攻击的方法,包括了Laravel5中防止XSS跨站攻击的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Laravel5中防止XSS跨站攻击的方法。分享给大家供大家参考,具体如下: Laravel 5本身没有这个能力来防止xss跨站攻击了,但是这它可以使用Purifier 扩展包集成 HTMLPurifier 防止 XSS 跨站攻击。 1、
问题内容: 我必须在我的java程序中添加一条语句以更新数据库表: 我听说可以通过SQL注入来利用此漏洞,例如: 我的程序具有Java GUI,并且从中检索所有名称,地址和电子邮件值。我想知道黑客如何将以下代码()添加到我的插入语句中,以及如何防止这种情况发生。 问题答案: 您需要使用PreparedStatement。例如 这样可以防止注入攻击。 黑客将其放入其中的方式是,如果您要插入的字符串来