Bài 4 Bảo mật cho website - Xây dựng ứng dụng web

1,611 views

Published on

Kết nối bảo mật và giao thức SSL
Xác thực cho website
Mã hóa và giải mã dữ liệu

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,611
On SlideShare
0
From Embeds
0
Number of Embeds
182
Actions
Shares
0
Downloads
208
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Bài 4 Bảo mật cho website - Xây dựng ứng dụng web

  1. 1. Bài 4 Bảo mật cho website
  2. 2. Kết nối bảo mật và giao thức SSL Xác thực cho website Mã hóa và giải mã dữ liệu Mục tiêu Bài 4 - Bảo mật cho website 2
  3. 3. Giới thiệu về kết nối bảo mật Lấy một chứng nhận bảo mật điện tử Yêu cầu một kết nối bảo mật Chuyển hướng một kết nối bảo mật Kết nối bảo mật và giao thức SSL Bài 4 - Bảo mật cho website 3
  4. 4. Hình ảnh một yêu cầu kết nối bảo mật: Kết nối bảo mật Bài 4 - Bảo mật cho website 4
  5. 5. Kết nối bảo mật (secure connection): ngăn chặn dữ liệu bị đọc được trong quá trình truyền tải qua Internet Kết nối được bảo mật thường chậm hơn kết nối thường: phải mã hóa và giải mã dữ liệu Cách xác định kết nối bảo mật: HTTPS Kết nối bảo mật Bài 4 - Bảo mật cho website 5
  6. 6. Hai loại giao thức: SSL (Secure Sockets Layer): giao thức cũ TLS (Transport Layer Security): giao thức mới, chỉ có các trình duyệt mới ra gần đây mới hỗ trợ Xác thực SSL phía máy chủ Xác thực SSL phía máy khách Một số khái niệm Bài 4 - Bảo mật cho website 6
  7. 7. Hình ảnh một chứng nhận bảo mật điện tử: Chứng nhận bảo mật điện tử Bài 4 - Bảo mật cho website 7
  8. 8. Chứng nhận phía máy chủ Chứng nhận phía máy khách Hai loại chứng nhận bảo mật điện tử Bài 4 - Bảo mật cho website 8
  9. 9. Trước khi kết nối được thiết lập, máy chủ sử dụng xác thực SSL phía máy chủ để tự xác thực bằng cách cung cấp một chứng nhận bảo mật điện tử cho trình duyệt Mặc định thì trình duyệt sẽ chấp nhận các chứng nhận bảo mật điện tử từ các nguồn tin cậy (trusted sources) Cơ chế làm việc của SSL Bài 4 - Bảo mật cho website 9
  10. 10. Nếu chứng nhận bảo mật không phải của nguồn tin cậy thì trình duyệt thông báo để người dùng tự quyết định Trong một vài trường hợp, máy khách có thể tự xác nhận với xác thực SSL phía máy khách bằng cách cài sẵn chứng nhận bảo mật điện tử Cơ chế làm việc của SSL Bài 4 - Bảo mật cho website 10
  11. 11. Để sử dụng SSL trong ứng dụng web thì bạn cần mua một chứng nhận bảo mật điện tử Các loại cấp độ bảo mật SSL: 40 bit 56 bit 128 bit 256 bit Khái niệm Bài 4 - Bảo mật cho website 11
  12. 12. Cơ quan chứng nhận (Certification Authority - CA) Cơ quan đăng ký (Registration Authority - RA) Khái niệm Bài 4 - Bảo mật cho website 12
  13. 13. Địa chỉ kiểm tra kết nối bảo mật trong mạng nội bộ Bài 4 - Bảo mật cho website 13 //Kiểm tra kết nối bảo mật được thiết lập đúng chưa https://localhost/ //Yêu cầu một kết nối bảo mật https://localhost/book_apps/ch21_ssl/ //Trả về một kết nối thông thường http://localhost/book_apps.ch21_ssl/
  14. 14. Địa chỉ kiểm tra kết nối bảo mật trên Internet Bài 4 - Bảo mật cho website 14 //Yêu cầu một kết nối bảo mật https://www.murach.com/ //Trả về một kết nối thông thường http://www.murach.com/
  15. 15. Thành phần: HTTPS HTTP_HOST REQUEST_URI Mảng $_SERVER Bài 4 - Bảo mật cho website 15
  16. 16. File chuyển hướng tới kết nối bảo mật Bài 4 - Bảo mật cho website 16 <?php //Đảm bảo trang web sử dụng kết nối bảo mật if (!isset($_SERVER['HTTPS'])) { $url = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; header("Location: " . $url); exit(); } ?>
  17. 17. Ba loại xác thực Sử dụng xác thực dạng form Sử dụng xác thực cơ bản Sử dụng xác thực (authentication) Bài 4 - Bảo mật cho website 17
  18. 18. Xác thực dạng form: Cho phép nhà phát triển viết form đăng nhập để lấy tên tài khoản và mật khẩu Cho phép chỉ yêu cầu tên tài khoản và mật khẩu một lần duy nhất trong mỗi phiên làm việc Mặc định không mã hóa tên tài khoản và mật khẩu trước khi gửi lên máy chủ Ba loại xác thực Bài 4 - Bảo mật cho website 18
  19. 19. Xác thực cơ bản: Trình duyệt hiển thị hộp thoại để lấy tên tài khoản và mật khẩu Đòi hỏi trình duyệt gửi tên tài khoản và mật khẩu cho mỗi trang được bảo vệ Mặc định không mã hóa tên tài khoản và mật khẩu trước khi gửi lên máy chủ Xác thực rút gọn: Trình duyệt hiển thị hộp thoại để lấy tên tài khoản và mật khẩu Mã hóa tên tài khoản và mật khẩu trước khi gửi lên máy chủ Ba loại quá trình xác thực Bài 4 - Bảo mật cho website 19
  20. 20. Hàm sha1($string [, $bin]) Ví dụ: Lưu trữ và xác nhận mật khẩu: Hàm mã hóa dữ liệu Bài 4 - Bảo mật cho website 20 <?php function add_admin($email, $password) { global $db; $password = sha1($email . $password); $query = 'INSERT INTO administrators (emailAddress, password) VALUES (:email, :password)'; $statement = $db->prepare($query); $statement->bindValue(':email', $email); $statement->bindValue(':password', $password); $statement->execute(); $statement->closeCursor(); }
  21. 21. Hàm mã hóa dữ liệu Bài 4 - Bảo mật cho website 21 function is_valid_admin_login($email, $password) { global $db; $query = 'SELECT adminID FROM administrators WHERE emailAddress=:email AND password=:password'; $statement = $db->prepare($query); $statement->bindValue(':email', $email); $statement->bindValue(':password', $password); $statement->execute(); $valid = ($statement->rowCount() == 1); $statement->closeCursor(); return $valid; } ?>
  22. 22. Form đăng nhập cho xác thực dạng form Bài 4 - Bảo mật cho website 22
  23. 23. Trang web được bảo vệ (protected page) Bài 4 - Bảo mật cho website 23
  24. 24. Mã điều khiển cho trang web được bảo vệ Bài 4 - Bảo mật cho website 24 <?php //Bắt đầu session và include các hàm cần thiết session_start(); require_once('model/database.php'); require_once('model/admin_db.php'); //Lấy thông tin về hành động if (isset($_POST['action'])) { $action = $_POST['action']; } else if (isset($_GET['action'])) { $action = $_GET['action']; } else { $action = 'show_admin_menu'; } //Nếu người dùng chưa đăng nhập thì bắt buộc phải đăng nhập if (!isset($_SESSION['is_valid_admin'])) { $action = 'login'; }
  25. 25. Mã điều khiển cho trang web được bảo vệ Bài 4 - Bảo mật cho website 25 //Thực thi hành động switch($action) { case 'login': $email = $_POST['email']; $password = $_POST['password']; if (is_valid_admin_login($email, $password)) { $_SESSION['is_valid_admin'] = true; include('view/admin_menu.php'); } else { $login_message = 'You must login to view this page'; include('view/login.php'); } break;
  26. 26. Mã điều khiển cho trang web được bảo vệ Bài 4 - Bảo mật cho website 26 case 'show_admin_menu': include('view/admin_menu.php'); break; case 'show_product_manager': include('view/product_manager.php'); break; case 'show_order_manager': include('view/order_manager.php'); break; case 'logout': $_SESSION = array(); session_destroy(); $login_message = 'You have been logged out'; include('view/login.php'); break; }
  27. 27. File xác nhận tài khoản admin: Đoạn mã ở đầu trang đăng nhập: Áp dụng Bài 4 - Bảo mật cho website 27 <?php //Đảm bảo người dùng tài khoản admin đúng if (!isset($_SESSION['is_valid_admin'])) { header("Location: ."); } ?> <?php //Đòi hỏi kết nối bảo mật require_once('util/secure_conn.php'); ?>
  28. 28. Đoạn mã ở đầu các trang được bảo vệ: Áp dụng Bài 4 - Bảo mật cho website 28 <?php //Đòi hỏi kết nối bảo mật require_once('util/secure_conn.php'); //Đòi hỏi tài khoản người dùng đúng require_once('util/valid_admin.php'); ?>
  29. 29. Hình ảnh minh họa cho xác thực cơ bản Bài 4 - Bảo mật cho website 29
  30. 30. Trang web được bảo vệ Bài 4 - Bảo mật cho website 30
  31. 31. Trang web không được xác thực Bài 4 - Bảo mật cho website 31
  32. 32. Thành phần: PHP_AUTH_USER PHP_AUTH_PW Mảng $_SERVER cho xác thực cơ bản Bài 4 - Bảo mật cho website 32
  33. 33. Mã PHP đảm bảo tài khoản người dùng là đúng: Ví dụ Bài 4 - Bảo mật cho website 33 <?php require_once('model/database.php'); require_once('model/admin_db.php'); $email = $_SERVER['PHP_AUTH_USER']; $password = $_SERVER['PHP_AUTH_PW']; if (!is_valid_admin_login($email, $password)) { header('WWW-Authenticate: Basic realm="Admin"'); header('HTTP/1.0 401 unauthorized'); include('unauthorized.php'); exit(); } ?>
  34. 34. Mã PHP ở đầu mỗi trang web được bảo vệ: Ví dụ Bài 4 - Bảo mật cho website 34 <?php //Đòi hỏi kết nối bảo mật require_once('util/secure_conn.php'); //Đòi hỏi tài khoản admin đúng require_once('util/valid_admin.php'); ?>
  35. 35. Giới thiệu thư viện mcrypt Cách mã hóa và giải mã dữ liệu Lớp chứa dữ liệu được mã hóa Mã hóa và giải mã dữ liệu Bài 4 - Bảo mật cho website 35
  36. 36. PHP cung cấp sẵn thư viện mcrypt để hỗ trợ mã hóa và giải mã dữ liệu Một số khái niệm: Cipher Chế độ hoạt động (mode of operation) CBC (cipher-block chaining) Vector khởi tạo (Initialization Vector - IV) Thư viện mcrypt Bài 4 - Bảo mật cho website 36
  37. 37. Một số hàm trong thư viện mcrypt: Mcrypt_get_iv_size($cipher, $mode) Mcrypt_create_iv($ivs) Mcrypt_encrypt($cipher, $key, $data, $move, $iv) Mcrypt_decrypt(($cipher, $key, $data, $move, $iv) Thư viện mcrypt Bài 4 - Bảo mật cho website 37
  38. 38. Một số hằng trong thư viện mcrypt: MCRYPT_RIJNDAEL_128 MCRYPT_RIJNDAEL_192 MCRYPT_RIJNDAEL_256 MCRYPT_MODE_CBC Hai hàm chuyển đổi giữa dữ liệu nhị phân và base64: Base64_encode($data) Base64_decode($data) Thư viện mcrypt Bài 4 - Bảo mật cho website 38
  39. 39. Ví dụ Bài 4 - Bảo mật cho website 39 <?php $credit_card_no = '41111111111'; //Khai báo các biến $cipher = MCRYPT_RIJDAEL_128; $mode = MCRYPT_MODE_CBC; $key = sha1('secretKey', true); $ivs = mcrypt_get_iv_size($cipher, $mode); $iv = mcrypt_create_iv($ivs); //Mã hóa dữ liệu $data = mcrypt_encrypt($cipher, $key, $credit_card_no, $mode, $iv); $data = base64_encode($data); echo 'Encrypted data: '.$data.'<br/>'; //Giải mã dữ liệu $data = base64_decode($data); $credit_card_no = mcrypt_decrypt($cipher, $key, $credit_card_no, $mode, $iv); echo 'Decrypted data: '.$credit_card_no.'<br/>'; ?>
  40. 40. Lớp Crypt Bài 4 - Bảo mật cho website 40 class Crypt { private $key; private $ivs; private $iv; private $cipher; private $mode; public function __construct() { $this->cipher = MCRYPT_RIJDAEL_128; $this->mode = MCRYPT_MODE_CBC; $this->key = sha1('secretKey', true); $this->ivs = mcrypt_get_iv_size($this- >cipher, $this->mode); $this->iv = mcrypt_create_iv($this->ivs); }
  41. 41. Lớp Crypt Bài 4 - Bảo mật cho website 41 public function encrypt($data) { $data = mcrypt_encrypt($this->cipher, $this- >key, $data, $this->mode, $this->iv); $data = base64_encode($data); return $data; } public function decrypt($data) { $data = base64_decode($data); $data = mcrypt_decrypt($this->cipher, $this- >key, $data, $this->mode, $this->iv); return $data; } } ?>
  42. 42. Sử dụng lớp Crypt Bài 4 - Bảo mật cho website 42 require 'crypt.php'; $credit_card_no = '4111111111111111111'; //Tạo đối tượng Crypt $crypt = new Crypt(); //Sử dụng đối tượng Crypt để mã hóa dữ liệu $data = $crypt->encrypt($credit_card_no); echo 'Encrypted data: ' . $data . '<br />'; //Sử dụng đối tượng Crypt để giải mã dữ liệu $credit_card_no = $crypt->decrypt($data); echo 'Decrypted data: ' . $credit_card_no . '<br />';
  43. 43. Kết nối bảo mật sử dụng giao thức TLS và SSL Khi trình duyệt gửi yêu cầu tới máy chủ qua kết nối bảo mật thì máy chủ tự xác thực bằng chứng nhận bảo mật điện tử (digital secure certificate) Bài 4 - Bảo mật cho website 43 Tổng kết bài học
  44. 44. Quy trình sử dụng SSL trong ứng dụng web: Người dùng gửi yêu cầu mua chứng nhận bảo mật điện tử tới CA CA xác thực thông tin yêu cầu quá RA CA gửi cho người dùng chứng nhận bảo mật điện tử Người dùng gửi cho người quản trị hosting để cài lên máy chủ Mã hóa dữ liệu bằng hàm sha1 PHP cung cấp thư viện mcrypt hỗ trợ mã hóa và giải mã dữ liệu Tổng kết bài học Bài 4 - Bảo mật cho website 44

×