Upload
hoc-lap-trinh-web
View
860
Download
6
Embed Size (px)
DESCRIPTION
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
Citation preview
Bài 4Bảo mật cho website
Kết nối bảo mật và giao thức SSLXác thực cho websiteMã hóa và giải mã dữ liệu
Mục tiêu
Bài 4 - Bảo mật cho website 2
Giới thiệu về kết nối bảo mậtLấ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ậtChuyể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
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
Kết nối bảo mật (secure connection): ngăn chặndữ liệu bị đọc được trong quá trình truyền tảiqua InternetKết nối được bảo mật thường chậm hơn kết nốithường: phải mã hóa và giải mã dữ liệuCá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
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
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
Chứng nhận phía máy chủChứng nhận phía máy khách
Hai loạichứng nhận bảo mật điện tử
Bài 4 - Bảo mật cho website 8
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ựcbằ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ứngnhậ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
Nếu chứng nhận bảo mật không phải của nguồntin cậy thì trình duyệt thông báo để người dùngtự 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ằngcá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
Để sử dụng SSL trong ứng dụng web thì bạn cầnmua 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 bit56 bit128 bit256 bit
Khái niệm
Bài 4 - Bảo mật cho website 11
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
Địa chỉ kiểm trakế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ưahttps://localhost/
//Yêu cầu một kết nối bảo mậthttps://localhost/book_apps/ch21_ssl/
//Trả về một kết nối thông thườnghttp://localhost/book_apps.ch21_ssl/
Địa chỉ kiểm trakế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ậthttps://www.murach.com/
//Trả về một kết nối thông thườnghttp://www.murach.com/
Thành phần:HTTPSHTTP_HOSTREQUEST_URI
Mảng $_SERVER
Bài 4 - Bảo mật cho website 15
File chuyển hướngtớ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ậtif (!isset($_SERVER['HTTPS'])) {
$url = 'https://' . $_SERVER['HTTP_HOST'] .$_SERVER['REQUEST_URI'];
header("Location: " . $url);exit();
}?>
Ba loại xác thựcSử dụng xác thực dạng formSử 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
Xác thực dạng form:Cho phép nhà phát triển viết form đăng nhập để lấytên tài khoản và mật khẩuCho phép chỉ yêu cầu tên tài khoản và mật khẩu mộtlần duy nhất trong mỗi phiên làm việcMặc định không mã hóa tên tài khoản và mật khẩutrướ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
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 chomỗi trang được bảo vệMặc định không mã hóa tên tài khoản và mật khẩutrướ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ẩuMã hóa tên tài khoản và mật khẩu trước khi gửi lênmáy chủ
Ba loại quá trình xác thực
Bài 4 - Bảo mật cho website 19
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
<?phpfunction 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();
}
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;
}?>
Form đăng nhậpcho xác thực dạng form
Bài 4 - Bảo mật cho website 22
Trang web được bảo vệ(protected page)
Bài 4 - Bảo mật cho website 23
Mã điều khiểncho 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ếtsession_start();require_once('model/database.php');require_once('model/admin_db.php');
//Lấy thông tin về hành độngif (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 đăngnhậpif (!isset($_SESSION['is_valid_admin'])) {
$action = 'login';}
Mã điều khiểncho trang web được bảo vệ
Bài 4 - Bảo mật cho website 25
//Thực thi hành độngswitch($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;
Mã điều khiểncho 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;
}
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 đúngif (!isset($_SESSION['is_valid_admin'])) {
header("Location: .");}?>
<?php//Đòi hỏi kết nối bảo mậtrequire_once('util/secure_conn.php');?>
Đ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ậtrequire_once('util/secure_conn.php');//Đòi hỏi tài khoản người dùng đúngrequire_once('util/valid_admin.php');?>
Hình ảnh minh họacho xác thực cơ bản
Bài 4 - Bảo mật cho website 29
Trang web được bảo vệ
Bài 4 - Bảo mật cho website 30
Trang web không được xác thực
Bài 4 - Bảo mật cho website 31
Thành phần:PHP_AUTH_USERPHP_AUTH_PW
Mảng $_SERVERcho xác thực cơ bản
Bài 4 - Bảo mật cho website 32
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
<?phprequire_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();
}?>
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ậtrequire_once('util/secure_conn.php');
//Đòi hỏi tài khoản admin đúngrequire_once('util/valid_admin.php');?>
Giới thiệu thư viện mcryptCách mã hóa và giải mã dữ liệuLớ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
PHP cung cấp sẵn thư viện mcrypt để hỗ trợ mãhóa và giải mã dữ liệuMột số khái niệm:
CipherChế độ 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
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
Một số hằng trong thư viện mcrypt:MCRYPT_RIJNDAEL_128MCRYPT_RIJNDAEL_192MCRYPT_RIJNDAEL_256MCRYPT_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
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/>';?>
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);
}
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;
}}?>
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 />';
Kết nối bảo mật sử dụng giao thức TLS và SSLKhi trình duyệt gửi yêu cầu tới máy chủ qua kếtnối bảo mật thì máy chủ tự xác thực bằng chứngnhậ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
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 CACA xác thực thông tin yêu cầu quá RACA 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ênmáy chủ
Mã hóa dữ liệu bằng hàm sha1PHP 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