Kiến trúc ứng dụng web
Các thành phần hệ thống ứng dụng web
Trong phần đầu tiên này, chúng ta sẽ khám phá các khái niệm cơ bản về mô hình kiến trúc của một hệ thống ứng dụng web cơ bản Những khái niệm nền tảng này rất quan trọng và cần được hiểu rõ để có thể tìm hiểu sâu hơn về hệ thống ứng dụng web.
Máy chủ là hệ thống thiết yếu trong mạng máy tính, có nhiệm vụ đáp ứng các yêu cầu cụ thể từ người dùng Nó đóng vai trò cung cấp một hoặc nhiều dịch vụ mạng, hỗ trợ hoạt động và kết nối trong môi trường số.
Máy chủ là một loại máy tính được thiết kế với nhiều tính năng vượt trội, có khả năng lưu trữ và xử lý dữ liệu lớn hơn nhiều so với máy tính thông thường Trên máy chủ, các phần mềm và dịch vụ được cài đặt để phục vụ cho các máy tính khác truy cập và yêu cầu cung cấp dịch vụ cùng tài nguyên Nói cách khác, máy chủ đóng vai trò là nền tảng cho mọi dịch vụ trên Internet.
Máy chủ web (Webserver) là một thiết bị cài đặt phần mềm và dịch vụ phục vụ cho việc truy cập và quản lý nội dung trên internet Những phần mềm này cũng thường được gọi là web server, và tất cả các máy chủ web đều có khả năng hiểu và xử lý các file để phục vụ người dùng.
Các web server như IIS của Microsoft hỗ trợ các file *.asp và *.aspx, trong khi Apache chuyên phục vụ các file *.php Ngoài ra, Sun Java System Web Server của SUN cũng xử lý các file *.jsp, cho thấy sự đa dạng trong việc phục vụ các loại file khác nhau trên các nền tảng web khác nhau.
Trình duyệt là phần mềm ứng dụng cho phép người dùng truy cập và hiển thị thông tin trên mạng toàn cầu (World Wide Web) Mỗi nguồn thông tin, như trang web, video, hình ảnh hay các loại dữ liệu khác, được xác định bằng một Định danh tài nguyên (URI).
Các trình duyệt không chỉ giúp người dùng truy cập vào mạng toàn cầu mà còn cho phép truy cập thông tin từ các máy chủ web trong hệ thống mạng riêng và các tài liệu từ hệ thống lưu trữ file Bên cạnh đó, trình duyệt cũng đóng vai trò quan trọng trong việc tiết kiệm tài nguyên thông tin cho các hệ thống lưu trữ file.
Các trình duyệt hay được sử dụng hiện nay như: Google Chrome, Mozilla Firefox, Internet Explorer, Safari, Opera,…
Tên miền (Domain Name) là cách xác định vị trí của một máy tính trên Internet bằng cách ánh xạ tên miền với địa chỉ IP của máy tính đó Quá trình này được thực hiện thông qua Hệ thống tên miền (DNS).
Hệ thống tên miền (DNS) là tập hợp các cơ sở dữ liệu lưu trữ tên miền và địa chỉ IP tương ứng Chức năng chính của DNS trên Internet là chuyển đổi tên miền thành địa chỉ IP và ngược lại, từ địa chỉ IP sang tên miền.
Hiện nay, hệ thống tên miền trên thế giới được tổ chức theo cấu trúc hình cây, với tên miền gốc (ROOT) được biểu thị bằng dấu ‘.’ Dưới tên miền gốc, có hai loại tên miền chính: tên miền cấp cao dùng chung (gTLDs) như com, edu, net và tên miền cấp cao mã quốc gia (ccTLDs) như vn, us, uk.
Hình 1: Sơ đồ cây hệ thống DNS
The global domain name system is overseen by ICANN (the Internet Corporation for Assigned Names and Numbers), which manages the highest level of the domain hierarchy, known as the ROOT level This organization holds the authority to allocate top-level domain names.
Máy chủ DNS (DNS server) là một hệ thống lưu trữ cơ sở dữ liệu về tên miền và địa chỉ IP tương ứng Khi nhận yêu cầu phân giải tên miền, máy chủ DNS sẽ tìm kiếm và cung cấp địa chỉ IP tương ứng trong phản hồi của nó.
Khi người dùng nhập địa chỉ web vào trình duyệt và nhấn enter, máy tính sẽ gửi một yêu cầu đến máy chủ DNS với tên miền đã nhập Máy chủ DNS sẽ phân giải tên miền và trả về địa chỉ IP tương ứng Địa chỉ IP này chính là vị trí của máy chủ chứa ứng dụng web mà người dùng muốn truy cập, sau đó máy tính sẽ gửi các yêu cầu đến địa chỉ IP đó để truy cập vào web.
Hình 2: Hoạt động của DNS
1.4 Cơ sở dữ liệu (Database)
Cơ sở dữ liệu là tập hợp dữ liệu có cấu trúc và mối quan hệ liên kết, được lưu trữ và quản lý thông qua hệ quản trị cơ sở dữ liệu (DBMS).
Các ưu điểm mà Cơ sở dữ liệu mang lại so với việc lưu trữ dữ liệu trong file đơn thuần là:
Giảm sự trùng lặp thông tin xuống mức thấp nhất Do đó đảm bảo thông tin có tính nhất quán và toàn vẹn dữ liệu.
Đảm bảo dữ liệu có thể được truy xuất theo nhiều cách khác nhau
Nhiều người có thể sử dụng một cơ sở dữ liệu.
Hệ quản trị cơ sở dữ liệu là phần mềm hoặc hệ thống thiết kế để quản lý cơ sở dữ liệu, hỗ trợ lưu trữ, sửa chữa, xóa và tìm kiếm thông tin Có nhiều loại hệ quản trị cơ sở dữ liệu, từ phần mềm nhỏ trên máy tính cá nhân đến các hệ thống phức tạp chạy trên nhiều siêu máy tính.
Giao thức HTTP, HTTPS
Phần này chúng ta sẽ tìm hiểu về giao thức cơ bản dùng để giao tiếp giữa máy chủ và trình duyệt là giao thức HTTP và HTTPS.
HTTP, hay Giao thức Truyền tải Siêu văn bản, là một tiêu chuẩn xác định cách thức định dạng và truyền tải các thông điệp như văn bản, hình ảnh, âm thanh và video giữa máy chủ Web và trình duyệt Khi người dùng nhập một địa chỉ URL vào trình duyệt, một yêu cầu HTTP được gửi đến máy chủ Web để tìm và tải trang Web tương ứng, sau đó hiển thị dưới dạng phản hồi Nói tóm lại, HTTP là cầu nối giúp truyền tải các tệp từ máy chủ Web đến trình duyệt, cho phép người dùng truy cập và xem nội dung trực tuyến.
Internet.HTTP là một giao thức ứng dụng của bộ giao thức TCP/IP (các giao thức nền tảng cho Internet).
HTTP được gọi là giao thức "phi trạng thái" (stateless) vì mỗi yêu cầu (request) được thực hiện độc lập, không có thông tin nào về các yêu cầu trước đó Đây là một hạn chế của HTTP.
Phiên bản mới nhất của giao thức HTTP là 1.1, mang lại tốc độ truyền tải trang web nhanh hơn so với phiên bản trước đó (HTTP 1.0) và giúp giảm tình trạng tắc nghẽn trên mạng.
Giao thức HTTP gồm 2 thành phần chính là:
HTTP Resquest gồm các phần:
Dòng đầu tiên trong một yêu cầu HTTP, chẳng hạn như GET /images/logo.png HTTP/1.1, thể hiện việc yêu cầu truy xuất một tệp hình ảnh có tên logo.png từ vị trí /images/logo.png.
Phần nội dung thông điệp có thể có hoặc không.
Hình 3: Cấu trúc HTTP Request
Cấu trúc cơ bản của HTTP Requests bắt đầu bằng Request-Line, tiếp theo có thể là một hoặc nhiều header và body.
Khi người dùng truy cập trang www.ft.com, Internet Explorer của Microsoft gửi một thông điệp HTTP dưới dạng văn bản Dòng đầu tiên của thông điệp là Request-Line, trong khi các tiêu đề khác tạo thành phần còn lại của nội dung.
Hình dưới phân tích cụ thể hơn Request-Line, bao gồm 3 phần: Method – phương thức của thông điệp, URI, và Version- phiên bản của HTTP
Phương thức (method) cụ thể xuất hiện đầu tiên trong Request-Line Trong ví dụ trên đây là một phương thức GET.
Mục tiếp theo trong Request-Line là Request-URI, chứa nguồn tài nguyên cần truy cập Trong ví dụ, Request-URI là (/), cho thấy yêu cầu đối với các nguồn tài nguyên gốc Cuối cùng, phần còn lại của Request-Line là phiên bản HTTP, trong trường hợp này là HTTP phiên bản 1.1.
HTTP Response gồm các phần:
Dòng đầu tiên chứa một mã trạng thái (Status Code), ví dụ HTTP/1.1 200
OK, để thông báo là yêu cầu của người dùng đã được thực hiện thành công.
Phần nội dung thông điệp có thể có hoặc không
Hình 6: Cấu trúc HTTP Response
Status-Line bắt đầu bởi số phiên bản của HTTP (trường hợp này là HTTP/1.1), sau đó là mã trạng thái(trường hợp này là 200 OK).
Hình 8: Mã trạng thái trả về của HTTP
HTTPS, viết tắt của HyperText Transfer Protocol Secure, là giao thức kết hợp giữa HTTP và bảo mật SSL/TLS, cho phép trao đổi thông tin an toàn trên Internet Giao thức này thường được sử dụng trong các giao dịch nhạy cảm, nơi yêu cầu tính bảo mật cao.
Giao thức HTTPS sử dụng cổng mặc định 443, và cung cấp các dịch vụ hay đảm bảo tính chất sau của thông tin:
Để đảm bảo tính tin cậy (Confidentiality), cần sử dụng các phương thức mã hóa nhằm bảo vệ thông điệp được trao đổi giữa client và server, ngăn chặn việc truy cập trái phép từ bên thứ ba.
Để đảm bảo tính toàn vẹn của thông điệp, cả client và server cần sử dụng các hàm băm, giúp họ tin tưởng rằng thông điệp nhận được không bị mất mát hay chỉnh sửa.
Authenticity is crucial in ensuring that clients can trust the server or website they are accessing By utilizing digital certificates, users can verify that they are connecting to the legitimate server or website they intend to visit, protecting them from potential impersonation or fraud.
Quá trình giao tiếp giữa client và server thông qua HTTPS:
1 Client gửi request cho một secure page (có URL bắt đầu với https://)
2 Server gửi lại cho client chứng thực (certificate) của nó.
3 Client gửi certificate này tới CA (mà được ghi trong certificate) để kiểm chứng.
Nếu chứng chỉ SSL đã được xác thực và còn hạn sử dụng, hoặc khách hàng vẫn cố tình truy cập mặc dù trình duyệt web đã cảnh báo rằng chứng chỉ này không đáng tin cậy (do là chứng chỉ tự ký, chứng chỉ đã hết hạn, hoặc thông tin trong chứng chỉ không chính xác), thì bước 4 mới được thực hiện.
The client randomly generates a symmetric encryption key and then uses the public key from the certificate to encrypt this symmetric key before sending it to the server.
5 Server sử dụng private key (tương ứng với public key trong certificate ở trên) để giải mã ra symmetric key ở trên.
6 Sau đó, cả server và client đều sử dụng symmetric key đó để mã hóa/giải mã các thông điệp trong suốt phiên truyền thông.
Các khóa đối xứng sẽ được tạo ra ngẫu nhiên và có thể khác nhau trong mỗi phiên làm việc với máy chủ Bên cạnh việc mã hóa, cơ chế băm cũng sẽ được áp dụng để đảm bảo tính toàn vẹn cho các thông điệp được trao đổi.
Nguyên lý hoạt động của WebServer
Client-side scripting (có thể gọi là mã thực thi phía người dùng) là các đoạn mã được thực thi bởi trình duyệt.
Các ngôn ngữ client-side scripting là: JavaScript, Ajax, Jquery, ActionScript.
Server-side scripting, hay còn gọi là mã thực thi phía máy chủ, là một kỹ thuật quan trọng trong thiết kế website Kỹ thuật này cho phép các đoạn mã được thực thi trên máy chủ khi nhận yêu cầu từ client, từ đó tạo ra kết quả được gửi lại trong các phản hồi từ máy chủ.
Server-side scripting được sử dụng để tạo ra giao tiếp hiệu quả và kiểm soát quyền truy cập giữa người dùng và cơ sở dữ liệu hoặc các nguồn tài nguyên dữ liệu khác.
Server-side scripting languages include ASP (*.asp), ASP.NET (*.aspx), C via CGI (*.c, *.csp), ColdFusion Markup Language (*.cfm), Java through JavaServer pages (*.jsp), Server-side JavaScript (*.ssjs, *.js), Lua (*.lp, *.op, *.lua), Perl CGI (*.cgi, *.ipl, *.pl), PHP (*.php) as an open-source option, Python (*.py), and Ruby (*.rb).
3.3 Mô hình hoạt động của Webserver
Các bước cơ bản trong tiến trình truyền tải trang web đến màn hình của bạn được thể hiện theo mô hình sau:
Hình 9: Hoạt động của Webserver
Theo mô hình này, trình duyệt web kết nối với máy chủ web để yêu cầu một trang web và nhận lại nội dung của trang đó Các bước mà máy tính người dùng thực hiện bao gồm việc gửi yêu cầu đến máy chủ và nhận phản hồi từ máy chủ.
Khi người dùng nhập địa chỉ http://www.mysite.com/index.html vào thanh địa chỉ của trình duyệt, trình duyệt sẽ thực hiện việc phân tách địa chỉ này thành ba phần khác nhau.
Phần giao thức (Ví dụ: http)
Máy chủ tên miền (Ví dụ: www.mysite.com)
Tập tin (Ví dụ: index.html)
Trình duyệt gửi yêu cầu đến máy chủ tên miền để chuyển đổi tên miền "www.mysite.com" thành địa chỉ IP tương ứng, quá trình này chính là hoạt động của hệ thống DNS đã được đề cập ở bài trước.
Sau đó, trình duyệt sẽ gửi tiếp một kết nối tới máy chủ có địa chỉ IP tương ứng qua cổng 80 (cổng mặc định của giao thức HTTP).
Dựa trên giao thức HTTP, trình duyệt gửi yêu cầu GET đến máy chủ, yêu cầu tập tin:
http://www.mysite.com/index.html
Khi máy chủ nhận yêu cầu, nếu tìm thấy tập tin index.html, nó sẽ gửi tập tin này đến trình duyệt web của client Trình duyệt sẽ đọc các thẻ HTML, định dạng trang web và hiển thị kết quả trên màn hình của client.
Hình 10: Hoạt động của ứng dụng web
Ngày nay, hầu hết các webserver không chỉ hỗ trợ các trang web tĩnh bằng HTML mà còn cho phép phát triển các trang web động sử dụng ngôn ngữ server-side như JSP, ASP và PHP Các thành phần cơ bản của một web động bao gồm khả năng truy vấn cơ sở dữ liệu, giúp nâng cao tính tương tác và trải nghiệm người dùng.
Trình duyệt web client: Nơi gửi đi các HTTP request và nhận về các HTTP response, mã HTML, Client-script trình bày lại cho người dung.
Firewall đóng vai trò quan trọng trong việc bảo vệ giữa người dùng, Internet và webserver bằng cách chặn và lọc các gói tin chứa mã độc Tùy thuộc vào mức độ triển khai, Firewall có thể hoạt động ở tầng mạng hoặc tầng ứng dụng, giúp nâng cao an ninh cho hệ thống.
Webserver là một thành phần quan trọng trong việc nhận các yêu cầu HTTP và trả về phản hồi tương ứng cho người dùng Tùy thuộc vào cấu hình của webserver, quá trình xử lý sẽ khác nhau Thông thường, khi client yêu cầu các trang tĩnh như HTML, Javascript và CSS, webserver sẽ trả về mã tương ứng Trong trường hợp yêu cầu các script phía máy chủ như JSP, PHP hoặc ASP, webserver sẽ chuyển tiếp các yêu cầu HTTP đến ứng dụng web để xử lý.
Web App: Nhận các yêu cầu từ webserver, tiến hành tính toán, sinh ra mã
HTML và gửi trả về cho webserver, webserver sẽ đóng gói tạo ra các HTTP response trả về.
DB là thành phần quan trọng trong ứng dụng, đóng vai trò là nơi lưu trữ dữ liệu Web app thực hiện truy vấn đến DB thông qua các API, sau đó DB xử lý và trả về kết quả cho web app Cuối cùng, web app nhận dữ liệu từ DB và thực hiện tính toán để sinh ra mã HTML tương ứng.
Có thể tóm lược lại hoạt động của ứng dụng web như sau:
Web Client Firewall Web server Web App DB Web App Web Server Firewall Firewal Web Client.
Các thành phần ứng dụng web
URL – Uniform Resource Locator
URL là viết tắt của Uniform Resource Locator, được sử dụng để tham chiếu đến các tài nguyên trên Internet và cung cấp khả năng siêu liên kết cho các trang web Mỗi tài nguyên được xác định bởi một địa chỉ URL riêng biệt, ví dụ như trang web, hình ảnh hoặc video.
http://www.ietf.org/rfc/rfc1738.txt
http://www.ietf.org/rfc/rfc1738.jpg
http://www.ietf.org/rfc/web/rfc3242.txt
Các địa chỉ trên đều là các địa chỉ URL Cấu trúc cơ bản của một địa chỉ URL như sau:
protocol://server-name.domain-name/directory/filename
The protocol is the first component of a URL, describing the method of access Common protocols include HTTP for web servers, FTP for file transfers, MAILTO for email, TELNET for remote access, and GOPHER for information retrieval.
Server name: Thành phần thư 2 của URL Ví dụ: http://abc.com.vn thì
Server name chính là “abc”
Tên miền là thành phần thứ ba, đứng sau tên máy chủ, cung cấp thông tin cơ bản về quốc gia của máy chủ và các tổ chức quản lý liên quan Để tìm hiểu chi tiết về DNS, bạn có thể tham khảo phần trên.
Directories and filenames: Vị trí thưc mục và file tài nguyên cần truy cập đến Một địa chỉ URL đầy đủ sẽ gồm các thành phần sau:
URL scheme thường bao gồm tên giao thức như http hoặc ftp, nhưng cũng có thể là các tên khác như news hoặc mailto Để hiểu rõ hơn về URL scheme, bạn có thể tham khảo thêm thông tin về URI scheme.
Tên miền (ví dụ: http://vi.wikipedia.org)
Chỉ định thêm cổng (có thể không cần)
Đường dẫn tuyệt đối trên máy phục vụ của tài nguyên (ví dụ: thumuc/trang)
Các truy vấn (có thể không cần)
Chỉ định mục con (có thể không cần)
URI – Uniform Resource Identifiers
URL (Uniform Resource Locators) là một khái niệm quen thuộc, nhưng thực tế, URL chỉ là một loại của URI (Uniform Resource Identifier) Mặc dù hai khái niệm này có sự tương đồng, nhưng chúng không hoàn toàn giống nhau.
URI dùng để xác định một resource nào đó trên web Như hình dưới cho thấy một URI chứa rất nhiều các thành phần, không đơn giản như URL.
Protocol: Xác định các giao thức và các ứng dụng cần thiết để truy cập tài nguyên, trong trường hợp này là giao thức HTTP
Username: Nếu giao thức hỗ trợ khái niệm về tên người dùng thì username cung cấp tên người dùng để chứng thực truy cập tài nguyên
Password: Mật khẩu truy cập tài nguyên
Host: Tên miền truyền thông cho webserver,
Port: Là port cho các giao thức lớp ứng dụng, ví dụ như HTTP là cổng 80 (có thể bỏ qua tham số này).
Path: đường dẫn phân cấp đến tài nguyên được đặt trên Server
File: Tên các tập tin tài nguyên trên Server
Query: Các tuy vấn thêm thông tin về tài nguyên của Client
Fragment: Một vị trí nào đó trong tài nguyên
HTML
HTML, viết tắt của Hyper Text Markup Language (Ngôn ngữ đánh dấu siêu văn bản), là một ngôn ngữ quan trọng dùng để xây dựng và hiển thị nội dung trên web Tệp HTML cần có phần mở rộng htm hoặc html Hiện nay, HTML có hai phiên bản chính là HTML 4 và HTML 5.
Một file HTML thường có bố cục như sau:
www.abc.com.vn and www.abc.vn Example HTML
Trong ví dụ 1, thẻ Example HTML là một thành phần của HTML, bắt đầu bằng thẻ và kết thúc bằng thẻ Mục đích của thẻ là để xác định rằng nội dung của nó, "Example HTML", phải được hiển thị dưới dạng in đậm.
www.abc.com.vn and www.abc.vn Example HTML
Thẻ trong HTML bắt đầu và kết thúc với và , có nhiệm vụ xác định phần nội dung chính của tài liệu.
C Các thuộc tính của thẻ HTML
Các thẻ HTML có những thuộc tính riêng, cung cấp thông tin về các thành phần của trang web Tag xác định phần thân của trang HTML, và bằng cách thêm thuộc tính bgcolor, bạn có thể chỉ định màu nền cho trang Ví dụ, bạn có thể sử dụng hoặc , trong đó #E6E6E6 là giá trị màu hex.
Thẻ HTML xác định dạng bảng và có thể được thiết lập không có đường viền bằng cách sử dụng thuộc tính border="0" Các thuộc tính trong HTML luôn đi kèm với cặp name/value và phải được thêm vào thẻ mở đầu Giá trị thuộc tính nên được đặt trong dấu ngoặc kép, như "red" hoặc 'red', với kiểu ngoặc kép kép phổ biến hơn Tuy nhiên, trong một số trường hợp đặc biệt, như khi giá trị đã chứa dấu ngoặc kép, việc sử dụng ngoặc đơn là cần thiết, ví dụ: name='ban"tay"den' Các thẻ quan trọng nhất trong HTML bao gồm thẻ xác định Heading, đoạn văn và xuống dòng.
Headings được định dạng với hai thẻ đến xác định heading lớn nhất xác định heading nhỏ nhất
HTML sẽ tự động thêm một dòng trắng trước và sau mỗi heading.
Đoạn văn – paragraphs: Paragraphs được định dạng bởi thẻ
.
Đây là một đoạn văn khác
HTML sẽ tự động thêm một dòng trắng trước và sau mỗi heading.
Thẻ được sử dụng để tạo ra một lần xuống dòng trong văn bản mà không cần bắt đầu một đoạn văn mới, giúp bạn quản lý định dạng nội dung một cách linh hoạt hơn.
Đây là một đoạn văn với thẻ xuống hàng
Thẻ là một thẻ trống, nó không cần thẻ đóng dạng
Thẻ chú thích trong HTML cho phép bạn thêm ghi chú vào mã nguồn, giúp giải thích và ghi nhớ các phần của code Những dòng chú thích này sẽ không được trình duyệt hiển thị, nên bạn có thể dễ dàng quay lại chỉnh sửa mà không bị rối.
Bạn cần một dấu chấm than ! ngay sau dấu nhỏ hơn nhưng không cần ở dấu lớn hơn.
Những thẻ HTML cơ bản:
Xác định một văn bản dạng HTML
Xác định phần thân của tài liệu
to Xác định header từ 1 đến 6
Xác định một đoạn văn
Chèn một dòng trắng
Xác định một đường thẳng
Xác định vùng chú thích
Javascript
JavaScript là một ngôn ngữ lập trình thông dịch, thường được nhúng hoặc tích hợp vào các tệp HTML Khi tệp HTML được tải trong trình duyệt hỗ trợ JavaScript, trình duyệt sẽ thông dịch các script và thực hiện các tác vụ đã xác định Mã nguồn JavaScript được thông dịch sau khi toàn bộ trang HTML được tải xong nhưng trước khi trang được hiển thị.
B Khai báo sử dụng Javascript trong HTML
Sử dụng các câu lệnh và các hàm trong cặp thẻ
Script được đa vào file HTML bằng cách sử dụng cặp thẻ và
Các thẻ có thể xuất hiện trong phần hay
của file HTML Nếu đặt trong phần , nó sẽ được tải và sẵn sàng trước khi phần còn lại của văn bản được tải.
Thuộc tính duy nhất được định nghĩa hiện thời cho thẻ là
Thẻ LANGUAGE=" được sử dụng để xác định ngôn ngữ của script, với hai giá trị chính là "JavaScript" và "VBScript" Đối với chương trình viết bằng JavaScript, cú pháp sử dụng như sau:
Cú pháp ghi chú trong HTML và JavaScript có sự khác biệt, cho phép ẩn mã JavaScript trong ghi chú của file HTML Điều này giúp các trình duyệt cũ không hỗ trợ JavaScript vẫn có thể đọc được nội dung, như trong ví dụ sau đây.
// This is where the hidden ends >
Dòng cuối cùng của script cần có dấu // để ngăn trình duyệt diễn dịch nó như mã JavaScript Các ví dụ trong chương này không chứa đặc điểm ẩn của JavaScript nhằm giúp mã trở nên dễ hiểu hơn.
Sử dụng thuộc tính SRC trong thẻ giúp chỉ định file nguồn JavaScript, mang lại lợi ích hơn so với việc nhúng trực tiếp mã JavaScript vào trang HTML.
Thuộc tính này rất hữu ích cho việc chia sẻ các hàm giữa nhiều trang khác nhau Các câu lệnh JavaScript được đặt trong cặp thẻ và , thường có thuộc tính SRC trừ khi xảy ra lỗi Ví dụ, bạn có thể chèn dòng lệnh sau vào giữa cặp thẻ và : document.write("Không tìm thấy file JS đa vào!");
Thuộc tính SRC có thể được định rõ bằng địa chỉ URL, các liên kết hoặc các đường dẫn tuyệt đối, ví dụ:
Các file JavaScript bên ngoài không được chứa bất kỳ thẻ HTML nào. Chúng chỉ được chứa các câu lệnh JavaScript và định nghĩa hàm.
Để sử dụng các hàm JavaScript bên ngoài, tên file cần có đuôi js và server phải ánh xạ đuôi này tới kiểu MIME application/x-javascript Điều này được thực hiện thông qua phần Header của file HTML Để thực hiện ánh xạ đuôi js vào kiểu MIME, bạn cần thêm dòng "type=application/x-javascript" vào file mime.types trong cấu hình của server và khởi động lại server.
If the server fails to map the js extension to the MIME type application/x-javascript, the Navigator will incorrectly load the specified JavaScript file in the SRC attribute For example, the function 'bar' contains the string "left" within double quotes: function bar(widthPct){ document.write("")}.
Sử dụng một biểu thức JavaScript làm giá trị của một thuộc tính HTML
Sử dụng thẻ sự kiện (event handlers) trong một thẻ HTML nào đó
C Các lệnh cơ bản trong javascript
LỆNH/MỞ RỘNG KIỂU MÔ TẢ
SCRIPT thẻ HTML Hộp chứa các lệnh JavaScript
SRC Thuộc tính của thẻ SCRIPT
Giữ địa chỉ của file JavaScript bên ngoài. File này phải có phần đuôi js
LANGUAGE thuộc tính của thẻ SCRIPT Định rõ ngôn ngữ script được sử dụng (JavaScript hoặc VBScript)
JavaScript Đánh dấu ghi chú một dòng trong đoạn script
JavaScript Đánh dấu ghi chú một khối trong đoạn script document.write() cách thức
Xuất ra một xâu trên cửa sổ hiện thời một cách tuần tự theo file HTML có đoạn script đó document.writeln() Cách thức
Tương tự cách thức document.write() nhưng viết xong tự xuống dòng. alert() Cách thức của
Hiển thị một dòng thông báo trên hộp hội thoại promt() Cách thức
Hiển thị một dòng thông báo trong hộp hội thoại đồng thời cung cấp một trường nhập dữ liệu để người sử dụng nhập vào.
D Các đối tượng trong javascript
Sơ đồ minh hoạ sự phân cấp của các đối tượng javascript
Trong sơ đồ phân cấp, các đối tượng con thể hiện các thuộc tính của đối tượng cha Chẳng hạn, form1 là một đối tượng con của đối tượng document và được truy cập qua cú pháp document.form1.
Tất cả các trang đều có các đối tượng sau đây:
Navigator chứa thông tin về tên và phiên bản của trình duyệt đang sử dụng, đồng thời hỗ trợ xác định các loại MIME mà client có thể xử lý cũng như các plug-in đã được cài đặt trên client.
window: là đối tượng ở mức cao nhất, có các thuộc tính thực hiện áp dụng vào toàn bộ cửa sổ.
document: chứa các thuộc tính dựa trên nội dung của document nh tên, màu nền, các kết nối và các forms.
location: có các thuộc tính dựa trên địa chỉ URL hiện thời
history: Chứa các thuộc tính về các URL mà client yêu cầu trước đó.
CSS
CSS, viết tắt của Cascading Style Sheets, là ngôn ngữ dùng để định nghĩa cách hiển thị các tài liệu HTML Bằng cách sử dụng CSS, người dùng có thể điều chỉnh màu sắc, kiểu chữ và cách trình bày các thành phần trên trang web một cách linh hoạt và hiệu quả.
CSS được phát triển nhằm tách biệt nội dung HTML khỏi phần trình bày CSS, giúp nâng cao khả năng truy xuất, tăng tính linh hoạt và đơn giản hóa tài liệu, đồng thời giảm thiểu việc lặp lại các thẻ định dạng Hiện tại, đặc tả của CSS được quản lý bởi tổ chức World Wide Web Consortium (W3C).
Cú pháp CSS gồm 3 thành phần:
Bộ chọn (selector) là công cụ xác định các phần tử HTML nào sẽ bị ảnh hưởng bởi các định dạng được chỉ định Các bộ chọn có thể bao gồm tên các phần tử như body, p, h1, h2, hoặc các lớp kiểu do người dùng tạo ra.
Thuộc tính (property) là yếu tố thể hiện tính chất định dạng, trong đó giá trị định dạng được gán cho thuộc tính Giữa thuộc tính và giá trị luôn có dấu hai chấm phân cách.
Giá trị (value) bộ_chọn { thuộc_tính_1: giá_trị; thuộc_tính_2: giá_trị
Các cặp thuộc tính và giá trị được phân cách bằng dấu chấm phẩy, và không cần thêm dấu chấm phẩy sau thuộc tính – giá trị cuối cùng.
Chú thích trong CSS được sử dụng để giải thích mã định dạng, giúp dễ dàng chỉnh sửa sau này Nội dung nằm trong dấu chú thích sẽ bị trình duyệt bỏ qua Chú thích CSS bắt đầu bằng "/*" và kết thúc bằng "*/", ví dụ: /* nội dung chú thích */.
/* Chu thich cho phan tu p */ p { text-align: center;
/* Dung mau chu den va font Arial */ color: black; font-family: arial;
D Khai báo sử dụng CSS trong HTML
Có 3 cách để sử dụng CSS.
"Inline CSS" : Áp dụng trực tiếp trên một đối tượng nhất định bằng thuộc tính style:
Đoạn text cần in đậm, gạch chân, màu đỏ
"Internal CSS" involves placing CSS at the beginning of a webpage to style the entire page This is achieved by enclosing the CSS code within tags, which are then included in the header section of the webpage, specifically between the and tags.
body {font-family:verdana;color:#0000FF;} /* Kiểu chữ trong trang Web là
"Verdana", màu chữ thông thường là màu xanh dương */
External CSS allows you to place CSS properties in a separate file (*.css), enabling multiple web pages to reference the same styles For example, the content of a style.css file could include: body {font-family: verdana; color: #0000FF;}.
Tham chiếu tới tệp tin CSS trên từ trang Web bằng đoạn mã (mã có thể nằm ngoài thẻ ):
Cookie
Cookie là một đoạn dữ liệu được gửi từ máy chủ đến trình duyệt, sau đó trình duyệt sẽ lưu trữ dữ liệu này (trong bộ nhớ hoặc trên ổ đĩa) và gửi lại cho máy chủ mỗi khi tải một trang web.
Cookie là các tệp dữ liệu nhỏ dạng văn bản được tạo ra bởi ứng dụng để lưu trữ và truy cập thông tin về người dùng đã truy cập vào website, bao gồm tên, mật khẩu, sở thích và thói quen Những thông tin này được trình duyệt của người dùng lưu trên ổ cứng, tuy nhiên, việc chấp nhận cookie phụ thuộc vào cài đặt của người dùng trong trình duyệt.
Cookie được tạo ra bởi website và gửi tới trình duyệt, vì vậy hai website khác nhau, dù cùng trên một máy chủ, sẽ có hai cookie khác nhau Hơn nữa, mỗi trình duyệt quản lý và lưu trữ cookie theo cách riêng, dẫn đến việc hai trình duyệt khác nhau truy cập vào cùng một website sẽ nhận được hai cookie khác nhau.
B Các thành phần của một cookie gồm
Domain Flag PathSecure Expiration Name Value www.redhat comFALSE/ FALSE 1154029490Apache64.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à
Khi sử dụng "/tracuu", các địa chỉ trong thư mục này và tất cả các thư mục con như /tracuu/baomat có khả năng truy cập vào cookie này.
“/” 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
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 không thiết lập giá trị hết hạn, cookie sẽ chỉ được lưu trữ trong bộ nhớ RAM và sẽ bị xóa khi trình duyệt đóng lại.
Value: Giá trị biến đó
Session
Session là khoảng thời gian người dùng tương tác với ứng dụng, bắt đầu khi họ truy cập lần đầu và kết thúc khi thoát Mỗi session có một định danh (ID) riêng, và các session khác nhau sẽ có ID khác nhau Trong ứng dụng web, website quyết định thời điểm bắt đầu và kết thúc session Trong suốt một session, website có thể lưu trữ thông tin như trạng thái đăng nhập và các bài viết đã đọc SessionID thường được lưu trữ để quản lý thông tin người dùng hiệu quả.
B Điểm giống và khác nhau giữa Session và Cookie
Cookie và Session đều nhằm mục đích lưu trữ dữ liệu để truyền tải giữa các trang trên cùng một website, nhưng chúng khác nhau về phương thức lưu trữ và quản lý dữ liệu.
Cookie được lưu trữ trong trình duyệt, nơi mà trình duyệt quản lý Mỗi khi người dùng truy cập vào một trang web trên máy chủ, trình duyệt sẽ tự động gửi cookie trở lại máy chủ.
Dữ liệu trong Session được quản lý bởi ứng dụng, cụ thể là website và webserver Khi người dùng truy cập vào website, trình duyệt chỉ gửi ID của session đến server để duy trì kết nối và quản lý thông tin người dùng.
Mỗi phiên làm việc (Session) được gán một định danh (ID) duy nhất, được tạo ra trên máy chủ khi phiên bắt đầu và sau đó được gửi đến trình duyệt Trình duyệt sẽ tự động gửi lại ID này lên máy chủ mỗi khi truy cập vào website, vì vậy việc lưu trữ Session ID trong Cookie sẽ giúp tiện lợi hơn, khi trình duyệt có thể tự động truyền ID này mà không cần người dùng can thiệp.
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 có thể không hoạt động do trình duyệt được cấu hình để không chấp nhận cookie Trong tình huống này, phiên làm việc vẫn có thể được duy trì bằng cách truyền ID phiên qua URL giữa các trang web, ví dụ như script.php?sessionc123.
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 người dùng lần đầu truy cập, web server sẽ khởi tạo một phiên làm việc (session) và tạo một sessionID, đồng thời lưu trữ các biến session liên quan đến người dùng trong một file Web server cũng tạo một Cookie để gửi sessionID về trình duyệt Trình duyệt sẽ lưu cookie và gắn sessionID vào các yêu cầu tiếp theo gửi đến server.
Sau khi người dùng được xác thực qua thông tin cá nhân như tên và mật khẩu, session ID sẽ được sử dụng như một mật khẩu tĩnh tạm thời cho các yêu cầu tiếp theo Tuy nhiên, điều này cũng khiến session ID trở thành mục tiêu hấp dẫn cho các hacker, và trong nhiều trường hợp, họ đã chiếm đoạt được session ID.
ID hợp lệ của người dùng là yếu tố quan trọng để truy cập vào phiên làm việc của họ Tấn công vào phiên làm việc thường diễn ra theo hai phương thức chính.
Ấn định phiên làm việc (Session Fixation).
Đánh cắp phiên làm việc (Session Hijacking).
Ấn định phiên làm việc
Hình 14: Ấn định phiên làm việc
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
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
Đánh cắp phiên làm việc
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
Vét cạn phiên làm việc(Brute force ID)
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
Tấn công kiểu dùng đoạn mã để đánh cắp phiên làm việc
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
View-state
ViewState là một kỹ thuật quan trọng giúp duy trì trạng thái của trang web ngay cả khi có Postbacks, cho phép lưu trữ thông tin của mỗi WebForm do Server quản lý và chứa dữ liệu của tất cả người dùng trên trang Khi gửi lại cho trình duyệt, ViewState được trình bày dưới dạng thẻ ẩn với các giá trị được mã hóa Người dùng có thể dễ dàng vô hiệu hóa hoặc kích hoạt ViewState thông qua thuộc tính EnableViewState trong từng thẻ hoặc trong cấu hình trang của ứng dụng.
B Tác dụng của View-state
Khi gửi một form trong ASP hoặc PHP, tất cả các giá trị trong form sẽ bị xóa nếu máy chủ phản hồi với lỗi, khiến người dùng phải nhập lại thông tin từ đầu Điều này xảy ra vì các trang web không duy trì trạng thái ViewState, gây bất tiện cho người dùng khi phải quay lại và sửa đổi thông tin đã nhập.
Khi bạn đăng tin trên forum sử dụng ASP hoặc PHP, sau khi điền đầy đủ thông tin cá nhân như tiêu đề và nội dung, bạn nhấn nút gửi đến server Nếu có lỗi trong thông tin, bạn sẽ phải làm mới trang, dẫn đến việc mất toàn bộ thông tin đã nhập và phải nhập lại từ đầu.
Khi bạn submit một form trong ASP.NET, form sẽ xuất hiện lại trong trình duyệt cùng với tất cả các giá trị đã nhập Cơ chế giữ lại các giá trị này là nhờ vào ViewState, cho phép ASP.NET duy trì trạng thái của trang khi gửi đến máy chủ ViewState được định nghĩa thông qua một trường ẩn (TEXT HIDDEN) và được đặt trong control , với thông tin được mã hóa để bảo mật.
some code
C Sử dụng view-state khi nào
ViewState là một đối tượng phía Server giúp lưu trữ dữ liệu trên trang trong quá trình postback, và dữ liệu này được gửi lại cho client thông qua các thẻ hidden Tuy nhiên, nếu ViewState quá lớn, nó có thể làm giảm hiệu suất của bộ thu gom rác Do đó, việc tối ưu hóa việc sử dụng ViewState là rất cần thiết trong một số trường hợp nhất định.
Mặc định, tất cả các control đều sử dụng ViewState Nếu trang của bạn chỉ đơn thuần là trang hiển thị kết quả hoặc mỗi yêu cầu đều cần nạp lại dữ liệu, bạn không cần thiết phải sử dụng ViewState.
Trang của bạn không postback: nếu trang không postback lại dữ liệu, hoặc chỉ là trang output, thì không nên dùng ViewState.
Bạn không handler các sự kiện của control: nếu các control không handler sự kiện, hoặc không bound data thì bạn cũng không cần dùng ViewState.
Bạn khởi tạo lại dữ liệu mỗi khi refresh: nếu bạn bỏ qua dữ liệu cũ, thì cũng không cần dùng ViewState.
Xác thực và phân quyền người dùng trên hệ thống web
Xác thực (Authentication) là gì?
Theo Wikipedia, xác thực hay định danh (authentication) là quá trình thiết lập và chứng minh tính đáng tin cậy của một cá nhân hoặc một đối tượng, đảm bảo rằng những thông tin mà họ cung cấp là chính xác và đáng tin cậy.
RESTful web service sử dụng giao thức HTTP để giao tiếp, trong đó HTTP request là một giao thức không trạng thái Điều này có nghĩa là server không lưu trữ thông tin nào của client, và mọi request được xử lý độc lập, không phụ thuộc vào trạng thái hay kết quả của các request trước đó.
Do server không lưu trữ thông tin từ các yêu cầu trước đó, mỗi yêu cầu gửi lên server đều cần phải được xác thực lại, ngay cả khi đó là yêu cầu từ cùng một người dùng đã được chứng thực.
Một trong những cách để giải quyết vấn đề này là mỗi request client gửi lên đều gửi kèm thông tin đã chứng thực trước đó.
Authentication được thực hiện như thế nào?
Quá trình chứng thực có thể được nhận biết qua một số dấu hiệu, bao gồm việc client gửi thông tin chứng thực đến server trong mỗi yêu cầu, như username/password, chuỗi mã hóa (token, api key) và chuỗi ngẫu nhiên (session_id) Những thông tin này thường được gửi kèm trong HTTP request thông qua query string trong URL, Header (Cookie header, Authorization header, Custom header) và Body (Form field, Hidden field,…).
Quá trình xác thực là bước quan trọng để đảm bảo sự nhận diện giữa người dùng và ứng dụng, giúp ứng dụng có khả năng nhận dạng chính xác người dùng.
Về cơ bản thì một quá trình authentication sẽ gồm 2 bước:
Xác thực một user (thường là request đầu tiên).
Lưu giữ đăng nhập (cho các request phía sau).
Một quá trình authentication sẽ bao gồm 3 phần:
Sinh ra dấu hiệu là quá trình quyết định và tạo ra các dấu hiệu xác thực như username/password, user token, hoặc api key Mỗi loại dấu hiệu này có phương thức sinh ra và quy ước sử dụng riêng, đảm bảo tính bảo mật và hiệu quả trong quá trình xác thực.
Lưu trữ dấu hiệu là quá trình mà ứng dụng xác định vị trí lưu trữ dấu hiệu, bao gồm cả server và client, cũng như cách thức truyền tải thông qua HTTP request.
Kiểm tra dấu hiệu là quá trình xác minh tính hợp lệ của các dấu hiệu trong ứng dụng, nhằm đảm bảo rằng chúng đúng và thuộc về người dùng cụ thể.
Quá trình xác thực (authentication) được minh họa trong hình ảnh trên, trong đó mỗi yêu cầu sẽ được xử lý qua một hoặc nhiều giai đoạn khác nhau tùy thuộc vào thông tin đầu vào.
Cơ chế lưu giữ đăng nhập người dùng
Trong bài viết này, chúng ta sẽ cùng tìm hiểu chủ yếu tới 3 cơ chế lưu giữ đăng nhập người dùng cơ bản là:
Basic Auth là phương thức xác thực đơn giản nhất cho ứng dụng web, hoạt động bằng cách gửi tên người dùng và mật khẩu trong mỗi yêu cầu.
Dấu hiệu: Chuỗi username:password đã được mã hóa Base64 Ví dụ có username là abc, password là 123 thì ta tạo chuỗi mã hóa: abc:123 –Base64–> YWJjOjEyMw==
Dấu hiệu lưu trữ được thực hiện tại máy chủ và client Tại máy chủ, username và password được lưu trong database hoặc file htpasswd Tại client, sau khi người dùng nhập thông tin lần đầu, trình duyệt sẽ lưu lại username và password trong bộ nhớ riêng, không thể truy cập bằng mã code trên trang, nhằm tránh việc phải nhập lại thông tin liên tục, tuy nhiên thời gian lưu trữ thường có giới hạn Khi truyền tải, chuỗi mã hóa base64 sẽ được gửi trong HTTP request qua Authorization header với từ khóa Basic: Authorization: Basic.
To verify user credentials, each request containing the username and password is compared against the database and configuration files to ensure their validity.
Basic Auth rất đơn giản và được hầu hết các trình duyệt cũng như webserver như nginx và apache hỗ trợ Bạn có thể dễ dàng cấu hình cho webserver sử dụng Basic Auth chỉ với một vài dòng lệnh.
Phương pháp này dễ dàng tích hợp với các phương pháp khác, nhờ vào việc được xử lý mặc định trên trình duyệt và webserver thông qua việc truyền tải HTTP header Điều này cho phép người dùng kết hợp linh hoạt với các phương pháp như cookie, session và token.
Username/password dễ bị lộ Do mỗi request đều phải truyền username và password nên sẽ tăng khả năng bị lộ qua việc bắt request, log server,…
Không thể logout Vì việc lưu username, password dưới trình duyệt được thực hiện tự động và không có sự can thiệp của chủ trang web.
Do vậy không có cách nào logout được người dùng ngoại trừ việc tự xóa lịch sử duyệt web hoặc hết thời gian lưu của trình duyệt.
Giao diện không thân thiện với người dùng có thể gây cảm giác nhàm chán, đặc biệt khi hiển thị hộp thoại đăng nhập và thông báo lỗi của trình duyệt Những thông báo này thường thiếu thông tin hữu ích, làm giảm trải nghiệm của người dùng.
Với những đặc điểm nổi bật, Basic Auth thường được áp dụng trong các ứng dụng nội bộ, thư mục cấm như hệ thống CMS, môi trường phát triển và quản trị cơ sở dữ liệu Việc sử dụng Basic Auth giúp tăng cường bảo mật cho các web server, ngăn chặn việc tiết lộ thông tin hệ thống nội bộ cho người ngoài và bảo vệ chống lại các cuộc tấn công, khai thác lỗ hổng ứng dụng.
Session-based authentication là phương pháp xác thực người dùng thông qua việc tạo session trên server Sau khi người dùng xác thực thành công bằng username và password, server sẽ tạo ra một Session ID duy nhất để nhận diện người dùng Session này lưu trữ thông tin người dùng đang đăng nhập và gửi lại Session ID cho client, cho phép truy cập vào session trong các yêu cầu tiếp theo.
Khách hàng có thể lưu Session ID dưới dạng cookie và gửi kèm trong mọi yêu cầu Hệ thống sẽ sử dụng Session ID này để xác định danh tính người dùng, giúp họ không phải nhập lại thông tin đăng nhập trong các lần truy cập sau.
Khi Session ID được gửi lên, server xác định danh tính người dùng và kiểm tra quyền truy cập của họ Mặc dù session và cookie vẫn có thể được sử dụng, nhưng với sự phát triển của các ứng dụng Hybrid và SPA (Single Page Application), nhu cầu truy cập nhiều hệ thống backend khác nhau đã tăng lên Do đó, session và cookie từ một server có thể không tương thích với server khác.
Chúng ta hãy điểm qua các khía cạnh cơ bản của cơ chế này:
Dấu hiệu: 1 chuỗi (thường là random) unique gọi là Session ID
Session storage can occur on the server or client side On the server, session data is stored in databases, files, or RAM, and is accessed using a Session ID On the client side, the Session ID may be saved in cookies, within the URL, or as hidden form fields Additionally, the Session ID is transmitted in subsequent HTTP requests through the Cookie header.
SESSION_IDc), URL (/profile?session_idc), body
Kiểm tra dấu hiệu: Server dùng Session ID client truyền lên để tìm dữ liệu của session từ các nguồn lưu như database, file, ram,…
Quá trình thiết lập Session ID thường diễn ra tự động từ phía server, dẫn đến việc xác thực dựa trên session thường sử dụng Cookie, vì Cookie có thể được thiết lập bởi server và tự động áp dụng cho các yêu cầu tiếp theo từ trình duyệt Do đó, cơ chế này thường gắn liền với Cookie Tuy nhiên, cần lưu ý rằng vẫn có nhiều phương pháp khác để sử dụng Session ID mà không cần đến Cookie.
Flow của Session-based Authentication:
Session ID là một chuỗi ngẫu nhiên không chứa thông tin cá nhân của người dùng, giúp bảo mật thông tin trong quá trình truyền tải Tất cả dữ liệu liên quan đến phiên đăng nhập và thông tin người dùng đều được lưu trữ trên máy chủ, đảm bảo rằng thông tin nhạy cảm được giữ kín.
Dung lượng truyền tải của Session ID rất nhỏ, vì nó chỉ là một chuỗi ký tự duy nhất dài khoảng 20-50 ký tự Do đó, việc gắn Session ID vào mỗi yêu cầu không làm tăng đáng kể độ dài của yêu cầu, giúp quá trình truyền tải diễn ra dễ dàng hơn.
Để sử dụng cơ chế session, bạn chỉ cần thực hiện các thay đổi ở phía server mà không cần tác động đến client Trình duyệt hầu như không cần xử lý thêm vì cookie đã được tích hợp tự động, hoặc server đã cung cấp sẵn session ID trong URL hoặc dưới dạng hidden form.
Phân quyền (Authorization) là gì?
Sau khi xác định danh tính và thiết lập giao thức giao tiếp, bước tiếp theo là xác định quyền hạn của đối tượng có định danh đó trong việc thực hiện hành động hoặc truy cập tài nguyên Quá trình này được gọi là phân quyền (Authorization), diễn ra sau khi hệ thống của bạn đã hoàn tất xác thực (Authentication) thành công.
Xác thực (authentication) trả lời câu hỏi “bạn là ai?” trong khi phân quyền (authorization) trả lời “bạn có thể làm gì?” Hai yếu tố này là thiết yếu cho mọi hệ thống, nhưng mức độ áp dụng phụ thuộc vào từng giai đoạn phát triển Việc thực hiện quá chặt chẽ ngay từ đầu có thể làm tăng độ phức tạp và cản trở sự phát triển của công ty, trong khi việc áp dụng muộn có thể dẫn đến nguy cơ bị tấn công và các rủi ro nghiêm trọng.
So sánh Authentication với Authorization
Authentication xác nhận danh tính của user để cấp quyền truy cập vào hệ thống.
Authorization là quá trình xác định quyền truy cập của người dùng vào tài nguyên, thông qua việc xác nhận thông tin đăng nhập để xác minh xem họ có được phép truy cập hay không.
Nó quyết định liệu người dùng có phải là những gì anh ta tuyên bố hay không
Authentication thường yêu cầu tên người dùng và mật khẩu.
Nó xác định những gì người dùng có thể và không thể truy cập.
Các yếu tố xác thực cần thiết để authorization có thể khác nhau, tùy thuộc vào mức độ bảo mật.
Authentication thường yêu cầu tên người dùng và mật khẩu.
Các yếu tố xác thực cần thiết để authorization có thể khác nhau, tùy thuộc vào mức độ bảo mật.
Authentication là bước đầu tiên của authorization vì vậy luôn luôn đến trước.
Authorization được thực hiện sau khi authentication thành công.
Sinh viên của một trường đại học cụ thể cần thực hiện quy trình tự xác thực trước khi truy cập vào liên kết dành cho sinh viên trên trang web chính thức.
Ví dụ, authorization xác định chính xác thông tin nào sinh viên được phép truy cập trên trang web của trường đại học sau khi authentication thành công.