6個常見的 PHP 安全性攻擊

2022-09-10 19:48:20 字數 2686 閱讀 6223

1、sql注入

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

1

$username = $_post['username'];

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

3echo

$query;4

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

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

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

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

防止sql注入

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

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

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

使用準備好的預處理語句

分離資料和sql邏輯

預處理語句將自動過濾(如:轉義)

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

1

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

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

) )3

12     $stmt->close();

13 }

2、xss攻擊

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

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

1

<?php

2if (file_exists('comments')) else78

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

12 >

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

167

<?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)

防止跨站點請求偽造

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

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

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

6、**注入

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

19

<?php

10     if($theme

) 13 ?>

在上面的例子中,通過傳遞使用者輸入的乙個檔名或檔名的一部分,來包含以"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命令。username post username query select from auth...

PHP安全性漫談之PHP安全性設定

伺服器並不能阻止所有的安全問題,例如程式漏洞問題 使用者輸入表單問題 php檔案許可權問題等。也可以通過一些手段來迷惑黑客或者別有用心者。1 程式 漏洞問題 很多 php 程式所存在的重大弱點並不是 php 語言本身的問題,而是程式設計者的安全意識不高而導致的。因此,必須時時注意每一段 可能存在的問...