Web Security: Các lớp trong kiến trúc web
Một ứng dụng web khi triển khai, về cơ bản sẽ có ba lớp như sau: lớp trình diễn, lớp ứng dụng và lớp cơ sở dữ liệu. Việc nắm vững các mô hình triển khai của các hệ thống web và các lớp trong kiến trúc web sẽ giúp đỡ nhiều trong quá trình kiểm thử bảo mật hệ thống web cũng như việc tăng cường hệ ...
Một ứng dụng web khi triển khai, về cơ bản sẽ có ba lớp như sau: lớp trình diễn, lớp ứng dụng và lớp cơ sở dữ liệu. Việc nắm vững các mô hình triển khai của các hệ thống web và các lớp trong kiến trúc web sẽ giúp đỡ nhiều trong quá trình kiểm thử bảo mật hệ thống web cũng như việc tăng cường hệ thống bảo mật cho website của mình.
1. Lớp trình diễn
Lớp trình diễn hay còn gọi là máy chủ phục vụ web hoặc Web Server. Nó đơn giản là một máy chủ phục vụ được cài đặt các chương trình phục vụ cho web (ftp, www,…) và có thể xuất bản được những trang web ra ngoài Internet. Nó lắng nghe những yêu cầu từ phía người dùng (client), ví dụ như từ một trình duyệt và xử lý những yêu cầu đó, sau đó trả kết quả dưới dạng một form chứa các trang được định dạng dưới dạng văn bản hoặc hình ảnh. Trình duyệt sẽ hiển thị những kết quả này lên một cách tốt nhất đến client.
Hoạt động của web server được mô tả như trên hình vẽ:
Hoạt động của web server
Một số máy chủ web server thông dụng hiện nay:
Máy chủ IIS (Internet Information Services)
Đây là một thành phần có sẵn trong các phiên bản của của hệ điều hành Microsoft Windows. Nó cung cấp, phát tán các thông tin lên mạng Internet và bao gồm nhiều dịch vụ khác nhau như Web Server, FTP Server,… Nó có thể được sử dụng để xuất bản nội dung của các trang Web lên Internet bằng việc sử dụng Hypertext Transport Protocol (HTTP). Máy chủ IIS có thể thực thi một số kiểu file chuyên biệt của ngôn ngữ ASP (*.asp, *.aspx, … ).
Máy chủ Apache HTTP
Apache là phần mềm web server nổi tiếng, đóng vai trò quan trọng trong sự phát triển ban đầu của World Wide Web. Apache được phát triển và duy trì bởi cộng đồng mã nguồn mở dưới sự bảo trợ của Apache Software Foundation với rất nhiều ứng dụng có sẵn cho nhiều hệ điều hành bao gồm cả Unix, GNU, FreeBSD, Linux, Solaris, Novell Netware, AmigaOS, Mac OS X, Microsoft Windows, … Apache hỗ trợ đa tính năng, người sử dụng có thể biên dịch thêm các module để mở rộng chức năng ngoài chức năng cốt lõi của Apache. Apache có thể thực thi các file chuyên biệt của ngôn ngữ PHP (*.php).
Máy chủ Apache Tomcat
Apache Tomcat là một Java Servlet được phát triển bởi Apache Software Foundation (ASF). Tomcat thi hành các ứng dụng Java Servlet và JavaServer Pages (*.jsp) từ Sun Microsystems và cung cấp một máy chủ HTTP cho ngôn ngữ Java thuần túy để thực thi các chương trình lệnh viết bằng ngôn ngữ Java.
Các máy chủ phục vụ web khác
Ngoài các máy chủ thường sử dụng trên thi còn một số máy chủ phục vụ web khác vẫn được sử dụng như: nginx, GWS, lighttpd, SunOne…
2. Lớp ứng dụng
Lớp ứng dụng hay Web Application, là nơi các kịch bản hay mã nguồn phát triển ra ứng dụng web được thực thi. Lớp này sẽ biên dịch các mã nguồn tương ứng và thực hiện các truy vấn đến cơ sở dữ liệu dựa vào mã nguồn ứng dụng.
Một số ngôn ngữ thực thi mã nguồn ứng dụng web:
ASP.NET
ASP.NET là một nền tảng ứng dụng web (web application framework) được phát triển và cung cấp bởi Microsoft, cho phép những người lập trình tạo ra những trang web động, những ứng dụng web và những dịch vụ web. Lần đầu tiên được đưa ra thị trường vào tháng 2 năm 2002 cùng với phiên bản 1.0 của .NET framework, là công nghệ nối tiếp của Microsoft Active Server Pages (ASP). ASP.NET được biên dịch dưới dạng Common Language Runtime (CLR), cho phép những người lập trình viết mã ASP.NET với bất kỳ ngôn ngữ nào được hỗ trợ bởi .NET language.
PHP
PHP (Hypertext Preprocessor) là một ngôn ngữ lập trình kịch bản hay một loại mã lệnh chủ yếu được dùng để phát triển các ứng dụng viết cho máy chủ, mã nguồn mở, dùng cho mục đích tổng quát. Nó rất thích hợp với web và có thể dễ dàng nhúng vào trang HTML. Do được tối ưu hóa cho các ứng dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xây dựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanh chóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới.
JSP
JSP (JavaServer Pages) còn được biết đến với một cái tên khác là Java Scripting Preprocessor, là một công nghệ Java cho phép các nhà phát triển tạo nội dung HTML, XML hay một số định dạng khác của trang web một cách năng động khi phản hồi yêu cầu của client. Công nghệ này cho phép người ta nhúng mã Java và một số hành động xử lý đã được định trước (pre-defined actions) vào trong nội dung tĩnh của trang.
Trước khi hiển thị ra trình duyệt, tập tin JSP phải được biên dịch thành Servlet, dùng bộ biên dịch JSP (JSP compiler). Bộ biên dịch JSP có thể tạo servlet thành mã nguồn Java trước, rồi biên dịch mã nguồn ra tập tin .class dùng bộ biên dịch Java, hoặc có thể trực tiếp tạo mã byte code cho servlet từ trang JSP.
Perl
Perl (Practical Extraction and Report Language) được Larry Wall xây dựng từ năm 1987, với mục đích chính là tạo ra một ngôn ngữ lập trình có khả năng chắt lọc một lượng lớn dữ liệu và cho phép xử lý dữ liệu nhằm thu được kết quả cần tìm. Cú pháp lệnh của Perl khá giống với C, từ các kí hiệu đến tên các hàm, do đó, nhiều người (đã có kinh nghiệm với C) thấy Perl dễ học. Perl khá linh hoạt và cho phép người sử dụng giải quyết với cùng một vấn đề được đặt ra theo nhiều cách khác nhau.
Một số ngôn ngữ thực thi khác
Ngoài ra còn một số ngôn ngữ thực thi mã nguồn ứng dụng web khác như: Python, Ruby, C#, VB.NET, …
3. Lớp cơ sở dữ liệu
Cơ sở dữ liệu (CSDL) hay Database, là một tập hợp thông tin có cấu trúc. Tuy nhiên, thuật ngữ này thường dùng trong công nghệ thông tin và nó thường được hiểu rõ hơn dưới dạng một tập hợp liên kết các dữ liệu. Dữ liệu này được duy trì dưới dạng một tập hợp các tập tin trong hệ điều hành hay được lưu trữ trong các hệ quản trị cơ sở dữ liệu.
Lớp cơ sở dữ liệu trong cấu trúc web là nơi mà ứng dụng web lưu trữ toàn bộ dữ liệu và thực hiện thao tác với nó bằng các truy vấn.
Một số hệ quản trị cơ sở dữ liệu thường gặp trong ứng dụng web:
Oracle
Oracle cung cấp một hệ quản trị cơ sở dữ liệu (Database Management System – DBMS) uyển chuyển: Oracle Server để lưu giữ và quản lý các thông tin dùng trong các ứng dụng. Oracle quản lý cơ sở dữ liệu với tất cả các ưu điểm của cấu trúc CSDL quan hệ, cộng thêm khả năng lưu giữ và thực thi các đối tượng CSDL như các procedure và các trigger.
SQL Server
SQL Server là hệ thống quản trị cơ sở dữ liệu quan hệ (Relational DataBase Management System- RDBMS), do hãng Microsoft phát triển, được cài đặt và chạy trên hệ điều hành Windows. SQL Server tỏ ra khá phổ biến và thân thiện với người dùng thông qua giao diện đồ họa trên Windows.
SQL Server sử dụng các lệnh giáo chuyển Transaction-SQL để trao đổi dữ liệu giữa Client Computer và Server Computer.
MySQL
MySQL là hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng web. Vì MySQL có tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạt động trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rất mạnh. Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet. MySQL miễn phí hoàn toàn nên có thể tải về MySQL từ trang chủ. Nó có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS X, Unix, FreeBSD, NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS…
MySQL là một trong những ví dụ rất cơ bản về Hệ Quản trị Cơ sở dữ liệu quan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL).
Một số hệ quản trị cơ sở dữ liệu khác
Ngoài ra còn một số hệ quản trị cơ sở dữ liệu khác như: PostgreSQL, Microsoft Access, Sybase, …
4. Mục đích của việc phân lớp
Việc hoạch định tốt các lớp trong cấu trúc web không những giúp người quản trị dễ vận hành mà còn chủ động trong phòng, chống các nguy cơ tấn công từ tin tặc.
Một số cách bố trí lớp thường gặp:
- Mỗi lớp khởi tạo một cơ chế phòng thủ riêng cho mình để chống lại những hành động không được phép từ bên ngoài.
- Mỗi lớp không nên “tin tưởng” những lớp khác để tránh tình trạng tấn công leo thang đặc quyền khi một lớp đã bị chiếm quyền điều khiển. Ví dụ nếu lớp ứng dụng của bạn có lỗi nhưng nếu bạn cấu hình hệ thống, cơ sở dữ liệu tốt thì cũng rất khó khăn để tin tặc có thể khai thác và làm ảnh hưởng tới hệ thống của bạn.
5. Một số kịch bản thông dụng
- Lớp trình diễn có thể áp đặt cơ chế điều khiển truy cập trên một tài nguyên. Ví dụ khi lập chính sách truy cập một tài nguyên nào đó trên hệ thống, chẳng hạn như thư mục /admin, có thể cài đặt cấu hình lớp trình diễn yêu cầu xác thực với quyền quản trị (administrator). Điều này sẽ hạn chế ảnh hưởng từ lớp ứng dụng có thể sử dụng nhiều kịch bản để truy cập đến tài nguyên trên.
- Lớp cơ sở dữ liệu có thể cung cấp các tài khoản khác nhau với những quyền hành động khác nhau. Ví dụ như với nhóm người sử dụng có tên tài khoản chưa được chứng thực thì thiết đặt quyền thấp nhất là chỉ có thể đọc, còn các thao tác ghi, thay đổi, thực thi là không được phép. Nếu tài khoản được chứng thực thì cũng chỉ được ghi, thay đổi, thực thi trên CSDL đã được chỉ định và chỉ có tác dụng trong phạm vi CSDL đã được cấu hình từ trước.
- Các lớp khác nhau không nên cho phép truy cập đọc hoặc ghi bởi lớp khác. Ví dụ: lớp trình diễn không có khả năng truy cập đến tập tin vật lý được sử dụng lưu trữ dữ liệu tại lớp CSDL mà chỉ có khả năng truy cập dữ liệu này thông qua các truy vấn với các tài khoản phù hợp (truy cập ở cấp độ ứng dụng). Các dịch vụ giao tiếp giữa các lớp trên cấp độ mạng cũng nên được lọc để chỉ cho phép các dịch vụ cần thiết được thực thi. Ví dụ: chỉ cho phép kết nối đến hệ quản trị cơ sở dữ liệu SQL Server trên cổng TCP 1433, còn các cổng khác thì phải được lọc hoặc không cho phép.