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ả

Quyền

Xem Thêm

Tin Tin

An, Hoa An, Hoa

Người dùng / Nhóm Tài nguyên / Module

Sửa Tin An, Hoa

Xóa Tin An, Hoa

Xem Loại tin An

3

Thêm … Loại tin … An …

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

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ễ

• (http://www.csssprites.com, http://spritegen.com)  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

jQuery, prototype, MooTools, Dojo, script.aculo.us trên hệ thống server.

9

• Ví dụ Google đã lưu trữ những framework như

Tăng tốc website

 VD sử dụng jQuery CDN  VD sử dụng Bootstrap CDN

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

// php.ini

// .htaccess

trong php php_flag zlib.output_compression On zlib.output_compression = On  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ử

 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 Có nhiều giải pháp như APC, XCache, eAccelerator

 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

15

trong file cache, bạn có thể lưu trong 1 table nào đó để có thể dùng lại

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

Click here

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

session, và kiểm tra lại

18

• Hoặc có thể lưu thêm 1 số thông tin của user vào

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

20

• Trong file php.ini cấu hình magic_quotes_gpc = On

Bảo mật website

 SSL và mã hóa dữ liệu

 SSL là giao thức web dùng để thiết lập bảo

mật giữa webserver và client

 Tất cả dữ liệu truyền đều được mã hóa  Với SSL, browser và server kiểm tra tính hợp lệ lẫn nhau, sau đó mã hóa dữ liệu truyền

 Cấu hình webserver hỗ trợ (httpd.conf)

(free hoặc thương mại) để xác thực

21

• LoadModule ssl_module modules/mod_ssl.so  Các website lớn đều dùng SSL Certificates

Bảo mật website

 Chống tấn công bằng DDos (Distributed

Denial of Service)  Chống iframe (mượn 1 website để chuyển tấn

công)