常見的php攻擊(6種攻擊詳解)

來源:互聯網
上載者:User
本篇文章介紹的是常見的php攻擊(6種攻擊詳解),在這裡分享給大家,也可以給有需要協助的人一個參考,大家一起來看一看吧

1、SQL注入

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


[python] view plain copy


  1. $username = $_POST['username'];

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

  3. echo $query;

  4. $db = new mysqli('localhost', 'demo', ‘demo', ‘demodemo');

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

  6. if ($result && $result->num_rows) {

  7. echo "<br />Logged in successfully";

  8. } else {

  9. echo "<br />Login failed";

  10. }

防止SQL注入選項:
*使用mysql_real_escape_string()過濾資料
*手動檢查每一資料是否為正確的資料類型
*使用預先處理語句並綁定變數
*使用準備好的預先處理語句
*分離資料和SQL邏輯
*預先處理語句將自動過濾(如:轉義)
*把它作為一個編碼規範,可以協助團隊裡的新人避免遇到以上問題


[python] view plain copy


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

  2. if ($stmt = $db->prepare($query) ){

  3. $countrycode = 'hk';

  4. $stmt->bind_param("s", $countrycode);

  5. $stmt->execute();

  6. $stmt->bind_result($name, $district);

  7. while ( $stmt ($stmt->fetch() ){

  8. echo $name.', '.$district;

  9. echo '<br />';

  10. }

  11. $stmt->close();

  12. }


2、XSS攻擊

XSS(跨網站指令碼攻擊)是一種攻擊,由使用者輸入一些資料到你的網站,其中包括用戶端指令碼(通常JavaScript)。如果你沒有過濾就輸出資料到另一個web頁面,這個指令碼將被執行。接收使用者提交的常值內容

將會發生什麼事?

*煩人的彈窗
*重新整理或重新導向
*損壞網頁或表單
*竊取cookie
*AJAX(XMLHttpRequest)
防止XSS攻擊
為了防止XSS攻擊,使用PHP的htmlentities()函數過濾再輸出到瀏覽器。
htmlentities()的基本用法很簡單,但也有許多進階的控制,請參閱 XSS速查表。

3、會話固定

會話安全,假設一個PHPSESSID很難猜測。然而,PHP可以接受一個會話ID通過一個Cookie或者URL。因此,欺騙一個受害者可以使用一個特定的(或其他的)會話ID 或者釣魚攻擊。

4、會議捕獲和劫持

這是與會話固定有著同樣的想法,然而,它涉及竊取會話ID。如果會話ID儲存在Cookie中,攻擊者可以通過XSS和JavaScript竊取。如果會話ID包含在URL上,也可以通過嗅探或者從Proxy 伺服器那獲得。
防止會話捕獲和劫持:
*更新ID
*如果使用會話,請確保使用者使用SSL

5、跨網站請求偽造(CSRF)

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


[python] view plain copy


  1. <img src='http://example.com/single_click_to_buy.php?user_id=123&item=12345'>


防止跨網站請求偽造
一般來說,確保使用者來自你的表單,並且匹配每一個你發送出去的表單。有兩點一定要記住:
對使用者會話採用適當的安全措施,例如:給每一個會話更新id和使用者使用SSL。
產生另一個一次性的令牌並將其嵌入表單,儲存在會話中(一個會話變數),在提交時檢查它。


6、代碼注入

代碼注入是利用電腦漏洞通過處理無效資料造成的。問題出在,當你不小心執行任意代碼,通常通過檔案包含。寫得很糟糕的代碼可以允許一個遠程檔案包含並執行。如許多PHP函數,如require可以包含URL或檔案名稱,例如:


[python] view plain copy


  1. <form>

  2. Choose theme:

  3. <select name = theme>

  4. <option value = blue>Blue</option>

  5. <option value = green>Green</option>

  6. <option value = red>Red</option>

  7. </select>

  8. <input type = submit>

  9. </form>

  10. <?php

  11. if($theme) {

  12. require($theme.'.txt');

  13. }

  14. ?>


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

防止代碼注入
*過濾使用者輸入

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

其他的一般原則
1. 不要依賴伺服器配置來保護你的應用,特別是當你的web伺服器/ PHP是由你的ISP管理,或者當你的網站可能遷移/部署到別處,未來再從別處遷移/部署在到其他地方。請在網站代碼中嵌入帶有安全意識的檢查/邏輯(HTML、JavaScript、PHP,等等)。

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

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

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

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

相關推薦:

PHP攻擊網站防禦代碼-以及攻擊代碼反譯_PHP教程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.