HTTP
HTTP là gì?
HyperText Transfer Protocol là giao thức mạng được sử dụng rộng rãi nhất trên Internet. Tất cả các trình duyệt web (chẳng hạn như Chrome, Firefox, Safari) đều sử dụng giao thức HTTP để truy xuất các trang web. HTTP xác định các quy tắc cho các yêu cầu và phản hồi giữa máy khách (thường là trình duyệt web) và máy chủ, đồng thời là nền tảng cho việc truyền dữ liệu trên World Wide Web (WWW).
Nói một cách đơn giản, HTTP giống như ngôn ngữ được sử dụng để giao tiếp giữa trình duyệt web và máy chủ Web. Khi bạn nhập địa chỉ web và nhấn Enter, trình duyệt sẽ gửi yêu cầu HTTP đến máy chủ và máy chủ sẽ trả về phản hồi HTTP, chứa nội dung trang web bạn yêu cầu.
HTTP hoạt động như thế nào: Mô hình Yêu cầu-Phản hồi
HTTP là một giao thức dựa trên mô hình máy khách-máy chủ và nguyên tắc hoạt động cơ bản của nó tuân theo một mô hình yêu cầu-phản hồi đơn giản:
Máy khách Khởi tạo Yêu cầu:
- Máy khách (thường là trình duyệt web) gửi yêu cầu HTTP đến máy chủ. Yêu cầu thường bao gồm các phần sau:
- Phương thức Yêu cầu: Chẳng hạn như GET, POST, cho biết hành động mà máy chủ sẽ thực hiện.
- URI Yêu cầu: Thường là Uniform Resource Identifier (URI) trỏ đến một tài nguyên cụ thể, tức là địa chỉ web bạn đang truy cập.
- Số Phiên bản: Chẳng hạn như HTTP/1.1 hoặc HTTP/2, cho biết phiên bản giao thức đang được sử dụng.
- Thông tin Tiêu đề: Chứa thông tin bổ sung, chẳng hạn như loại máy khách, mã hóa được chấp nhận, Cookie, v.v.
- Phần Thân Yêu Cầu: Một số yêu cầu (chẳng hạn như POST) bao gồm dữ liệu sẽ được gửi đến máy chủ.
- Máy khách (thường là trình duyệt web) gửi yêu cầu HTTP đến máy chủ. Yêu cầu thường bao gồm các phần sau:
Máy chủ Xử lý Yêu cầu:
- Sau khi nhận được yêu cầu, máy chủ sẽ xử lý yêu cầu đó theo phương thức yêu cầu, URI và các thông tin khác.
- Việc xử lý có thể bao gồm tìm kiếm tệp, thực thi tập lệnh, truy cập cơ sở dữ liệu, v.v.
Máy chủ Gửi Phản hồi:
- Sau khi quá trình xử lý hoàn tất, máy chủ sẽ gửi phản hồi HTTP đến máy khách. Phản hồi cũng bao gồm các phần sau:
- Mã Trạng thái: Chẳng hạn như 200 (Thành công), 404 (Không tìm thấy Tài nguyên), 301 (Chuyển hướng Vĩnh viễn), v.v., cho biết kết quả xử lý yêu cầu.
- Thông báo Trạng thái: Mô tả văn bản tương ứng với mã trạng thái, chẳng hạn như “OK”, “Không tìm thấy”, “Đã chuyển vĩnh viễn”.
- Thông tin Tiêu đề: Chứa thông tin bổ sung, chẳng hạn như loại nội dung (Content-Type), độ dài nội dung (Content-Length), chỉ thị kiểm soát bộ nhớ cache, v.v.
- Phần Thân Phản hồi: Chứa dữ liệu thực tế, chẳng hạn như nội dung trang web (HTML), hình ảnh, video, dữ liệu JSON, v.v. Đối với các lượt truy cập trang web thông thường sử dụng yêu cầu GET, phần thân phản hồi thường là HTML.
- Sau khi quá trình xử lý hoàn tất, máy chủ sẽ gửi phản hồi HTTP đến máy khách. Phản hồi cũng bao gồm các phần sau:
Máy khách Nhận Phản hồi:
- Sau khi nhận được phản hồi, máy khách sẽ phân tích cú pháp mã trạng thái và thông tin tiêu đề. Nếu mã trạng thái nằm trong chuỗi 2xx (Thành công), máy khách sẽ phân tích cú pháp phần thân phản hồi (thường là HTML) và hiển thị nó thành một trang web mà người dùng có thể nhìn thấy.
Quá trình này liên tục lặp lại, tạo thành cơ sở cơ bản cho tất cả các hoạt động Web như duyệt trang web, gửi biểu mẫu và tải hình ảnh mà chúng ta thực hiện hàng ngày.
HTTP phải đối mặt với những vấn đề bảo mật nào?
Mặc dù HTTP là nền tảng của World Wide Web, nhưng bản thân thiết kế của nó có một số vấn đề bảo mật quan trọng, chủ yếu là do nó là một Giao thức Truyền Văn bản Thuần túy. Điều này có nghĩa là tất cả dữ liệu được truyền giữa máy khách và máy chủ, bao gồm mật khẩu, thông tin nhận dạng cá nhân, dữ liệu kinh doanh nhạy cảm, v.v., đều không được mã hóa và có thể dễ dàng bị chặn và đọc bởi bất kỳ bên thứ ba (kẻ tấn công) nào có khả năng theo dõi lưu lượng mạng.
Các vấn đề bảo mật chính bao gồm:
Rò rỉ Dữ liệu và Nghe lén:
- Vì nội dung được truyền ở dạng văn bản thuần túy, nên bất kỳ kẻ tấn công nào đã nắm vững các kỹ thuật đánh hơi mạng (chẳng hạn như sử dụng các công cụ như Wireshark) hoặc đang nghe giữa người dùng và máy chủ, hoặc máy chủ và proxy, đều có thể thu thập thông tin chi tiết về các yêu cầu và phản hồi HTTP.
- Điều này có thể dẫn đến việc tiết lộ thông tin nhạy cảm (chẳng hạn như tên người dùng, mật khẩu, số thẻ tín dụng, thông tin cá nhân, v.v.), gây ra các vi phạm quyền riêng tư nghiêm trọng và rủi ro đánh cắp danh tính.
Tấn công Người ở giữa:
- Kẻ tấn công có thể tự chèn vào đường dẫn liên lạc giữa máy khách và máy chủ, đóng vai trò là “người ở giữa”. Họ có thể chặn, giả mạo, đọc hoặc phát lại các yêu cầu và phản hồi HTTP.
- Ví dụ: kẻ tấn công có thể chặn thông tin đăng nhập do người dùng gửi và sau đó gửi chúng đến máy chủ thực, đồng thời giữ một bản sao cho chính họ, do đó đánh cắp tài khoản của người dùng.
- Vì HTTP không có cơ chế xác minh tích hợp để xác nhận danh tính của các bên liên lạc, nên loại tấn công này tương đối dễ thực hiện.
Tấn công Cross-Site Scripting:
- Mặc dù bản thân XSS là một lỗ hổng ở cấp độ ứng dụng trang web, nhưng nó thường truy xuất dữ liệu từ máy chủ (chẳng hạn như nội dung được tạo động, yêu cầu dữ liệu từ các dịch vụ của bên thứ ba, v.v.) thông qua các yêu cầu HTTP GET hoặc POST, sau đó nhúng dữ liệu này vào trang web mà không cần lọc đủ.
- Nếu dữ liệu do máy chủ trả về chứa các tập lệnh độc hại do kẻ tấn công chèn vào, các tập lệnh này sẽ được thực thi trong trình duyệt của người dùng khi những người dùng khác truy cập trang web, do đó đánh cắp dữ liệu người dùng, cookie phiên hoặc thực hiện các hoạt động độc hại khác.
Tấn công Từ chối Dịch vụ:
- Kẻ tấn công có thể gửi một lượng lớn các yêu cầu HTTP không hợp lệ hoặc độc hại đến máy chủ, tiêu tốn tài nguyên của máy chủ (chẳng hạn như băng thông, CPU, bộ nhớ), khiến nó không thể phản hồi các yêu cầu hợp lệ của người dùng, dẫn đến gián đoạn dịch vụ.
Chiếm đoạt Phiên:
- Bản thân giao thức HTTP không cung cấp các cơ chế để đảm bảo tính bảo mật và toàn vẹn của phiên. Nếu người dùng sử dụng phiên trong một ứng dụng HTTP không sử dụng HTTPS, kẻ tấn công sẽ dễ dàng chặn Cookie chứa ID Phiên, từ đó chiếm quyền điều khiển phiên của người dùng và mạo danh người dùng.
Mối quan hệ giữa HTTPS và HTTP? Tại sao cần HTTPS?
Do các vấn đề bảo mật vốn có được mô tả ở trên, HTTP đã dần được thay thế hoặc sử dụng kết hợp với HTTPS (HTTP Secure). HTTPS thêm một lớp giao thức SSL/TLS trên HTTP, cung cấp các cơ chế bảo mật sau:
- Mã hóa: Mã hóa dữ liệu bằng khóa, đảm bảo rằng dữ liệu được bảo vệ ngay cả khi được truyền qua mạng công cộng, ngăn chặn nghe lén.
- Xác thực: Xác minh danh tính của máy chủ thông qua chứng chỉ kỹ thuật số, ngăn chặn các cuộc tấn công người ở giữa và cho người dùng biết họ đang giao tiếp với máy chủ thực.
- Tính toàn vẹn Dữ liệu: Đảm bảo rằng dữ liệu được truyền không bị giả mạo trong quá trình truyền.
Chính vì những tính năng bảo mật này mà HTTPS đã trở thành tiêu chuẩn cho các ứng dụng Web hiện đại để bảo vệ dữ liệu người dùng, duy trì quyền riêng tư và xây dựng lòng tin của người dùng. Điều cần thiết là phải thực thi việc sử dụng HTTPS cho các trang web xử lý thông tin nhạy cảm (chẳng hạn như thương mại điện tử, ngân hàng trực tuyến, phương tiện truyền thông xã hội, trang đăng nhập, v.v.) và các trang web cần tuân thủ các quy định bảo vệ dữ liệu (chẳng hạn như GDPR).