Upload
jace-ju
View
5.237
Download
2
Embed Size (px)
DESCRIPTION
哇寶內部教育訓練用教材
Citation preview
PHP 防駭 - 基礎觀念篇
如何寫出安全的 PHP 網站
常見的威脅
• 上線環境的錯誤訊息中出現相關系統資訊
• 透過網址就能進入管理頁面
• 資料庫中的資料無端地被全部刪除
• 頁面被植入不明連結
• 程式中多出不明的 PHP 檔案
開發環境的設定
error_reporting = E_ALL
• 嚴格是安全的根本• http://localhost/hack/notice.php
register_globals = Off
• 想偷懶想節省打字字數• http://localhost/hack/admin/index.php
• http://localhost/hack/admin/index.php?isLogin=1
上線環境的設定
log_errors = On
• 將錯誤記到 log 檔中
• error_log = filename
Safe mode
• 通常是共享主機才有必要打開
• 官方建議不應該在 PHP 層級裡使用
• PHP6 已不再內建
SQL Injection
資料型態的重要性
• 過份相信外部資料• http://localhost/hack/user.php?id=1
• http://localhost/hack/user.php?id=' or 1=1; /*
• POST 表單也有同樣的問題,而且更危險
更可怕的指令
• http://localhost/hack/user.php?id=';delete from users; /*
• 其實只要權限夠,什麼指令都能執行。
善用 Library 提供的函式
• Zend Framework: Zend_Db_Adapter_Abstract::quoteInto()
• MySQL Library: addslashes(), mysql_real_escape_string()
• MySQLi Library: mysqli::real_escape_string()
• ADOdb: ADOConnection::Quote()
將資料編碼
• 敏感資料用可逆的加密演算法加密
– 優點:駭客不容易解讀
– 缺點:一定要用程式解讀,而且還是有可能被破解
• 敏感資料用不可逆的加密演算法加密
– 優點:如果夠嚴密的話,駭客完全無法解讀
– 缺點:無法還原為原來密碼
Script Injection
讓瀏覽者踩到地雷
• <?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>
去除HTML的影響
• <?php echo htmlspecialchars($content); ?>
– 缺點:沒辦法顯示 HTML
• <?php echo strip_tags($content, '<p>'); ?>
– 缺點:有可能無法避掉 onxxxx 的 JS
• BBCode, Wiki, PEAR::HTML_Safe, …
木馬
上傳後門檔案
• 沒有檢查型態
– mime-type 還是副檔名?
– 白名單檢查
• 用 SQL Injection
一支 PHP 程式就能看透你的網站
• http://localhost/hack/c99shell.php
• http://localhost/hack/phpspy2008.php
討論
• 如何建立良好的程式開發習慣?
• MIS能為你做些什麼?
• 用套件?還是自己來?
• 哪些網站提供相關資訊?
謝謝