關於PHP的漏洞以及如何防止PHP漏洞?

2021-07-10 19:11:13 字數 1946 閱讀 4345

漏洞無非這麼幾類,xss、sql注入、命令執行、上傳漏洞、本地包含、遠端包含、許可權繞過、資訊洩露、cookie偽造、csrf(跨站請求)等。這些漏洞不僅僅是針對php語言的,本文只是簡單介紹php如何有效防止這些漏洞。

1.xss + sql注入(關於xss攻擊詳細介紹)

其中佔大頭的自然是xss與sql注入,對於框架型別或者有公共檔案的,建議在公共檔案中統一做一次xss和sql注入的過濾。用php寫個過濾函式,可由如下所示:

$_request = filter_xss($_request);

$_get = filter_xss($_get);

$_post = filter_xss($_post);

$_cookie = filter_xss($_cookie);

$_post = filter_sql($_post);

$_get = filter_sql($_get);

$_cookie = filter_sql($_cookie);

$_request = filter_sql($_request);

最簡單的filter_xss函式是htmlspecialchars()

最簡單的filter_sql函式是mysql_real_escape_string()

當然,誰都知道這種過濾filter_sql(詳細防止sql注入)只能過濾字元型和搜尋型的注入,對於數字型是沒有辦法的,但也說明做了這層過濾後,只需在後面注意數字型的sql語句就可以了,遇到了加intval過濾就可以了,這就變得容易多了。

2. 命令執行

對於命令執行,可以從關鍵字入手,總共可分為3類

(1) php**執行 :eval等

(2)shell命令執行:exec、passthru、system、shell_exec等

(3) 檔案處理:fwrite、fopen、mkdir等

對於這幾類需要注意其引數是否使用者可控。

3.上傳漏洞

對於上傳漏洞,也是重點關注的地方,要仔細分析它的處理流程,針對上傳的繞過方式是很多的,最保險的方式:在儲存檔案是採用檔名隨機命名和字尾白名單方式。其次要注意的一點是上傳檔案的地方可能不止一處,不要有遺漏,可能會碰到這樣的情況,突然在某個目錄裡面包含了乙個第三方的編輯器在裡面。

檔案包含漏洞涉及的函式如include() 、include_once()、require()、require_once()、file_get_contents()等

4. 許可權繞過

許可權繞過可分為兩類吧

(1)後台檔案的未授權訪問。後台的檔案沒有包含對session的驗證,就容易出現這樣的問題

(2)未作使用者隔離,例如mail.php?id=23顯示了你的信件,那麼換個id, mail.php?id=24就檢視到了別人的信件,編寫**是方便,把信件都存在乙個資料表裡,id統一編號,前端展現時只需按id取出即可,但未作使用者隔離,判定歸屬,容易造成越權訪問。

這樣的例子是很常見的,給某銀行做評估是就經常發現這種漏洞。

5. 資訊洩露

資訊洩露算是比較低危的漏洞了,比如列目錄這種就屬於部署問題,而與**審計無關了,而像暴路徑、暴原始碼這種是需要防止的。曾經遇到這樣的**

<?php if(empty($_get['a'])) ?>

表面上似乎沒問題,可是當請求變為 xx.php?a=1時,即引數變為陣列的時候,就會發生錯誤以致路徑洩露,而用isset判斷則不會,當然乙個個防太麻煩,建議在配置檔案中關閉錯誤提示,或者在公共檔案中加入如下**以關閉錯誤顯示功能:

<?php error_reporting(0);?>

之前php點點通(phpddt.com)就有一篇文章:關於php防止漏洞策略 ,介紹了register_globals 的危害以及魔術引用magic quotes使用說明。

關於PHP的漏洞以及如何防止PHP漏洞?

漏洞無非這麼幾類,xss sql注入 命令執行 上傳漏洞 本地包含 遠端包含 許可權繞過 資訊洩露 cookie偽造 csrf 跨站請求 等。這些漏洞不僅僅是針對php語言的,本文只是簡單介紹php如何有效防止這些漏洞。1.xss sql注入 關於xss攻擊詳細介紹 其中佔大頭的自然是xss與sql...

防止apache的php副檔名解析漏洞

今天看到ecshop後台拿webshell的文章,想起來很長時間很多版本存在的apache的php副檔名解析漏洞,主要問題是 不管檔案最後字尾為什麼,只要是.php.結尾,就會被apache伺服器解析成php檔案,問題是apache如果在mime.types檔案裡面沒有定義的副檔名在諸如x1.x2....

關於Fortify中的漏洞以及修復方案

如果在程式中簡單的使用findbyid string id 這個方法,攻擊者就有可能使用指令碼進行攻擊,使其該表中的所有使用者資訊。比如for int i 0 i 10000 i 通過類似的 就可以獲取所有使用者資訊。可以通過在該方法上加上別的限定條件。如findbyidandusername st...