Bài giảng Thiết kế và lập trình Web - Bài 10: PHP bảo mật

Các Dạng Tấn Công

 Virus hacking

– Virus là chương trình (hay một đoạnh mã) có thể tự nhân

bản và gây rắc rối cho máy tính hay hệ điều hành

 Worms

 Applet lừa đảo (Rogue Applets)

 Đánh cắp thông tin thẻ tín dụng

 Đánh cắp thông tin cá nhân

 Ăn cắp thông tin

pdf 30 trang phuongnguyen 8320
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Thiết kế và lập trình Web - Bài 10: PHP bảo mật", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Thiết kế và lập trình Web - Bài 10: PHP bảo mật

Bài giảng Thiết kế và lập trình Web - Bài 10: PHP bảo mật
Thiết kế và lập trình Web 
Viện CNTT & TT 
Bài 10 
PHP bảo mật 
Thiết kế và lập trình Web 
Các Dạng Tấn Công 
 DoS, DDoS 
Thiết kế và lập trình Web 
Các Dạng Tấn Công 
 Virus hacking 
– Virus là chương trình (hay một đoạnh mã) có thể tự nhân 
bản và gây rắc rối cho máy tính hay hệ điều hành 
 Worms 
 Applet lừa đảo (Rogue Applets) 
 Đánh cắp thông tin thẻ tín dụng 
 Đánh cắp thông tin cá nhân 
 Ăn cắp thông tin 
Thiết kế và lập trình Web 
Các Nguy Cơ 
Một số nguy cơ đe dọa ứng dụng Web: 
 Hidden Manipulation 
 Parameter Tampering (giả mạo tham số) 
 Buffer Overflow (tràn bộ đệm) 
 Cookie Poisoning 
 SQL Injection 
  
Thiết kế và lập trình Web 
Các Nguy Cơ 
Hidden manipulation 
 Mô tả: thay đổi các trường ẩn (hidden fields) của trang 
web 
 Ví dụ: 
– 
– Sửa value thành 9.9 
 Giải pháp: mã hóa 
Thiết kế và lập trình Web 
Các Nguy Cơ 
Parameter Tampering (giả mạo tham số) 
 Mô tả: giả mạo hoặc thay đổi một số tham số trên 
URL hay web form 
 Ví dụ: 
–  
ProductID=15704&price=59.99 
– Sửa price thành 5.99 
 Giải pháp: mã hóa, dùng HTTP Secure (https), kiểm 
tra các tham số 
Thiết kế và lập trình Web 
Các Nguy Cơ 
Cross-site Scripting (CSS) 
– Mô tả: Chèn script độc vào trang web động 
– Ví dụ: 
• 
alert(document.cookie) 
– Giải Pháp: 
• Lọc các ký tự đặc biệt (special characters) 
• Mã hóa 
Thiết kế và lập trình Web 
Các Nguy Cơ 
Cookie Poisoning 
 Mô tả: thay đổi các tham số, giá trị,  lưu trong cookie 
 Ví dụ: 
– Cookie gốc: SessionID=123456 ; Admin=no 
– Cookie bị thay đổi: SessionID=123456 ; Admin=yes 
 Giải pháp: 
– Mã hóa, xác thực, dùng HTTPS 
– Thêm IP của user 
– Thêm số ngẫu nhiên 
–  
Thiết kế và lập trình Web 
Các Nguy Cơ 
SQL Injection 
 Mô tả: chèn code SQL vào trong câu lệnh SQL, thường 
xảy ra ở nơi vốn chỉ dành để điền giá trị của các 
parameter 
 Ví dụ 
– SELECT * FROM tbSales WHERE id = ‘@id’ 
– Chèn đoạn code SQL vào tham số @id: 
100’; DELETE FROM tbOrders WHERE id = ‘1520 
 Giải pháp: dùng stored procedure thay cho câu truy vấn 
trực tiếp, lọc các ký tự đặc biệt,  
Thiết kế và lập trình Web 
Một Số Lời Khuyên 
 Luôn cập nhật kiến thức về virus và các nguy cơ 
 Cập nhật thông tin về ngôn ngữ dùng để viết chương 
trình 
 Thiết kế các biện pháp bảo mật ngay từ đầu 
 Kiểm thử code kỹ lưỡng 
 Thường xuyên kiểm tra trang web với những kỹ thuật 
hacking mới 
 Dùng code-review để kiểm tra backdor do các lập trình 
viên cố ý chèn vào 
  
