Ứng dụng web an ninh mạng
Ứng dụng Web không thể thiếu đối với hầu hết mọi việc chúng ta làm, cho dù đó là truy cập Internet hay điều khiển máy cắt cỏ của bạn từ xa. Trong lớp giới thiệu này, chúng tôi sẽ đề cập đến những kiến thức cơ bản về bảo mật ứng dụng web.
Giao thức HTTP
HTTP là giao thức mạng cho phép trình duyệt và ứng dụng của chúng tôi nhận nội dung như HTML ("Ngôn ngữ đánh dấu siêu văn bản"), CSS ("Bảng định kiểu xếp tầng"), hình ảnh và video.
URL, tham số truy vấn và lược đồ
Để truy cập một ứng dụng web, chúng tôi sử dụng URL ("Bộ định vị tài nguyên thống nhất"), ví dụ: https://www.google.com/search?q=w3schools+cyber+security&ie=UTF-8
URL tới google.com chứa miền, tập lệnh đang được truy cập và Tham số truy vấn.
Tập lệnh chúng tôi đang truy cập được gọi là /search. / cho biết nó được chứa trong thư mục trên cùng trên máy chủ nơi các tệp đang được phân phát. Các ? cho biết các tham số đầu vào cho tập lệnh và dấu & phân cách các tham số đầu vào khác nhau. Trong URL của chúng tôi, các tham số đầu vào là:
- q với giá trị an ninh mạng của w3schools
- tức là với giá trị UTF-8
Ý nghĩa của những thông tin đầu vào này tùy thuộc vào ứng dụng máy chủ web xác định.
Đôi khi bạn sẽ chỉ thấy / hoặc /? cho biết rằng một tập lệnh đã được thiết lập để phục vụ nhằm phản hồi địa chỉ này. Thông thường tập lệnh này giống như một tệp chỉ mục chứa tất cả các yêu cầu trừ khi một tập lệnh cụ thể được chỉ định.
Lược đồ là những gì xác định giao thức sẽ sử dụng. Trong trường hợp của chúng tôi, đây là phần đầu tiên của URL: https. Khi lược đồ không được xác định trong URL, nó cho phép ứng dụng quyết định nên sử dụng cái gì. Các lược đồ có thể bao gồm toàn bộ mảng giao thức như:
- HTTP
- HTTPS
- FTP
- SSH
- SMB
Tiêu đề HTTP
Giao thức HTTP sử dụng nhiều tiêu đề, một số tiêu đề tùy chỉnh cho ứng dụng và một số tiêu đề khác được công nghệ xác định và chấp nhận rõ ràng.
Ví dụ yêu cầu tới https://google.com
GET /search?q=w3schools+cyber+security&ie=UTF-8 HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/*,*/*;q=0.8
Referer: https://example.com.vn/
Accept-Encoding: gzip, deflate
Cookie: cookie1=value1;cookie2=value2
Tiêu đề yêu cầu chỉ định những gì khách hàng muốn thực hiện trên máy chủ web đích. Nó cũng có thông tin liên quan đến việc liệu nó có chấp nhận tính năng nén hay không, loại ứng dụng khách nào đang truy cập và bất kỳ cookie nào mà máy chủ yêu cầu ứng dụng khách đưa ra. Các tiêu đề yêu cầu HTTP được giải thích ở đây:
Header | Explanation |
---|---|
GET /search... HTTP/1.1 | GET is the verb we are using to access the application. Explained in detail in the section HTTP Verbs. We also see the path and query parameters and HTTP version |
Host: google.com | This header indicates the target service we want to use. A server can have multiple services as explained in the section on VHOSTS. |
User-Agent | A client application, that is the browser in most cases, can identify itself with the version, engine and operating system |
Accept | Defines which content the client can accept |
Referer: https://example.com.vn/ | If the client clicked a link from a different website the Referer header is used to say from where the client came from |
Accept-Encoding: gzip, deflate | Can the content be compressed or encoded? This defines what we can accept |
Cookie | Cookies are values sent by the server in previous requests which the client sends back in every subsequent request. Explained in detail in the section State |
Với yêu cầu này, máy chủ sẽ trả lời bằng tiêu đề và nội dung. Các tiêu đề ví dụ được nhìn thấy dưới đây:
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: <cookie value>
<website content>
Tiêu đề và nội dung phản hồi là yếu tố quyết định những gì chúng ta sẽ thấy trong trình duyệt của mình. Các tiêu đề phản hồi HTTP được giải thích như sau:
Header | Explanation |
---|---|
HTTP/1.1 200 OK | The HTTP Response code. Explained in detail in the HTTP Response Codes section |
Content-Type: text/html | Specifies the type of content being returned, e.g. HTML, JSON or XML |
Set-Cookie: | Any special values the client should remember and return in the next request |
Động từ HTTP
Khi truy cập một ứng dụng web, khách hàng sẽ được hướng dẫn cách gửi dữ liệu đến ứng dụng web. Có rất nhiều động từ có thể được ứng dụng chấp nhận.
!Verb | Used for |
---|---|
GET | Typically used to retrieve values via Query Parameters |
POST | Used to send data to a script via values in the body of the Request sent to the webserver. Typically it involves creating, uploading or sending large quantities of data |
PUT | Often use to upload or write data to the webserver |
DELETE | Indicate a resource which should be deleted |
PATCH | Can be used to update a resource with a new value |
Chúng được sử dụng khi ứng dụng web yêu cầu. Các dịch vụ web Restful (REST) đặc biệt hiệu quả trong việc sử dụng đầy đủ các Động từ HTTP để xác định những gì nên làm ở phần phụ trợ.
Mã phản hồi HTTP
Ứng dụng chạy trên máy chủ web có thể phản hồi bằng các mã khác nhau dựa trên những gì xảy ra ở phía máy chủ. Dưới đây là các mã phản hồi phổ biến mà máy chủ web sẽ cấp cho khách hàng mà các chuyên gia bảo mật nên biết:
Code | Explanation |
---|---|
200 | Application returned normally |
301 | Server asks client to permanently remember a redirect to a new location where the client should access |
302 | Redirect temporarily. Client doesn't need to save this reply |
400 | The client made an invalid request |
403 | The client is not allowed to access this resource. Authorization is required |
404 | The client tried to access a resource which does not exist |
500 | The server errored in trying to fulfill the request |
NGHỈ NGƠI
Các dịch vụ nghỉ ngơi, đôi khi được gọi là dịch vụ RESTful, sử dụng toàn bộ sức mạnh của Động từ HTTP và Mã phản hồi HTTP để tạo điều kiện thuận lợi cho việc sử dụng ứng dụng web. Các dịch vụ RESTful thường sử dụng các phần của URL làm tham số truy vấn để xác định điều gì xảy ra trên ứng dụng web. REST thường được sử dụng bởi API ("Giao diện lập trình ứng dụng").
URL REST sẽ gọi chức năng dựa trên các thành phần khác nhau của URL.
Một URL REST ví dụ: https://example.com/users/search/w3schools
URL này sẽ gọi chức năng như một phần của URL thay vì Tham số truy vấn. Chúng tôi có thể giải mã URL dưới dạng:
Parameter | Comment |
---|---|
users | Accessing the users part of the functionality |
search | Accessing the search feature |
w3schools | The user to search for |
Phiên & trạng thái
Không có cách tích hợp nào để máy chủ xác định khách truy cập quay lại trong HTTP. Để máy chủ web xác định được người dùng, một giá trị bí mật phải được truyền đạt đến và từ Khách hàng trong mỗi yêu cầu. Điều này thường được thực hiện thông qua Cookie trong tiêu đề, tuy nhiên các cách khác cũng phổ biến như thông qua tham số GET và POST hoặc các tiêu đề khác. Việc chuyển trạng thái thông qua các tham số GET không được khuyến khích vì các tham số như vậy thường được ghi vào máy chủ hoặc trong các trung gian như proxy.
Dưới đây là một số ví dụ về Cookie phổ biến cho phép ứng dụng trên máy chủ web kiểm soát phiên và trạng thái:
- PHPSESSID
- JSESSIONID
- ASP.NET_SessionID
Các giá trị này thể hiện một trạng thái nhất định, thường được gọi là phiên, trên máy chủ. Trạng thái này đại diện cho những thứ như:
- Bạn đã đăng nhập với tư cách người dùng nào
- Đặc quyền và ủy quyền
Điều quan trọng là giá trị phiên được gửi tới Khách hàng không thể dễ dàng đoán được hoặc bị người khác xác định. Nếu có thể, kẻ tấn công có thể tự nhận mình là những người dùng khác trên ứng dụng web.
Trạng thái cũng có thể được lưu trên máy khách. Điều này liên quan đến việc máy chủ gửi tất cả các trạng thái cho máy khách và dựa vào việc máy khách gửi lại tất cả các mục. Việc triển khai như vậy dựa vào mã hóa để kiểm tra tính toàn vẹn của trạng thái mà máy khách đang yêu cầu. Ví dụ về việc triển khai sử dụng điều này được liệt kê dưới đây:
- JWT ("Mã thông báo web JSON")
- ASP.Net ViewState
Bạn đang sử dụng cookie để tham gia lớp học này! Bạn có thể kiểm tra các cookie này trong trình duyệt web của mình bằng cách mở công cụ dành cho nhà phát triển. Điều này được thực hiện bằng cách nhấn F12
trong trình duyệt, mở cửa sổ công cụ dành cho nhà phát triển. Trong cửa sổ này, bạn sẽ có thể tìm thấy đúng nơi lưu trữ cookie của mình.
Trong Google Chrome, cookie đã được xác định trong tab Ứng dụng ở trên.
Máy chủ ảo
Một máy chủ web có thể xử lý nhiều ứng dụng thông qua Máy chủ ảo, thường được viết tắt là Vhost. Để tạo điều kiện truy cập vào các Máy chủ ảo khác, máy chủ web thường đọc tiêu đề Máy chủ của yêu cầu của máy khách và dựa trên giá trị này sẽ gửi yêu cầu đến đúng ứng dụng.
Mã hóa URL
Để ứng dụng truyền nội dung giữa máy chủ và máy khách một cách an toàn, một số ký tự phải được mã hóa để đảm bảo chúng không ảnh hưởng đến giao thức. Để duy trì tính toàn vẹn của thông tin liên lạc, mã hóa URL được sử dụng.
Mã hóa URL thay thế các ký tự không an toàn bằng % và hai chữ số thập lục phân. Ví dụ:
- Tỷ lệ phần trăm được thay thế bằng %25
- Không gian được thay thế bằng %20
- Báo giá được thay thế bằng %22
Một công cụ tuyệt vời để thực hiện phân tích văn bản và chạy các hoạt động như Giải mã URL là CyberChef. Bạn có thể dùng thử trên trình duyệt của mình tại đây: https://gchq.github.io/CyberChef/
JavaScript
Để hỗ trợ nội dung động, trình duyệt sử dụng ngôn ngữ kịch bản JavaScript. Điều này cho phép các nhà phát triển lập trình các giải pháp sẽ chạy trên máy khách, cho phép nội dung web tương tác và "sống động" hơn.
JavaScript cũng tham gia vào nhiều cuộc tấn công chống lại các ứng dụng web và ứng dụng khách như trình duyệt.
Mã hóa bằng TLS
Giao thức HTTP không hỗ trợ mã hóa cho dữ liệu đang truyền, do đó, một trình bao bọc xung quanh HTTP được thêm vào để hỗ trợ mã hóa. Điều này được biểu thị bằng chữ S theo sau HTTP, tức là HTTPS.
Mã hóa trước đây là SSL ("Lớp cổng bảo mật") nhưng sau đó không còn được dùng nữa. Thay vào đó, TLS ("Bảo mật lớp truyền tải") thường được sử dụng để thực thi mã hóa.