1. 程式人生 > >常見漏洞及處理方法

常見漏洞及處理方法

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值進行比較,如果兩值相等則進行下一步操作,否則程式則中止執行