Session và Cookie
I-Web Application
Ứng dụng Web là một ứng dụng server/client sử dụng giao thức HTTP để tương tác với người dùng hay hệ thống khác.Một ứng dụng web thường có kiến trúc gồm:
Mô hình hóa hoạt động của một ứng dụng web
- Trình khách ( hay còn gọi là trình duyệt): Internet Explorer, Firefox.
- Trình chủ: Apache, IIS, ….
- Hệ quản trị cơ sở dữ liệu: SQL Server, MySQL, DB2, Access….
- Trình duyệt : gửi một yêu cầu (request) đến trình chủ thông qua các lệnh cơ bản GET, POST của giao thức HTTP.
- Trình chủ :
- Thực thi một chương trình được xây dựng từ nhiều ngôn ngữ như Perl, C/C++…
- Yêu cầu bộ diễn dịch thực thi các trang ASP, JSP…
- Trình chủ trả về cho trình khách 1 luồng dữ liệu có định dạng theo giao thức HTTP gồm 2 phần:
- Header: Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng thái trao đổi giữa trình duyệt và WebServer.
- Body là phần nội dung dữ liệu mà Server gửi về Client, nó có thể là một file HTML, một hình ảnh, một đoạn phim hay một văn bản bất kì.
II-Session và cookie
Khái niệm Cookie:- Cookie là 1 đoạn dữ liệu được truyền đến browser từ server, đoạn dữ liệu này sẽ được browser lưu trữ (trong memory hoặc trên đĩa) và sẽ gửi ngược lên lại server mỗi khi browser tải 1 trang web từ server.
- Các cookie được lưu trữ dưới những file dữ liệu nhỏ dạng text, được ứng dụng tạo ra để lưu trữ/truy tìm/nhận biết các thông tin về người dùng đã ghé thăm trang Web và những vùng mà họ đi qua trong trang. Những thông tin này có thể bao gồm tên/định danh người dùng, mật khẩu, sở thích, thói quen…cookie được trình duyệt của người dùng chấp nhận lưu trên đĩa cứng của máy mình, tuy nhiên không phải lúc nào trình duyệt cũng hỗ trợ cookie, mà còn tùy thuộc vào người dùng có chấp nhận chuyện lưu trữ đó hay không.
- Cookie được tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới browser. Ngoài ra, mỗi browser quản lý và lưu trữ cookie theo cách riêng của mình, cho nên 2 browser cùng truy cập vào 1 website sẽ nhận được 2 cookie khác nhau.
-
DomainFlagPathSecureExpirationNameValuewww.redhat. comFALSE/FALSE1154029490Apache64.3.40.151.16
- Domain: Tên miền tạo cookie
- Flag: Xác định các máy khác với cùng tên miền có được truy xuất đến cookie hay không
- Path: Phạm vi các địa chỉ có thể truy xuất cookie. Ví dụ: Nếu path là “/tracuu” thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư mục con của nó như /tracuu/baomat có thể truy xuất đến cookie này. Còn nếu giá tri là “/” thì cookie sẽ được truy xuất bởi tất cả địa chỉ thuộc miền trang web tạo cookie
- Secure: Có kết nối SSL hay không
- Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00 giờ GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình duyệt sẽ chỉ lưu trong bộ nhớ RAM và sẽ xoá nó khi trình duyệt bị đóng.
- Name: Tên biến
- Value: Giá trị biến đó
Session là khoảng thời gian người sử dụng giao tiếp với 1 ứng dụng. Session bắt đầu khi người sử dụng truy cập vào ứng dụng lần đầu tiên, và kết thúc khi người sử dụng thoát khỏi ứng dụng. Mỗi session sẽ có một định danh (ID), 1 session khác nhau sẽ có 2 ID khác nhau. Trong ngữ cảnh ứng dụng web, website sẽ quyết định khi nào session bắt đầu và kết thúc. Trong 1 session, website có thể lưu trữ một số thông tin như đánh dấu bạn đã login hay chưa, những bài viết nào bạn đã đọc qua, …
SessionID thường được lưu vào:
- Biến trên URL
- Biến ẩn Form
- Cookie
Cookie và Session đều có chung mục đích là lưu giữ data để truyền từ 1 trang web sang 1 trang web khác (trên cùng website). Nhưng phương thức lưu trữ và quản lý data của Cookie và Session có phần khác nhau.
Cookie sẽ được lưu trữ tại browser, do browser quản lý và browser sẽ tự động truyền cookie ngược lên server mỗi khi truy cập vào 1 trang web trên server.
Dữ liệu lưu trữ trong Session sẽ được ứng dụng quản lý, trong ngữ cảnh web, ứng dụng ở đây sẽ là website và webserver. Browser chỉ truyền ID của session lên server mỗi khi truy cập vào website trên server.
Mỗi Session gắn với 1 định danh (ID). ID sẽ được tạo ra trên server khi session bắt đầu và được truyền cho browser. Sau đó browser sẽ truyền lại ID này lên server mỗi khi truy cập vào website. Như vậy ta có thể thấy rằng sẽ rất tiện nếu như Session ID được lưu trữ trong Cookie và được browser tự động truyền lên server mỗi khi truy cập vào website.
Sử dụng Session hay Cookie
Sử dụng Session hoặc Cookie là tuỳ vào lựa chọn của Lập trình viên, tuy nhiên Session thường được ưa chuộng hơn Cookie vì một số lý do sau:
- Trong một số trường hợp Cookie không sử dụng được. Có thể browser đã được thiết lập để không chấp nhận cookie, lúc đó session vẫn sử dụng được bằng cách truyền session ID giữa các trang web qua URL, ví dụ: script.php?session=abc123.
- Lượng data truyền tải giữa browser và server: chỉ mỗi session ID được truyền giữa browser và server, data thực sự được website lưu trữ trên server.
- Bảo mật: càng ít thông tin được truyền tải qua lại giữa browser và client càng tốt, và càng ít thông tin được lưu trữ tại client càng tốt.
Khi User lần đầu tiên truy cập sẽ yêu cầu web khởi tạo một phiên làm việc (session), Rails khởi tạo một sessionID và tạo một file để lưu trữ các biến session liên quan đến user đó. Đồng thời Rails tạo một Cookie để đưa sessionID vào đáp ứng yêu cầu của user. Sau đó trình duyệt sẽ lưu lại cookie và đưa sessionID gắn vào trong cookie trong các request lên server tiếp theo
III-Bảo mật Session
Thông thường, sau khi người dùng được chứng thực dựa trên những thông tin cá nhân như tên/mật khẩu, session ID được xem như một mật khẩu tĩnh tạm thời cho những lần yêu cầu tiếp theo. Điều này đã khiến cho Session ID là mục tiêu lớn cho những hacker. Trong nhiều trường hợp, hacker giành được session ID hợp lệ của người dùng để từ đó đột nhập vào phiên làm việc của họ.Tấn công vào một phiên làm việc thường được thực hiện theo 2 kiểu chính sau:
- Ấn định phiên làm việc (Session Fixation).
- Đánh cắp phiên làm việc (Session Hijacking).
Cách phòng chống:
- Chống việc đăng nhập với một sessionID có sẵn (luôn tạo sessionID mới khi người dùng đăng nhập hệ thống
- Tạo hệ thống theo hướng giới hạn (chỉ tạo sessionID mới sau khi người dùng thành công)
- Giơi hạn phạm vi ứng dụng của session ID
- Kết hợp SessionID với địa chỉ trình duyệt
- Xóa bỏ session khi người dùng thoát hệ thống hay tắt trình duyệt
- Thiết lập thời gian hết hiệu lực cho session
a) Dự đoán phiên làm việc
- Hacker là người dùng của hệ thống
- >Từ các sessionID nhận được tìm qui luật phát sinh
- Dự đoán được sessionID của phiên người dùng kế tiếp
- Hacker tự tạo một chương trình gửi nhiều yêu cầu trong một khoảng thời gian đến trình chủ kèm sessionID
- Lợi dụng thói quen developer hay lấy địa chỉ IP của người dùng làm sessionID để vét cạn
- Thực hiện qua lỗi Cross-Site-Scripting, chèn đoạn mã vào trình duyệt của nạn nhân để lấy được cookie
No comments:
Post a Comment