php 防駭 - 基礎觀念篇

23
PHP 防駭 - 基礎觀念篇 如何寫出安全的 PHP 網站

Upload: jace-ju

Post on 19-Dec-2014

5.238 views

Category:

Technology


2 download

DESCRIPTION

哇寶內部教育訓練用教材

TRANSCRIPT

Page 1: PHP 防駭 - 基礎觀念篇

PHP 防駭 - 基礎觀念篇

如何寫出安全的 PHP 網站

Page 2: PHP 防駭 - 基礎觀念篇

常見的威脅

• 上線環境的錯誤訊息中出現相關系統資訊

• 透過網址就能進入管理頁面

• 資料庫中的資料無端地被全部刪除

• 頁面被植入不明連結

• 程式中多出不明的 PHP 檔案

Page 3: PHP 防駭 - 基礎觀念篇

開發環境的設定

Page 4: PHP 防駭 - 基礎觀念篇

error_reporting = E_ALL

• 嚴格是安全的根本• http://localhost/hack/notice.php

Page 5: PHP 防駭 - 基礎觀念篇

register_globals = Off

• 想偷懶想節省打字字數• http://localhost/hack/admin/index.php

• http://localhost/hack/admin/index.php?isLogin=1

Page 6: PHP 防駭 - 基礎觀念篇

上線環境的設定

Page 7: PHP 防駭 - 基礎觀念篇

display_errors = Off

• 錯誤洩漏系統環境• http://localhost/hack/notice.php

Page 8: PHP 防駭 - 基礎觀念篇

log_errors = On

• 將錯誤記到 log 檔中

• error_log = filename

Page 9: PHP 防駭 - 基礎觀念篇

Safe mode

• 通常是共享主機才有必要打開

• 官方建議不應該在 PHP 層級裡使用

• PHP6 已不再內建

Page 10: PHP 防駭 - 基礎觀念篇

SQL Injection

Page 11: PHP 防駭 - 基礎觀念篇

資料型態的重要性

• 過份相信外部資料• http://localhost/hack/user.php?id=1

• http://localhost/hack/user.php?id=' or 1=1; /*

• POST 表單也有同樣的問題,而且更危險

Page 12: PHP 防駭 - 基礎觀念篇

更可怕的指令

• http://localhost/hack/user.php?id=';delete from users; /*

• 其實只要權限夠,什麼指令都能執行。

Page 13: PHP 防駭 - 基礎觀念篇

善用 Library 提供的函式

• Zend Framework: Zend_Db_Adapter_Abstract::quoteInto()

• MySQL Library: addslashes(), mysql_real_escape_string()

• MySQLi Library: mysqli::real_escape_string()

• ADOdb: ADOConnection::Quote()

Page 14: PHP 防駭 - 基礎觀念篇

將資料編碼

• 敏感資料用可逆的加密演算法加密

– 優點:駭客不容易解讀

– 缺點:一定要用程式解讀,而且還是有可能被破解

• 敏感資料用不可逆的加密演算法加密

– 優點:如果夠嚴密的話,駭客完全無法解讀

– 缺點:無法還原為原來密碼

Page 15: PHP 防駭 - 基礎觀念篇

Script Injection

Page 16: PHP 防駭 - 基礎觀念篇

讓瀏覽者踩到地雷

• <?php echo $content ?>

• http://localhost/hack/post.php– <script

src="http://example.com/hack.js"></script>

– <iframe src="http://example.com/hack.php" height="0"></iframe>

Page 17: PHP 防駭 - 基礎觀念篇

去除HTML的影響

• <?php echo htmlspecialchars($content); ?>

– 缺點:沒辦法顯示 HTML

• <?php echo strip_tags($content, '<p>'); ?>

– 缺點:有可能無法避掉 onxxxx 的 JS

• BBCode, Wiki, PEAR::HTML_Safe, …

Page 18: PHP 防駭 - 基礎觀念篇

木馬

Page 19: PHP 防駭 - 基礎觀念篇

上傳後門檔案

• 沒有檢查型態

– mime-type 還是副檔名?

– 白名單檢查

• 用 SQL Injection

Page 20: PHP 防駭 - 基礎觀念篇

一支 PHP 程式就能看透你的網站

• http://localhost/hack/c99shell.php

• http://localhost/hack/phpspy2008.php

Page 21: PHP 防駭 - 基礎觀念篇

討論

Page 22: PHP 防駭 - 基礎觀念篇

• 如何建立良好的程式開發習慣?

• MIS能為你做些什麼?

• 用套件?還是自己來?

• 哪些網站提供相關資訊?

Page 23: PHP 防駭 - 基礎觀念篇

謝謝