1. 程式人生 > >php安全(二):xss攻擊

php安全(二):xss攻擊

XSS 全稱為 Cross Site Scripting,跨站指令碼攻擊。它指的是惡意攻擊者往Web頁面裡插入惡意html程式碼,當用戶瀏覽該頁之時,嵌入其中Web裡面的html程式碼會被執行,進而達到某些人的攻擊目的。

分類
1、XSS反射型攻擊,惡意程式碼並沒有儲存在目標網站,通過引誘使用者點選一個連結到目標網站的惡意連結來實施攻擊的。

2、XSS儲存型攻擊,惡意程式碼被儲存到目標網站的伺服器中,這種攻擊具有較強的穩定性和永續性,比較常見場景是在部落格,論壇等社交網站上,但OA系統,和CRM系統上也能看到它身影,比如:某CRM系統的客戶投訴功能上存在XSS儲存型漏洞,黑客提交了惡意攻擊程式碼,當系統管理員檢視投訴資訊時惡意程式碼執行,竊取了客戶的資料,然而管理員毫不知情,這就是典型的XSS儲存型攻擊。

危害
1.竊取cookies,讀取目標網站的cookie傳送到黑客的伺服器上

2.讀取使用者未公開的資料,如果:郵件列表或者內容、系統的客戶資料,聯絡人列表等等

防禦

1、最簡單的處理辦法,只需要在接受資料處理的時候用上過濾函式htmlspecialchars,這個函式會把程式碼中的特殊字元轉義成HTML實體,輸出的時候就不會影響頁面了

htmlspecialchars($_POST['content']);

2、另一種方法是直接過濾掉html標籤,這裡要用到正則表示式

<?php
        $rege = '/<\/?[^>]+>/';
        $result = preg_replace($rege,"",$_POST['content']);
        echo $result;

    ?>

3、PHP提供了一個內建的strip_tags函式可以出去字串中HTML和PHP標籤,僅保留引數中指定的標籤

<?php

        $str = '<p>Test parjlkasdf </p><a href="#test">Other text</a>';
        echo strip_tags($str);
        echo "</br>";
        echo strip_tags($str,'<p> <a>');//允許p標籤和a標籤
    ?>