Bài giảng Lập trình Web - Bài 5: Phân quyền người dùng
Phân quyền người dùng
Phân quyền người dùng
Phân quyền nhằm trả lời các câu hỏi:
. Người dùng nào? Được làm gì? Trên đối tượng
nào?
Tổ chức phân quyền trong ứng dụng web trả
lời 3 câu hỏi trên
Sự phức tạp của phân quyền người dùng
phụ thuộc
. Qui mô của ứng dụng
. Số lượng và loại (nhóm) người dùng
. Trình độ và kinh nghiệm của người thiết kế phát
triển
2
Phân quyền người dùng
Tổ chức và kiểm tra người dùng dựa vào bảng
mô tả
Người dùng
Quyền
Xem
Tài nguyên
/ Module
/ Nhóm
An, Hoa
An, Hoa
An, Hoa
An, Hoa
An
Tin
Tin
Tin
Tin
Thêm
Sửa
Xóa
Xem
Thêm
…
Loại tin
Loại tin
…
An
…
3
Phân quyền người dùng
Về tổ chức dữ liệu: cần 2 bảng là người
dùng và nhóm
. Mỗi người dùng trong 1 hay nhiều nhóm
. Mỗi nhóm
• Diễn tả một hành động (xem, thêm, …) trên một loại tài
nguyên
• Hoặc diễn tả khả năng quản lý dữ liệu theo module
(quản trị laptop, tin, quảng cáo, user)
• Hoặc diễn tả theo phòng ban chức năng
. Nhiều loại tài nguyên, ví dụ: loại tin, tin, …
• Số lượng tài nguyên có cố định hay không
. Quyền áp dụng cho nhóm hay từng tài nguyên
riêng lẻ
4
Phân quyền người dùng
Kiểm tra quyền
. Được thực hiện đầu mọi trang php có nhu cầu
kiểm tra quyền
• Code kiểm tra quyền đặt trong 1 file riêng, sau đó dùng
require
<?php
$kt = checkPermission([tham số]);
if($kt==false)
header(“location:login.php?m=„Access denied‟”);
?>
. Hàm kiểm tra quyền dựa vào các group mà người
dùng đăng nhập là thành viên rồi tra trong bảng
Roles
. Khi người dùng login, username và userid được
5
lưu trong session
Tăng tốc website
Tăng tốc website
Website hoạt động nhanh hay chậm phụ
thuộc vào nhiều yếu tố:
. Khả năng của server
. Băng thông của đường truyền
. Vị trí địa lý nơi đặt server
. Code của website có được tối ưu hay không
Trong phạm vi của môn này chúng ta chỉ
quan tâm đến yếu tố code của website
7
Tăng tốc website
Giảm bớt các request
. Thiết kế đơn giản: sử dụng lượng vừa phải các
hình ảnh, flash, script, … trên website
. Gom các file CSS, JavaScript lại với nhau nếu
được
. Sử dụng CSS sprites (gom nhiều ảnh lại với nhau
thành một)
• Nên gom các ảnh nhỏ thành 1 cột dọc, để xác định tọa
độ cho dễ
. Sử dụng Image Maps: Gom các ảnh nhỏ thành 1
ảnh lớn
8
Tăng tốc website
Sử dụng Content Delivery Network (CDN)
. Đặt website ở các vùng địa lý mà phần lớn
người dùng website của bạn ở đó
. Sử dụng các CDN đang hoạt động
• Ví dụ Google đã lưu trữ những framework như
trên hệ thống server.
9
Tăng tốc website
VD sử dụng jQuery CDN
libs/jquery/1.12.4/jquery.min.js"></script>
VD sử dụng Bootstrap CDN
strapcdn.com/bootstrap/3.3.7/css/bootstrap.min
.css">
x/libs/jquery/1.12.4/jquery.min.js"></script>
bootstrap/3.3.7/js/bootstrap.min.js"></script>
Tăng tốc website
Nén HTML với gzip: đa số các trình duyệt
đều có khả năng giải nén những trang html
Các cách để nén với thư viện zlib compress
trong php
php_flag zlib.output_compression On // .htaccess
zlib.output_compression = On
// php.ini
. Hoặc đặt lệnh sau ở đầu trang
ini_set(“zlib.output_compression”, “On”) hoặc
ob_start('ob_gzhandler')
11
Tăng tốc website
Cache tại client: có hai cách thức điều
khiển cache ở client thông qua http
header: expire và cache-control
. Expire
$offset = 3600 * 24;
$expire = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) .
" GMT";
header($expire);
. Cache-Control
$expire = "Cache-Control: max-age=3600, must-revalidate";
header($expire);
12
Tăng tốc website
Tối ưu các truy vấn sql
. Giảm join các bảng
. Index hợp lý các field
. Chấp nhận dữ liệu dư thừa để tăng tốc độ xử
lý
. Tuyệt đối không dùng SELECT *, chỉ select
những field cần dùng
13
Tăng tốc website
PHP Cache
. Opcode: là code của các trang PHP đã được
dịch xong và lưu trong share memory để dùng
lại mà không phải thông dịch từng lệnh trong
file khi có request
. File caching: Nội dung file được lưu ở 1 nơi
nào đó sau khi kết xuất lần đầu tiên. Với
những request đến sau, chỉ đọc file kết quả
rồi trả về ngay lập tức
14
Tăng tốc website
PHP Cache
. Memory cache
• Những dữ liệu của riêng từng user, có thể lưu vào
session để dùng ngay như username, họ tên,
email, giới tính….
• Những dữ liệu kết xuất lần đầu tiên, thay vì lưu
trong file cache, bạn có thể lưu trong 1 table nào
đó để có thể dùng lại
15
Bảo mật website
Bảo mật website
Bảo Mật Session:
. Khi hàm session_start() được gọi, 1 session
được tạo ra
. Sau đó php sẽ send header để tạo 1 cookie tên
PHPSESSID có giá trị là sessionid
. Mỗi lần request, sessionid sẽ được gửi lại trên
server
. Nếu user A lấy được sessionid của user B đang
login, coi như đã A đã được login với tư cách là
B
17
Bảo mật website
Bảo Mật Session:
. Giải pháp:
• Gọi lại hàm session_regenerate_id() để sinh sessionid
mới
• Hoặc có thể lưu thêm 1 số thông tin của user vào
session, và kiểm tra lại
18
Bảo mật website
Chống SQL Injection (Database Security)
. Khi login với username là a' or 1=1 limit 0,1 #
và password là 123 thì câu lệnh trở thành
SELECT * FROM user WHERE username = 'a'
OR 1 = 1 limit 0,1 # Password=123
luôn có dữ liệu, vì từ dấu # trở về sau bị bỏ
qua (nghĩa là MySql không quan tâm #
Password=123 )
19
Bảo mật website
Chống SQL Injection
. Giải pháp:
• Bảo vệ các câu lệnh SQL là bằng cách kiểm soát
chặt chẽ tất cả các dữ liệu nhập nhận được từ
người dùng
• Trong file php.ini cấu hình
magic_quotes_gpc = On
20
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Web - Bài 5: Phân quyền người dùng", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- bai_giang_lap_trinh_web_bai_5_phan_quyen_nguoi_dung.pdf