Bảo mật web và ứng dụng (2) - Ứng dụng web

 Bài trước: Bảo mật web và ứng dụng (1) - Hệ thống web

---

1         Ứng dụng web

Sau bài học trước, chúng ta đã tìm hiểu được:

– Web là một hệ thống thông tin có phạm vi toàn cầu

– Mỗi một tài nguyên trên hệ thống web (một bài viết, một hình ảnh, một trang mua hàng, một trang đăng nhập, …v.v) đều có một địa chỉ cụ thể gọi là URL.

– Hệ thống thông tin được tạo ra bằng cách liên kết (link, hyperlink) các tài nguyên lại với nhau

– Để tạo ra các liên kết, chúng ta sử dụng thẻ <a> của ngôn ngữ HTML

– Một trong những hình thức lừa đảo của tội phạm mạng là giả mạo các trang web chính thống để thu thập thông tin (tài khoản ngân hàng, mật khẩu, số điện thoại) từ người dùng. Việc tạo ra một giao diện web giả mạo không khó.

Trong phần này, chúng ta sẽ tìm hiểu tiếp về:

– Mô hình hoạt động của một ứng dụng web (mô hình client-server)

– Quá trình duyệt web diễn ra như thế nào

– Lập trình phía client

1.1       Mô hình client-server

Mọi trang web, hoặc ứng dụng web đều hoạt động dựa trên mô hình client-server. Vì vậy chúng ta sẽ cùng tìm hiểu về mô hình này.

Ý tưởng của mô hình này, đơn giản chỉ là: máy khách (client) gửi một yêu cầu (request) đến máy chủ (server), máy chủ sẽ xử lý và trả kết quả về cho máy khách.

Xem hình minh họa về mô hình client-server:


Mô hình client-server gồm một số thành phần:

– Client: khởi phát yêu cầu, gửi yêu cầu tới server, nhận kết quả từ server trả về. Client có thể là trình duyệt, ứng dụng viết bằng python/javascript hoặc bất kỳ ứng dụng nào mà có phát sinh ra HTTP request.

– Server: có vai trò cung cấp dịch vụ, xử lý và trả về kết quả cho máy client.

– Môi trường truyền thông tin: hạ tầng mạng (LAN, Internet), bao gồm cả phần cứng và phần mềm

– Giao thức truyền thông tin: các chuẩn công nghệ giúp giao tiếp và truyền thông tin giữa server-client. Ví dụ HTTP, HTTPS

Trong mô hình client-server, khi môi trường truyền đã được kết nối và sẵn sàng, thì client luôn là nơi khởi phát của ứng dụng. Client sẽ gửi một HTTP request tới server. Khi server nhận được request, nó sẽ xử lý và trả kết quả về cho client bằng một HTTP response.

Client là thành phần chủ động. Server là thành phần bị động.

Chúng ta sẽ thấy cách hoạt động của một ứng dụng web rất khác so với cách hoạt động của chương trình trên máy cục bộ (ví dụ Microsoft Word). Trong Microsoft Word, mọi thao tác đều được thực hiện ngay trên máy người dùng, từ việc ra lệnh, xử lý và trả về kết quả. Cũng là chương trình xử lý văn bản, nhưng Google Docs là một ứng dụng hoạt động theo mô hình client-server. Nếu không có kết nối mạng thì Google Docs sẽ không hoạt động được.

Để nắm rõ hơn về mô hình client-server, chúng ta sẽ cùng tìm hiểu về quá trình duyệt web diễn ra như thế nào ở phần tiếp theo.

1.2       Quá trình duyệt web diễn ra như thế nào

Do ứng dụng web hoạt động theo mô hình client-server, nên để có trang web trên trình duyệt, cần trải qua các bước sau:

Bước 1: Người dùng nhập địa chỉ trang web (URL) vào thanh địa chỉ. Ví dụ: http://example.com/hello.php