Thiết kế và lập trình Web 
11 
An toàn PHP 
 An toàn khi cài đặt PHP như là CGI 
– Truy xuất file hệ thống 
– Truy xuất các website khác cùng server 
d/file.html 
 Hạn chế bằng option doc_root và 
user_dir trong file php.ini 
Thiết kế và lập trình Web 
12 
An toàn PHP 
 Cấu hình PHP: đặt trong file php.ini 
 display_errors = false 
Tắt việc hiển thị thông báo lỗi của script 
 open_basedir 
Giới hạn các thư mục được phép mở file 
 register_globals = off 
Tắt việc tự động khai báo biến toàn cục 
 disable_functions = 
"exec,passthru,system,shell_exec,popen“ 
Tắt một số hàm nhạy cảm 
 allow_url_fopen = off 
Tắt việc mở file từ một URL 
Thiết kế và lập trình Web 
13 
An toàn PHP 
 Safe mode: thiết lập trong php.ini 
 safe_mode = on / off 
Bật/Tắt chế độ safemode 
 safe_mode_gid 
Yêu cầu userid của script PHP giống gid 
hay uid của file khi open hay không? 
 safe_mode_exec_dir 
Cho phép thực hiện script PHP trong những 
thư mục nào 
Thiết kế và lập trình Web 
14 
An toàn MySQL 
 Thiết lập file cấu hình của MySQL có chủ quyền là 
root 
 Thiết lập password riêng cho root và cấp các user 
khác cho việc truy xuất MySQL với các quyền có 
giới hạn 
 Xóa database test 
 Cấm sử dụng remote access 
Thiết kế và lập trình Web 
15 
Mã hóa 
 Mã hóa một chiều: md5, sha1 
 Mã hóa đối xứng: sử dụng 1 khóa để mã hóa và 
giải mã: IDEA, SAFER 
 Mã hóa bất đối xứng: sử dụng 1 khóa (khóa công 
khai) để mã hóa và dùng 1 khóa khác (khóa bí mật) 
để giải mã: RSA 
Thiết kế và lập trình Web 
16 
Lập trình thế nào để an toàn 
 Lỗ hổng của register_globals 
<?php 
if (isset($user) && $user == "admin" && $pass == "abcd") 
 $loggedin = 1; 
if ($loggedin){ 
 include("secretpage.html"); 
 exit; 
} 
?> 
"> 
 Login bình thường 
 Sử dụng URL:  
Thiết kế và lập trình Web 
17 
Lập trình thế nào để an toàn 
 Kiểm tra dữ liệu input 
<?php 
if (isset($user) && $user == "admin" && $pass == "abcd") 
 $loggedin = 1; 
if ($loggedin){ 
 include("secretpage.html"); 
 exit; 
} 
?> 
"> 
 Login bình thường 
 Sử dụng pass là chuỗi "1 || 1 || 1" 
Thiết kế và lập trình Web 
18 
Lập trình thế nào để an toàn 
 Lỗ hổng cross-site 
<?php 
 if ($_GET['name']) 
 echo("Hello " . $_GET['name']); 
?> 
 Sử dụng bình thường 
 Sử dụng URL 
<?php 
 if ($_GET['name']) 
 echo("Hello " . htmlspecialchars($_GET['name'])); 
?> 
Thiết kế và lập trình Web 
19 
Lập trình thế nào để an toàn 
 Lỗ hổng include 
<?php 
 include($_GET['page']); 
?> 
 Sử dụng bình thường test.php?page=main.html 
 Sử dụng URL 
test.php?page= 
 Thiết lập allow_url_fopen = off 
