xss,csrf,SQL注入

一、Xss

1、定義:跨站腳步攻擊,過濾用戶表單提交的數據
2、防範措施:
       a.使用PHP內置函數:htmlspecialchars(),strip_tags,trim,addslashes。
        b.PHP所有打印的語句如echo,print等,在打印前都要使用htmlentities() 進行過濾,

          這樣可以防止Xss,注意中文要寫htmlentities($name,ENT_NOQUOTES,GB2312)

        c.php防注入和XSS攻擊通用過濾函數

            


  1. <?php
  2. //php防注入和XSS攻擊通用過濾.
  3. //by qq:831937
  4. $_GET && SafeFilter($_GET);
  5. $_POST && SafeFilter($_POST);
  6. $_COOKIE && SafeFilter($_COOKIE);
  7. function SafeFilter (&$arr)
  8. {
  9. $ra=Array('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/script/','/javascript/','/vbscript/','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/','/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/','/onmouseout/','/onmouseover/','/onmouseup/','/onunload/');
  10. if (is_array($arr))
  11. {
  12. foreach ($arr as $key => $value)
  13. {
  14. if (!is_array($value))
  15. {
  16. if (!get_magic_quotes_gpc()) //不對magic_quotes_gpc轉義過的字符使用addslashes(),避免雙重轉義。
  17. {
  18. $value = addslashes($value); //給單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字符)加上反斜線轉義
  19. }
  20. $value = preg_replace($ra,'',$value); //刪除非打印字符,粗暴式過濾xss可疑字符串
  21. $arr[$key] = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 標記並轉換爲 HTML 實體
  22. }
  23. else
  24. {
  25. SafeFilter($arr[$key]);
  26. }
  27. }
  28. }
  29. }
  30. ?>

二、CSRF

     1、定義:跨站請求僞造(攻擊者盜用了你的身份,以你的名義發送惡意請求)
      2.CSRF攻擊原理及過程如下:
               a. 用戶C打開瀏覽器,訪問受信任網站A,輸入用戶名和密碼請求登錄網站A;

               b.在用戶信息通過驗證後,網站A產生Cookie信息並返回給瀏覽器,此時用戶登錄網站A成功,可以正常發送請求到網站A;

                c. 用戶未退出網站A之前,在同一瀏覽器中,打開一個TAB頁訪問網站B;

                d. 網站B接收到用戶請求後,返回一些攻擊性代碼,併發出一個請求要求訪問第三方站點A;

                e. 瀏覽器在接收到這些攻擊性代碼後,根據網站B的請求,在用戶不知情的情況下攜帶Cookie信息,向網站A發出請求。網站A並不知道該請求其實是由B發起的,所以會根據用戶C的Cookie信息以C的權限處理該請求,導致來自網站B的惡意代碼被執行。

       3.防範措施:
            a.在HTTP請求中增加token並驗證
            b.在HTTP頭中自定義屬性並驗證
            c.驗證 HTTP Referer 字段
            d.增加驗證碼機制(圖片驗證碼)
        

三、SQL注入
     1.堅持兩個原則
            a.對輸入的數據進行過濾(addslashes())
            b.轉義用於向數據庫發出的數據(mysql_real_escape_string())
            c.使用支持參數化查詢語句和佔位符的數據庫操作類(如PEAR::DB, PDO等),你就會多得到一層保護
           d.過濾輸入
           e.變量類型限制
           f.採用PDO操作數據庫
           g.配置好數據庫的用戶權限

四、就是在PDO底層是如何處理該sql語句的,可以這麼有效的防止注入問題

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