Bước 2: Trình duyệt dựa vào URL trong thanh địa chỉ, kết nối tới máy web server, gửi yêu cầu tới web server (ví dụ yêu cầu: gửi cho nội dung trang web hello.php)

Bước 3: Web server xử lý yêu cầu, gửi trả kết quả về cho trình duyệt (ví dụ nội dung trang web dưới dạng mã nguồn HTML, CSS và JavaScript)

Bước 4: Trình duyệt thực thi mã HTML, CSS, JavaScript và hiển thị trang web ra màn hình.

Xem hình minh họa:


Chúng ta cùng thực hành, quan sát quá trình duyệt web trên một máy tính:

Bước 1. Mở trình duyệt web. Ví dụ Chrome

Bước 2. Nhập vào đường dẫn của trình duyệt địa chỉ một trang web, bấm Enter để trình duyệt lấy trang web từ máy server, và hiển thị nội dung ra màn hình. Ví dụ thanhnien.vn

Bước 3. Mở Developer tools của trình duyệt bằng một số cách sau:

– Bấm tổ hợp ba phím Ctrl+Shift+I,

– hoặc bấm phím F12,

– hoặc vào menu của trình duyệt tìm tới mục Developer tools,

– hoặc bấm chuột phải vào trang web, chọn Inspect.

Bước 4. Trong cửa sổ của Developer tools, bấm chuột vào mục Network.

Bước 5. Quan sát sẽ thấy các tập tin HTML (thanhnien.vn), CSS (các tập tin có phần mở rộng là css), JavaScript (các tập tin có phần mở rộng là js) được server gửi về cho client.

Bước 6. Bấm chuột vào các tập tin do server gửi về và quan sát nội dung của nó ở cửa sổ bên phải. Nhớ chọn mục Response.

Hình minh họa:


1.3       Lập trình phía client

Ứng dụng web hoạt động theo mô hình client-server, nên gồm có 2 phần: phần client và phần server.

Lập trình phía client (client-side programming, front-end programming) là quá trình tạo ra phần giao diện của trang web (phần client).

Để tạo ra phần giao diện của trang web, chúng ta cần một số thứ như sau:

– Ngôn ngữ để viết mã: HTML, CSS và JavaScript

– Phần mềm để soạn mã nguồn: Notepad, Visual Studio Code hoặc một phần mềm viết mã bất kì

– Trình duyệt để dịch/thực thi mã nguồn, và hiển thị kết quả.

Ngôn ngữ HTML

HTML, viết tắt của HyperText Markup Language - ngôn ngữ đánh dấu siêu văn bản, là một ngôn ngữ (lưu ý: không phải ngôn ngữ lập trình) được sử dụng để tạo ra nội dung cho trang web.

Hiểu nôm na, HTML là ngôn ngữ, sử dụng phương pháp đánh dấu bằng các thẻ, để tạo ra các tài liệu HTML.

Tài liệu HTML là gì?

Tài liệu HTML (HTML document) là tập tin chứa mã HTML, là trang web ở dạng mã nguồn, trình duyệt sẽ thực thi mã nguồn này để tạo ra trang web.

Tài liệu HTML được tạo ra từ các phần tử HTML. Toàn bộ tài liệu HTML là tập hợp của rất nhiều các phần tử HTML khác nhau tạo thành.

Cấu trúc cơ bản của một tài liệu HTML được thể hiện ở hình sau:


Diễn giải hình trên:

– Một tài liệu HTML luôn được bắt đầu bằng dòng khai báo, mục đích là để cho trình duyệt biết được tài liệu bên dưới được viết bằng HTML phiên bản bao nhiêu. Từ đó, trình duyệt sẽ dùng đặc tả (specification) tương ứng để biên dịch mã HTML. Từ khóa để khai báo là <!DOCTYPE>, đây không phải là một thẻ HTML, bạn có để ý thấy dấu ! không? các thẻ HTML sẽ không có. Ví dụ, nếu tài liệu được viết bằng HTML5 thì sẽ khai báo là:

<!DOCTYPE html>