<?php 
 $listpage = array(1=>'main.html'); 
 include $listpage[intval($_GET[‘page'])]; 
?> 
Thiết kế và lập trình Web 
20 
Đếm thời gian thực hiện 
 Hàm time() tính số giây từ năm 1970: không 
hữu ích vì một đoạn code có thời gian thực 
hiện nhỏ hơn 1 giây 
 Hàm microtime() trả về chuỗi "msec sec" là 
miligiây và giây tính từ 1970 
 Đổi thời gian thành số thực để tính toán 
<?php 
$tp = explode(' ', microtime()); 
$actualtime = $tp[1] . substr($tp[0], 1); 
echo($actualtime); 
?> 
Thiết kế và lập trình Web 
21 
Đếm thời gian thực hiện 
Timer.inc 
<?php 
class Timer{ 
 var $timers = array(); 
 function timerStart($name = 'default'){ 
 $tp = explode(' ', microtime()); 
 $at = $tp[1] . substr($tp[0], 1); 
 $this->timers['$name'] = $at; 
 } 
 function timerStop($name = 'default'){ 
 $tp = explode(' ', microtime()); 
 $at = $tp[1] . substr($tp[0], 1); 
 $elapsed_time = bcsub($at, $this->timers['$name'], 6); 
 return $elapsed_time; 
 } 
} 
?> 
Thiết kế và lập trình Web 
22 
Đếm thời gian thực hiện 
Test.php 
<?php 
require_once('timer.inc'); 
function a(){ 
 //Do something 
}; 
function b(){ 
 //Do something 
}; 
$timer = new Timer(); 
$timer->timerStart('total'); 
$timer->timerStart(); 
a(); 
echo "Hàm a() mất ".$timer->timerStop(). " giây"; 
$timer->timerStart(); 
b(); 
echo "Hàm b() mất ".$timer->timerStop(). " giây"; 
echo "Toàn bộ mất ".$timer->timerStop('total'). " giây"; 
?> 
Thiết kế và lập trình Web 
23 
Tối ưu mã nguồn 
 Thời gian thực hiện chỉ mất khoảng 10%, 90% còn 
lại là input/output 
 Sử dụng vòng lặp hiệu quả 
 Sử dụng các hàm nhanh 
 Chọn cách input nhanh nhất 
 Chọn cách output nhanh nhất 
 Hạn chế dùng echo 
Thiết kế và lập trình Web 
24 
Vùng nhớ xuất tạm và nén 
 Vùng nhớ xuất tạm: các kết quả xuất chưa 
đưa về trình duyệt cho đến khi có lệnh xuất 
ra trình duyệt 
<?php 
ob_start(); 
echo("This is a test\n"); 
echo("More content\n"); 
ob_end_flush(); 
?> 
Thiết kế và lập trình Web 
25 
Vùng nhớ xuất tạm và nén 
 Nén vùng nhớ tạm: ob_gzhandler() 
 <?php 
ob_start("ob_gzhandler"); 
echo("This is a test\n"); 
echo("More content\n"); 
ob_end_flush(); 
?> 
 Sau lệnh ob_end_flush(), nội dung vùng nhớ tạm được giao cho 
ob_gzhandler() 
 ob_gzhandler() kiểm tra trình duyệt hỗ trợ gzip? 
 Nếu có, ob_gzhandler() nén dữ liệu trên vùng nhớ tạm và gửi 
cho trình duyệt 
 Nếu không gửi dữ liệu gốc 
Thiết kế và lập trình Web 
26 
Tối ưu CSDL 
 Phân tích và chọn truy vấn tối ưu 
 Tránh các truy vấn phức tạp trên nhiều table 
 Sử dụng kiểu JOIN hợp lý để hạn chế số lần so 
sánh 
 Sử dụng index để tìm kiếm, cập nhật trong table 
 Sử dụng khóa auto_increment 
Thiết kế và lập trình Web 
27 
Sử dụng cache 
 Lập cache cho các dữ liệu động được dùng 
nhiều lần tăng hiệu quả vì đọc cache 
nhanh hơn là tạo lại bộ dữ liệu 
 Giảm thời gian xử lý của server và của 
database 
 Giữ lại thông tin trong trường hợp mất kết 
nối database 
 Dữ liệu trong cache không phụ thuộc đầy 
đủ vào các ràng buộc 
Thiết kế và lập trình Web 
28 
Sử dụng cache 
Thiết kế và lập trình Web 
29 
Sử dụng cache 
 Cache có thể được lưu tại: 
– Database: Lưu các dữ liệu tính toán được vào trong 
CSDL, khi cần sử dụng lại chỉ cần dùng câu lệnh truy vấn 
– File: mỗi phần cần tạo cache lưu trữ vào một file 
– DBM file: dùng một file lưu trữ toàn bộ nội dung cache 
– Bộ nhớ: lưu trong bộ nhớ sẽ có tốc độ truy xuất nhanh 
nhưng dung lượng hạn chế 
Thiết kế và lập trình Web 
30 
Sử dụng engine tối ưu 
 Zend Cache 
 APC Cache 
 AfterBurner Cache 
 Zend Accelarator 
 ionCube PHP Accelerator 
 Turck MMCache 

File đính kèm:

  • pdfbai_giang_thiet_ke_va_lap_trinh_web_bai_10_php_bao_mat.pdf