PHP安全Web攻擊

目錄

SQL注入

  • 說明
    攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造(或者影響)動態SQL命令,或作爲存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊

  • 模擬

    // SQL
    $query = 'SELECT * FROM `user` WHERE `username` = ' . $username . ' AND `password` = '. $password;
    // 在沒有過濾下 如果 $username 或者 $password 爲 '1' OR 1 = 1 ,那麼SQL 爲
    // "SELECT * FROM `user` WHERE `username` = '1' OR 1 = 1 AND `password` = '1' OR 1 = 1";
  • 危害

    • 查詢數據庫中敏感數據
    • 繞過認證
    • 添加、刪除、修改服務器數據
    • 拒絕服務
  • 防範

    • 檢查變量的數據類型和格式
    • 過濾特殊符號
    • SQL組裝的時候,對外部變量以及所有變量都進行過濾
    • 可以用sqlEscape、sqlImplode、sqlSingle、sqlMulti等函數過濾組裝。過濾主要是一些’單引號這些可以破壞SQL組裝的數據
    • 綁定變量,使用預處理語句

跨站腳本攻擊

  • 說明

    XSS跨站腳本;惡意攻擊者往Web頁面裏插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web裏面的html代碼會被執行,從而達到惡意用戶的特殊目的.反射型跨站。GET或POST內容未過濾,可以提交js以及HTML等惡意代碼。

  • 模擬

        <?php echo $_GET['message'] ?>
        // 正常url
        index.php?message=處理成功
        // 帶js的url
        index.php?message=<script>alert(1)</script>
        // 惡意跳轉url
        index.php?message=<script>window.location.href=user.php</script>
    
  • 危害
    • 獲取到用戶cookie信息
    • 跳轉到釣魚網站
    • 操作受害者的瀏覽器,查看受害者網頁瀏覽信息等。
    • 蠕蟲攻擊。
  • 防範
    • 使用htmlspecialchars函數將特殊字符轉換成HTML編碼,過濾輸出的變量

跨站請求僞造

  • 說明

    CSRF跨站請求僞造,也被稱成爲“one click attack”或者session riding,通常縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。XSS利用站點內的信任用戶,而CSRF則通過僞裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認爲比XSS更具危險性。

  • 模擬

    某個購物網站購買商品時,採用http://www.shop.com/buy.php?item=watch&num=100,item參數確定要購買什麼物品,num參數確定要購買數量,如果攻擊者以隱藏的方式發送給目標用戶鏈接
    ,那麼如果目標用戶不小心訪問以後,購買的數量就成了100個

  • 危害

    • 強迫受害者的瀏覽器向一個易受攻擊的Web應用程序發送請求,最後達到攻擊者所需要的操作行爲
  • 防範

    • 檢查網頁來源
    • 檢查內置的隱藏變量
    • 使用POST,不要使用GET,處理變量也不要直接使用$_REQUEST
    • 採用類似隨即碼或者令牌的形式,讓用戶操作唯一性。 (每次用戶登錄網站隨機生成一token,存放在cookie中,用戶的所有操作中都需要經過token驗證)

文件上傳漏洞

  • 說明

    攻擊者利用程序缺陷繞過系統對文件的驗證與處理策略將惡意代碼上傳到服務器並獲得執行服務器端命令的能力。

  • 常用的攻擊手段有

    • 上傳Flash跨域策略文件crossdomain.xml,修改訪問權限(其他策略文件利用方式類似);
    • 上傳病毒、木馬文件,誘騙用戶和管理員下載執行;
    • 上傳包含腳本的圖片,某些瀏覽器的低級版本會執行該腳本,用於釣魚和欺詐。
    • 總的來說,利用的上傳文件要麼具備可執行能力(惡意代碼),要麼具備影響服務器行爲的能力(配置文件)。
    • 上傳Web腳本代碼,Web容器解釋執行上傳的惡意腳本
  • 防範

    • 文件上傳的目錄設置爲不可執行
    • 判斷文件類型,設置白名單。對於圖片的處理,可以使用壓縮函數或者resize函數,在處理圖片的同時破壞圖片中可能包含的HTML代碼
    • 使用隨機數改寫文件名和文件路徑:一個是上傳後無法訪問;再來就是像shell、.php 、.rar和crossdomain.xml這種文件,都將因爲重命名而無法攻擊
    • 單獨設置文件服務器的域名:由於瀏覽器同源策略的關係,一系列客戶端攻擊將失效,比如上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將得到解決

SESSION 劫持

  • 說明

    攻擊者利用各種手段來獲取目標用戶的session id。一旦獲取到session id,那麼攻擊者可以利用目標用戶的身份來登錄網站,獲取目標用戶的操作權限

  • 攻擊者獲取目標用戶session id的方法
    • 暴力破解:嘗試各種session id,直到破解爲止;
    • 計算:如果session id使用非隨機的方式產生,那麼就有可能計算出來;
    • 竊取:使用網絡截獲,xss攻擊等方法獲得
  • 防範

    • 定期更改session id
    • 更改session的名稱
    • 關閉透明化session id
    • 設置HttpOnly。通過設置Cookie的HttpOnly爲true,可以防止客戶端腳本訪問這個Cookie,從而有效的防止XSS攻擊

其他安全相關

  1. X-Frame-Options防止網頁放在iframe中

    X-Frame-Options是一個HTTP標頭(header),用來告訴瀏覽器這個網頁是否可以放在iFrame內

    X-Frame-Options 有三個可選的值

    • DENY:瀏覽器拒絕當前頁面加載任何Frame頁面
    • SAMEORIGIN:frame頁面的地址只能爲同源域名下的頁面
    • ALLOW-FROM:origin爲允許frame加載的頁面地址

    可以直接通過meta標籤來設置,不需要放在http頭部請求中

    <meta http-equiv="X-Frame-Options" content="ALLOW-FROM http://optimizely.com">

參考文檔

  1. 參考一
  2. 參考二
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章