Nếu tài liệu được viết bằng HTML4.01 Strict thì sẽ khai báo là:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

Từ DOCTYPE là viết rút gọn của DOCument TYPE (loại tài liệu).

– Sau phần khai báo, là phần tử html, toàn bộ tài liệu HTML sẽ được chứa trong phần tử này. Phần tử html được gọi là phần tử gốc (root element), vì nó chứa tất cả các phần tử khác của tài liệu, và nó không nằm trong bất kì phần tử nào.

– Bên trong phần tử html có hai phần tử con là phần tử head và phần tử body. Phần tử head và body giúp chia một tài liệu HTML thành hai phần riêng biệt. Trong đó, phần tử head chứa các thông tin mô tả về chính tài liệu này, ví dụ tiêu đề (title), tập tin định dạng (CSS), đoạn mã JavaScript, các thông tin này không được hiển thị ra cửa sổ trình duyệt, còn phần body chứa toàn bộ nội dung mà chúng ta muốn hiển thị ra cửa sổ trình duyệt.

– Trong phần head có phần tử title, phần tử này sẽ chứa tiêu đề của trang web, nó sẽ xuất hiện trên thanh tiêu đề của trình duyệt. Phần tử title bắt buộc phải nằm trong phần tử head.

Phần tử HTML là gì?

Phần tử HTML (HTML element) là một thùng chứa (container), nó được sử dụng để chứa văn bản, và các phần tử HTML khác.

Thùng chứa thường được tạo ra bằng cách dùng 2 thẻ chặn 2 đầu. Tên của thẻ sẽ quy định nội dung chứa bên trong mang ý nghĩa gì khi hiển thị. Ví dụ: muốn tạo ra một bài viết thì dùng phần tử article, muốn tạo ra một tiêu đề thì dùng phần tử h1.

Hình dưới đây là cú pháp một phần tử HTML thông thường (gọi là phần tử HTML thông thường vì còn có các phần tử HTML đặc biệt),


Như vậy, một phần tử HTML sẽ bắt đầu là thẻ mở, tới phần nội dung, và cuối cùng là thẻ đóng.

Thẻ HTML là gì?

Thẻ HTML (HTML tag) là các từ khóa (keyword), được sử dụng để báo cho trình duyệt biết ý nghĩa, cách định dạng và hiển thị các nội dung. Trình duyệt sẽ không hiển thị các từ khóa này ra ngoài giao diện. Thẻ HTML thường gồm hai phần: phần mở thẻ gọi là thẻ mở (opening tag, start tag) và phần đóng thẻ gọi là thẻ đóng (closing tag, end tag).

Xem hình minh họa cú pháp của thẻ HTML thông thường,


Cũng có thể hiểu nôm na, HTML sẽ sử dụng các thẻ (tag) để “đánh dấu” chỗ này là tiêu đề, chỗ khác là một đoạn văn bản, chỗ này sẽ hiển thị hình ảnh, chỗ khác sẽ hiển thị một video. Đây chính là ý nghĩa của chữ “đánh dấu” trong khái niệm HTML.

Để ý trong cú pháp của thẻ HTML sẽ thấy, thẻ mở và thẻ đóng sẽ có “tên thẻ” giống nhau, chỉ khác nhau là trong thẻ đóng có thêm dấu xuyệt “/” (forward-slash). Ví dụ: <html></html>, hoặc <p></p>. Đừng nhầm dấu xuyệt (/) với dấu xuyệt ngược (\) (backslash).

Khi lập trình, nên viết tên thẻ ở dạng chữ thường, mặc dù trình duyệt không phân biệt chữ hoa và chữ thường. Ví dụ, nên viết thẻ là <strong> thay vì <Strong> hoặc <STRONG>. Khi viết thẻ mở thì viết luôn thẻ đóng, để tránh quên thẻ đóng, dễ sinh ra lỗi.

Như vậy với cặp thẻ HTML, chúng ta đã tạo ra được một cái thùng rỗng, giờ chỉ việc bỏ nội dung vào giữa cặp thẻ này để tạo ra các phần tử HTML.

