码迷,mamicode.com
首页 > 其他好文 > 详细

常见漏洞及处理方法

时间:2015-06-23 18:01:14      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:php   漏洞   sql注入   csrf   xss   

1、sql注入

      什么是sql注入?就是用户输入特殊字符改变原有sql的语义,这就叫sql注入。

      我们看一下例子:

      首先建立一个简单的user表模拟一下sql注入,如图所示

      技术分享

     然后我们模拟一下用户登录:  

$username = $_POST['username'];
$passwd = $_POST['passwd'];
$sql = "select * from user where username='$username' and passwd='$passwd'";
$result = mysql_query($sql);
if($result){
    echo 'login success';
}else{
    echo 'login failed';
}
      如果用户输入的username=beggar和passwd=123456,此用户是可以登录的。

      思考一下,如果用户输入的数据为username=beggar和passwd=‘ or ‘1=1‘,此时的sql语句为select * from user where username=‘beggar‘ and passwd=‘‘ or ‘1=1‘;

      这样这个用户就可以在不知道密码的情况下登录成功。

      如何防止呢?

      在后台应当对用户输入的数据进行一定的过滤,我们也可以写一个方法进行处理接收到的数据,如:  

function add_slashes($name, $type){
    switch ($type){
        case 'integer' :
            if(is_array($name)){
                foreach ($name as $key=>$val){
                    $name[$key] = intval($val);
                }
            }else{
                if(isset($_POST[$name])){
                    $name = intval($_POST[$name]);
                }elseif(isset($_GET[$name])){
                    $name = intval($_GET[$name]);
                }
            }
        break;
        case 'string' :
            if(!get_magic_quotes_gpc()){
                if(is_array($name)){
                    foreach ($name as $key=>$val){
                        $name[$key] = addslashes($val);
                    }
                }elseif(isset($_GET[$name])){
                    if(isset($_POST[$name])){
                        $name = addslashes($_POST[$name]);
                    }else{
                        $name = addslashes($_GET[$name]);
                    }
                }
            }
        break;
    }
    return strip_tags($name);
}
2、XSS攻击

      后台接收到数据并显示出来:

$username = $_POST['username'];
$passwd = $_POST['passwd'];
echo 'user info :<br/>';
echo 'username:' . $username . '<br/>';
echo 'passwd:' . $passwd . '<br/>';
       当用户输入的username为<script>alert("you are a bitch! haha...")</script> (开个玩笑)

       在展示的页面中则会弹出you are a bitch! haha...

       如何防止呢?

       使用PHP自带的strip_tags函数、htmlspecialchars、htmlentities这三个函数都可以对html进行过滤,第一个函数会去除所有html标签,第二个和三个函数则会html标签进行转义

3、csrf攻击

      常用方法是在隐藏表单中加入token法,token是个随机数,在提交表单时候会把token传过去,后台接收到token后则和后台session中的token值进行比较,如果两值相等则进行下一步操作,否则程序则中止运行

常见漏洞及处理方法

标签:php   漏洞   sql注入   csrf   xss   

原文地址:http://blog.csdn.net/bad7code/article/details/46606877

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!