CHƯƠNG 1 MÁY CHỦ WEB VÀ VẤN ĐỀ AN TOÀN WEB 1. Máy chủ Web và giao thức HTTP 1. Giới thiệu máy chủ web Máy chủ web (Web server) được dùng để chỉ phần mềm máy chủ, hoặc phần cứng dành riêng để chạy các phần mềm trên máy chủ, có thể cung cấp các dịch vụ World Wide Web. Một máy chủ web xử lí các yêu cầu (request) từ các client (trong mô hình server - client) thông qua giao thức HTTP và một số giao thức liên quan khác [7].
Tất cả các Web Server đều hiểu và chạy được các file *.html, tuy nhiên mỗi Web Server lại phục vụ một số kiểu file chuyên biệt chẳng hạn như IIS của Microsoft dành cho *.aspx…; Apache dành cho *.php…; Sun Java System Web Server của SUN dành cho *p… Máy chủ Web thường có dung lượng lớn, tốc độ cao, lưu trữ thông tin như một ngân hàng dữ liệu, chứa những website cùng với những thông tin liên quan khác, ví dụ như các mã Script, các chương trình dịch vụ và các file Multimedia, v. Máy chủ Web có khả năng gửi đến máy khách những trang Web thông qua môi trường Internet (hoặc Intranet) qua giao thức HTTP (Hypertext Transfer Protocol) – giao thức được thiết kế để gửi các file đến trình duyệt Web (Web Browser), và các giao thức khác. Tất cả các máy chủ Web đều có một địa chỉ IP (IP Address) hoặc một tên miền (Domain Name). Ví dụ khi đưa http://www.vn/ vào dòng địa chỉ trên trình duyệt nghĩa là gửi một yêu cầu đến một máy chủ Web có Domain Name là www.
Máy chủ Web này sẽ tìm trang Web có tên là index.htm rồi gửi nó đến trình duyệt. Bất kỳ một máy tính – máy chủ nào cũng có thể trở thành một máy chủ Web nếu cài đặt lên nó một chương trình phần mềm Web Server và có kết nối vào Internet. Khi một máy tính của người dùng kết nối đến một Web Server và gửi yêu cầu truy cập các thông tin trên một trang Web nào đó, Web Server sẽ nhận yêu cầu và gửi lại trình duyệt của người dùng những thông tin mong muốn. Luan van 4 Giống như những phần mềm khác trên máy tính, phần mềm máy chủ Web cũng chỉ là một ứng dụng phần mềm.
Nó được cài đặt, và chạy trên máy tính – máy chủ dùng làm Web Server. Nhờ có chương trình này, người sử dụng có thể truy cập đến các thông tin của trang Web từ một máy tính khác ở trên mạng (Internet, Intranet). Phần mềm máy chủ Web có thể được tích hợp với cơ sở dữ liệu (CSDL), hay điều khiển việc kết nối vào CSDL để có thể truy cập và kết xuất thông tin từ CSDL lên các trang Web và truyền tải chúng đến người dùng. Máy chủ Web thường hoạt động liên tục 24/24 giờ, 7 ngày một tuần và 365 ngày một năm, để phục vụ cho việc cung cấp thông tin trực tuyến.
Vị trí đặt máy chủ Web đóng vai trò quan trọng trong chất lượng và tốc độ lưu chuyển thông tin từ máy chủ Web đến máy tính truy cập [8]. Các loại máy chủ Web phổ biến bao gồm: - Apache: Đây là máy chủ Web thường được cài đặt trên Linux. Hầu hết các trang web PHP được lưu trữ trên máy chủ Apache. - Internet Information Services (IIS): là máy chủ Web được phát triển bởi Microsoft.
Hầu hết các trang web asp và aspx được lưu trữ trên máy chủ IIS. - Apache Tomcat: Hầu hết các trang web Java (jsp) được lưu trữ trên máy chủ này. - Các máy chủ web khác: bao gồm Web Server của Novell và máy chủ Lotus Domino của IBM, Nginx, v. Các thành phần cơ bản của máy chủ web Như đã nêu ở trên, một máy chủ Web bao gồm một phần mềm Web server cài đặt trên một máy tính hoặc máy chủ[14].
Máy tính hoặc máy chủ (server) là thiết bị phần cứng cần thiết để cài đặt phần mềm Web server. Tùy vào phạm vi ứng dụng, yêu cầu cung cấp dịch vụ, phần cứng máy chủ có thể có cấu hình từ đơn giản đến rất mạnh. Quan trọng đối với hiệu năng của máy chủ Web là tốc độ CPU, dung lượng đĩa cứng lưu trữ và tốc độ kết nối mạng. Ngoài ra để máy chủ Web hoạt động, còn cần thêm các thành phần quan trọng khác là máy chủ cơ sở dữ liệu (Database server) và máy chủ ứng dụng Luan van 5 (Application server).
Trong một hệ máy chủ Web đơn gian, hai thành phần nêu trên có thể cùng được cài đặt trên một phần cứng máy tính/máy chủ.1 là kiến trúc đơn giản cho một hệ thống máy chủ Web. Web server bao gồm thành phần giao diện Web (Presentation layer hay Web interface), thành phần giao diện CSDL (Database interface). Máy chủ CSDL có thể đặt ngoài máy tính cài Web Server, được kết nối với nhau qua giao diện TCP/IP. Giao diện giữa máy chủ Web và trình duyệt của người dùng (Web Browser) được thực hiện qua kết nối HTTP hoặc HTTPS.
Toàn bộ hoạt động của máy chủ Web được ghi vào nhật ký (Log file) phục vụ cho việc theo dõi, giám sát hoạt động và tìm lỗi). Máy trạm Bàn phím/Màn hình Trình duyệt web Người dùng Kết nối HTTP/ HTTPS Máy chủ web Lớp trình bày (Giao diện web) Máy chủ CSDL Cơ sở dữ liệu TCP / IP Giao diện cơ sở dữ liệu Tệp MySQL nhật kí Hình 1. Kiến trúc hệ thống máy chủ web 1. Nguyên tắc hoạt động Nguyên tắc hoạt động cơ bản của máy chủ Web được thể hiện trên hình 1.
Người dùng gõ dòng địa chỉ máy chủ Web vào trình duyệt web và ấn Enter, trang web sẽ hiển thị trên màn hình máy tính người dùng. Để trang web có thể hiển thị được thì cơ chế hoạt động của máy chủ web được thể hiện qua các bước cơ bản trong tiến trình truyền tải trang web đến màn hình người dùng như sau. Luan van 6 Các tiến trình cơ bản Theo mô hình trên, trình duyệt web (bên trái) thực hiện một kết nối tới máy chủ web (bên phải), yêu cầu một trang web và nhận lại nó. Trình tự từng bước cơ bản xảy ra như sau.
* Trình duyệt web tách địa chỉ website làm 3 phần: - Tên giao thức: “http” - Tên miền của máy chủ web: “http://maychuvietnam.vn” - Tên tệp HTML: “web-server.htm” * Trình duyệt gửi yêu cầu kết nối tới máy chủ Web (bản tin HTTP request). * Máy chủ Web trả lời bằng bản tin HTTP response. * Căn cứ thông tin trong bản tin yêu cầu, máy chủ Web liên hệ với máy chủ tên miền (DNS Server) để chuyển đổi tên miền “http://maychuvietnam.vn” ra địa chỉ IP tương ứng. Sau đó, trình duyệt sẽ gửi tiếp một kết nối tới máy chủ của website có địa chỉ IP này qua cổng 80.
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 HTML “web-server. Các bước cơ bản trong tiến trình truyền tải web Chú ý: Một cookies cũng sẽ được gửi kèm từ trình duyệt web đến máy chủ. Tiếp đến, máy chủ sẽ gửi một file văn bản có các thẻ HTML đến trình duyệt web của máy yêu cầu (một cookies khác cũng được gửi kèm theo từ máy chủ tới trình duyệt web, cookies này được ghi trên đầu trang của mỗi trang web). Trình duyệt web đọc các thẻ HTML để xác lập định dạng trang web và kết xuất nội dung trang ra màn hình yêu cầu.
Trong giao thức HTTP nguyên bản, cần cung cấp đầy đủ đường dẫn của tên tệp. Ví dụ như “/” hoặc “/tên tệp. Sau đó, giao thức sẽ tự điều chỉnh để có thể Luan van 7 đưa ra một địa chỉ URL đầy đủ. Điều này cho phép các công ty kinh doanh dịch vụ lưu trữ có thể lưu trữ nhiều tên miền ảo (virtual domains).
Có nghĩa nhiều tên miền cùng tồn tại trên một máy chủ và sử dụng cùng một địa chỉ IP duy nhất. Rất nhiều máy chủ web đưa thêm các chế độ bảo mật trong nhiều tiến trình xử lý. Máy chủ web hỗ trợ người quản lý trang web duy trì một danh sách tên và password cho phép những người được phép truy cập vào trang web. Với máy chủ web chuyên nghiệp, yêu cầu mức độ bảo mật lớn; chỉ cho kết nối đã được mã hóa giữa máy chủ và trình duyệt.
Do đó những thông tin nhạy cảm như password… có thể được truyền tải tên Internet[14]. Ghi nhật ký (Web Log) Web log file chính là các tệp nhật ký tự động tạo và duy trì bởi một máy chủ web. Mỗi lần truy cập vào trang Web, bao gồm mỗi lần xem một tài liệu HTML, hình ảnh hoặc các đối tượng của website đều được web server ghi nhận. Các máy chủ web như IIS, Apache hay Nginx đều có các web log file để ghi lại các nhật ký hoạt động của website[9].
Định dạng tệp nhật ký web thô chủ yếu là một dòng văn bản cho mỗi lần truy cập vào trang web. Điều này chứa thông tin về ai đã ghé thăm trang web, nơi họ đến và chính xác những gì họ đang làm trên trang web[2]. Với webserver có 2 dạng log file quan trọng: * Access_log: Access_log là nơi ghi lại tất cả những yêu cầu được xử lý bởi server. Vị trí và nội dung của access log được điều khiển bởi CustomLog directive.
Có thể dùng LogFormat directive trong việc định dạng nội dung của tập tin access_log. LogFormat chỉ ra những thông tin server cần theo dõi để ghi lại trong access log. * Error_log: ErrorLog là nơi mà httpd sẽ gửi những thông tin nhận dạng và bất kỳ những lỗi nào gặp phải trong quá trình xử lý những yêu cầu. Tập tin này là nơi mà cần xem xét đầu tiên khi gặp phải những lỗi khởi động httpd hay những thao tác của server, vì nó lưu những thông tin chi tiết về những lỗi và cách sửa lỗi.
Định dạng của tập tin error_log không bị bó buộc[9]. Luan van 8 * Định dạng các tệp log: - Đối với Access_log: Để thay đổi định dạng access log, có thể dùng directive log_format. Chỉ thị này mặc định nằm trong block http {…}. Để xem được log format ví dụ của Nginx, có thể vào chỉ dẫn thư mục /etc/nginx/nginx.
Mẫu log_format mặc định trong Nginx là access combined như sau: log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; Chỉ thị log_format để định dạng access log cho Nginx, ý nghĩa các biến như sau: $remote_addr địa chỉ IP truy cập web site của bạn. $remote_user ghi lại tài khoản truy cập web nếu trang của bạn có xác thực người dùng, đa số là không dùng bạn có thể bỏ đi. $time_local thời gian người dùng truy cập. $request đoạn đầu của request.
$status trạng thái của response. $body_bytes_sent kích thước body mà server response. $http_referer URL được tham chiếu. $http_user_agent thông tin trình duyệt, hệ điều hành mà người dùng truy cập.