Thẻ HTML và phần tử HTML có phải là một?

Thẻ HTML (HTML tag) và phần tử HTML (HTML element) là hai khái niệm khác nhau, tuy thực tế, mọi người vẫn hay sử dụng để thay thế cho nhau. Nói chung, cả hai đều là những thứ để tạo ra một trang web. Tuy nhiên, thẻ HTML là thành phần để tạo ra phần tử HTML.

1.4       Xem và đọc thêm

– Từ khóa: kiến trúc client-server, quá trình hiển thị một trang web, How The Web Works

– Mô hình client-server: https://vi.wikipedia.org/wiki/M%C3%B4_h%C3%ACnh_client-server

– How The Web Works - The Big Picture (view): https://www.youtube.com/watch?v=hJHvdBlSxug

– How The Web Works - The Big Picture (read): https://academind.com/tutorials/how-the-web-works/

1.5       Bài tập và thực hành

Bài tập 1. Làm các phần thực hành, viết lại các đoạn mã trong phần lý thuyết.

Bài tập 2. Truy cập vào trang web (ứng dụng web) của một ngân hàng bất kì. Sử dụng Developer tools để lấy về các thông tin sau của trang web:

– Mã HTML

– Tập tin hình ảnh

– Tập tin âm thanh (nếu có)

– Tập tin phông chữ

Bài tập 3. Dùng HTML để tạo ra giao diện web như sau:


Mã nguồn tham khảo:



Sau khi lập trình xong, bạn mở giao diện trên trang web, nhập vào các trường và bấm nút Gửi. Bạn sẽ thấy thông tin do người dùng nhập vào được gửi tới trang http://httpbin.org/get. Ví dụ,

{
  "args": {
    "dien-thoai": "123456", 
    "email": "levanti@gmail.com", 
    "loi-nhan": "tiem sach co cuon Dung viec khong?", 
    "ten": "le van ti"
  }, 
  "headers": {

Bài tập 4. Dựa theo bài tập 3, dùng HTML để tạo ra giao diện đăng nhập vào một ngân hàng, khi người dùng bấm nút Đăng nhập, thông tin sẽ được gửi về http://httpbin.org/get.


Bài tập 5. Tìm hiểu và cài đặt WSL2

Bài tập 6. Tìm hiểu và cài đặt Kali Linux.

1.6       Câu hỏi ôn tập

Câu 1. Mô hình client-server gồm 4 thành phần sau:

A. Server, Services, Môi trường truyền, Giao thức truyền thông tin

B. Client, Server, Môi trường truyền, Giao thức truyền thông tin

C. Client, Server, Môi trường truyền, Thiết bị lưu trữ

D. Client, Server, Trình duyệt, Giao thức truyền thông tin

Câu 2. Trong mô hình client-server, client có thể là trình duyệt, ứng dụng viết bằng python/javascript hoặc bất kỳ ứng dụng nào mà có phát sinh ra ______.

A. Kết quả

B. HTTP request

C. Giao thức

D. HTML

Câu 3. Client–server model is a distributed application structure that partitions tasks or workloads between the providers of a resource or service, called _______, and service requesters, called clients.

A. browsers

B. web services

C. servers

D. centers

Câu 4. Web server thường gửi về trình duyệt các loại mã nguồn sau:

A. HTML, CSS, JavaScript, PHP

B. C#, HTML, CSS, JavaScript

C. HTML, CSS, JavaScript

D. Python, HTML, CSS, JavaScript

Câu 5. Một phần tử HTML (thông thường) gồm các thành phần sau:

A. thẻ mở, thẻ đóng

B. thẻ mở, nội dung

C. thẻ mở, nội dung, thẻ đóng

D. thẻ đóng, nội dung

Đáp án: 1(B), 2(B), 3(C), 4(C), 5(C)

---

Bài sau: Bảo mật web và ứng dụng (3) - Tạo giao diện giả mạo bằng CSS