6個常見的 PHP 安全性攻擊例項和阻止方法

2022-10-06 03:33:07 字數 2519 閱讀 2319

1、sql注入

sql注入是一種惡意攻擊,使用者利用在表單字段輸入sql語句的方式來影響正常的sql執行。還有一種是通過system()或exec()命令注入的,它具有相同的sql注入機制,但只針對shell命令。

$username = $_post['username'];

$query = "select * from auth where username = '".$username."'";

echo $query;

$db = new mysqli('localhost', 'demo', 『demo', 『demodemo');

$result = $db->query($query);

if ($result && $result->num_rows) else

上面的**,在第一行沒有過濾或轉義使用者輸入的值($_post['username'])。因此查詢可能會失敗,甚至會損壞資料庫,這要看$username是否包含變換你的sql語句到別的東西上。

防止sql注入

選項:使用mysql_real_escape_string()過濾資料

手動檢查每一資料是否為正確的資料型別

使用預處理語句並繫結變數

使用準備好的預處理語句

分離資料和sql邏輯

預處理語句將程式設計客棧自動過濾(如:轉義)

kidqybqspy把它作為乙個編碼規範,可以幫助團隊裡的新人避免遇到以上問題。

$query = 'select name, district from city where countrycode=?';

if ($stmt = $db->prepare($query) )

$stmt->close();

}2、xss攻擊

xss(跨站點指令碼攻擊)是一種攻擊,由使用者輸入一些資料到你的**,其中包括客戶端指令碼(通常j**ascript)。如果你沒有過濾就輸出資料到另乙個web頁面,這個指令碼將被執行。

接收使用者提交的文字內容

<?php if (file_exists('comments')) else

if (isset($_post['comment']))

>

輸出內容給(另乙個)使用者

<?php echo $comments; ?>

將會發生什麼事?

煩人的彈窗

重新整理或重定向

損壞網頁或表單

竊取cookie

防止xss攻擊

為了防止xss攻擊,使用php的htmlentities()函式過濾再輸出到瀏覽器。htmlentities()的基本用法很簡單,但也有許多高階的控制,請參閱xss速查表。

3、會話固定

會話安全,假設乙個phpsessid很難猜測。然而,php可以接受乙個會話id通過乙個cookie或者url。因此,欺騙乙個受害者可以使用乙個特定的(或其他的)會話id 或者釣魚攻擊。

4、會議捕獲和劫持

這是與會話固定有著同樣的想法,然而,它涉及竊取會話id。如果會話id儲存在cookie中,攻擊者可以通過xss和j**ascript竊取。如果會話id包含在url上,也可程式設計客棧以通過嗅探或者從**伺服器那獲得。

防止會話捕獲和劫持

更新id

如果使用會話,請確保使用者使用ssl

5、跨站點請求偽造(csrf)

csrf攻擊,是指乙個頁面發出的請求,看起來就像是**的信任使用者,但不是故意的。它有許多的變體,比如下面的例子:

防止跨站點請求偽造

一般來說,確保使用者來自你的表單,並且匹配每乙個你傳送出去的表單。有兩點一定要記住:

對使用者會話採用適當的安全措施,例如:給每乙個會話更新id和使用者使用ssl。

生成另乙個一次性的令牌並將其嵌入表單,儲存在會話中(乙個會話變數),在提交時檢查它。

6、**注入

**注入是利用計算機漏洞通過處理無效資料造成的。問題出在,當你不小心執行任意**,通常通過檔案包含。寫得很糟糕的**可以允許乙個遠端檔案包含並執行。如許多php函式,如require可以包含url或檔名,例如:

<?php     if($theme)

?>

在上面的例子中,通過傳遞使用者輸入的乙個檔名或檔名的一部分,來包含以"http://"開頭的檔案。

防止**注入

過濾使用者輸入

在php.ini中設定禁用allow_url_fopen和allow_url_include。這將禁用require/include/fopen的遠端檔案。

其他的一般原則

1. 不要依賴伺服器配置來保護你的應用,特別是當你的web伺服器/ php是由你的isp管理,或者當你的**可能遷移/部署到別處,未來再從別處遷移/部署在到其他地方。請在****中嵌入帶有安全意識的檢查/邏輯(html、j**ascript、php,等等)。

2. 設計伺服器端的安全指令碼:

—例如,使用單行執行 - 單點身份驗證和資料清理

—例如,在所有的安全敏感頁面嵌入乙個php函式/檔案,用來處理所有登入/安全性邏輯檢查

3. 確保你的**更新,並打上最新補丁。

6個常見的 PHP 安全性攻擊

01 username post username 02 query select from auth where username username.03 echo query 04 db new mysqli localhost demo demo demodemo 05 result db q...

6個常見的 PHP 安全性攻擊

1 sql注入 sql注入是一種惡意攻擊,使用者利用在表單字段輸入sql語句的方式來影響正常的sql執行。還有一種是通過system 或exec 命令注入的,它具有相同的sql注入機制,但只針對shell命令。1 username post username 2 query select from ...

IPv6的安全性

一提到了 ipv6 的安全性,會出現截然相反的兩種態度。支援 ipv6 的 專家 會說 ipv6 強制實現 ipsec 因此比可選實現 ipsec 的ipv4 更安全。反對的專家更是態度堅決,ipsec 同時相容於 ipv4 和ipv6 而且雖然在 ipv6 中的實現是必須的,但是否使用確實可選的。...