Khi bạn muốn truy cập một trang web, trình duyệt internet mà bạn sử dụng sẽ nhận một số dữ liệu từ trang web đó. Do đó, một cuộc đối thoại xảy ra giữa thiết bị của bạn và trang web. Điều này xảy ra với giao thức được gọi là HTTP. Có thể thực hiện một số biện pháp an ninh bổ sung bằng cách can thiệp vào cuộc đối thoại này.
Nếu bạn đang điều hành một trang web hoặc hướng đến sự nghiệp của một nhà phát triển web, tiêu đề bảo mật HTTP là vô giá đối với bạn, vì chúng đóng một vai trò tích cực trong bảo mật của cả người dùng và trang web.
HTTP Nghiêm ngặt-Vận chuyển-Bảo mật (HSTS) là gì?
Bảo mật truyền tải nghiêm ngặt HTTP (HSTS) buộc người dùng phải sử dụng HTTPS cho mọi yêu cầu họ đưa ra trong trình duyệt của mình. Đây là một cách vững chắc để chống lại các cuộc tấn công mạng như hạ cấp và đảm bảo an ninh cho tất cả lưu lượng truy cập.
Kích hoạt HSTS khá dễ dàng. Xem xét cuộc đối thoại giữa máy khách và máy chủ. Khi bạn cố gắng truy cập một trang web thông qua trình duyệt của mình, bạn là khách hàng. Trang web bạn muốn mở phụ thuộc vào máy chủ. Mục tiêu của bạn là nói với máy chủ, “Tôi muốn mở trang web này”. Đây là một hoạt động yêu cầu. Mặt khác, máy chủ hướng bạn đến trang web nếu bạn đáp ứng các điều kiện mong muốn.
Hãy ghi nhớ điều này liên quan đến cờ Tiêu đề HTTP mẫu này:
Strict-Transport-Security: max-age=16070200;
Khi bạn thêm cờ này vào thông tin tiêu đề của phản hồi HTTP, tất cả các yêu cầu do người dùng tạo sẽ trở thành HTTPS. Bất cứ điều gì người dùng viết ở đây, trình duyệt sẽ tự động đánh giá giao thức là HTTPS và thiết lập kết nối an toàn.
Cách sử dụng HSTS
Thay vì thêm tất cả thông tin tiêu đề HTTP này trong lớp mã, bạn có thể thực hiện trên Apache, IIS, Nginx, Tomcat và các ứng dụng máy chủ web khác.
Để bật HSTS trong Apache:
LoadModule headers_module modules/mod_headers.so
<VirtualHost *:443>
Header always set Strict-Transport-Security "max-age=2592000; includeSubDomains"
</VirtualHost>
Để bật HSTS trong Nginx:
add_header Strict-Transport-Security max-age=2592000; includeSubdomains
Để bật HSTS với IIS web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Strict-Transport-Security" value="max-age=63072000"/>
</customHeaders>
</httpProtocol>
</system.webServer>
Đối với người dùng Cloudflare
Cloudflare cung cấp dịch vụ HTTPS miễn phí cho mọi người với dịch vụ Keyless SSL; trước khi đăng ký tải trước HSTS, bạn nên biết rằng chứng chỉ của bạn không thuộc về bạn. Rất nhiều trang web sử dụng chứng chỉ SSL vì chúng là một cách đơn giản để giữ an toàn cho dữ liệu.
Tuy nhiên, Cloudflare hiện đã hỗ trợ tính năng HSTS. Bạn có thể kích hoạt tất cả các tính năng HSTS, bao gồm cả tải trước, thông qua giao diện web Cloudflare mà không gặp khó khăn với các cấu hình trên máy chủ web.
X-Frame-Options là gì?
X-Frame-Options là một tiêu đề bảo mật được hỗ trợ bởi tất cả các trình duyệt hiện đại. X-Frame-Options nhằm mục đích bảo vệ chống lại hành vi trộm cắp nhấp chuột như Clickjacking. Như tên cho thấy, nó nói về hoạt động của một khung nội tuyến dễ bị tổn thương, còn được gọi là iframe. Đây là các phần tử trên trang web nhúng một trang HTML khác vào trang web “mẹ”, vì vậy bạn có thể sử dụng nội dung từ các nguồn khác trên trang web của mình. Nhưng những kẻ tấn công sử dụng iframe dưới sự kiểm soát của chúng để khiến người dùng thực hiện các hành động mà họ không muốn.
Vì lý do này, bạn cần ngăn những kẻ tấn công có thể tìm thấy iframe trên trang web.
Sử dụng X-Frame-Options ở đâu và như thế nào?
Những gì X-Frame-Options làm, một số nhà phát triển cố gắng làm với các ngôn ngữ như JavaScript. Điều này không hoàn toàn sai. Tuy nhiên, vẫn có rủi ro vì các mã được viết ở nhiều khía cạnh là không đủ. Vì vậy, sẽ là khôn ngoan nếu để tác vụ này cho trình duyệt internet mà bạn đang sử dụng.
Tuy nhiên, là một nhà phát triển, có ba thông số cần biết về X-Frame-Options:
- Phủ nhận: Ngăn chặn hoàn toàn trang được gọi trong bất kỳ khung nội tuyến nào.
- SAMEORIGIN: Ngăn không cho bất kỳ miền nào không phải miền của bạn gọi trong iframe.
- CHO PHÉP TỪ đi tiểu: Chấp nhận các lệnh gọi iframe của URI được cung cấp dưới dạng tham số. Chặn người khác.
Đây, SAMEORIGIN tính năng nổi bật hơn. Bởi vì mặc dù bạn có thể gọi các ứng dụng trong các miền phụ khác nhau của mình bằng các iframe bên trong nhau, nhưng bạn có thể ngăn chúng được gọi qua miền dưới sự kiểm soát của kẻ tấn công.
Dưới đây là các ví dụ về cách bạn có thể sử dụng SAMEORIGIN và X-Frame-Options với NGINX, Apache và IIS:
Sử dụng X-Frame-Options SAMEORIGIN cho Nginx:
add_header X-Frame-Options SAMEORIGIN;
Sử dụng X-Frame-Options SAMEORIGIN cho Apache:
Header always append X-Frame-Options SAMEORIGIN
Sử dụng X-Frame-Options SAMEORIGIN cho IIS:
<httpProtocol>
<customHeaders>
<add name="X-Frame-Options" value="SAMEORIGIN" />
</customHeaders>
</httpProtocol>
Chỉ cần thêm tiêu đề SAMEORIGIN một mình sẽ cung cấp bảo mật cao hơn cho khách truy cập của bạn.
X-XSS-Protection là gì?
Sử dụng thông tin tiêu đề X-XSS-Protection có thể bảo vệ người dùng khỏi các cuộc tấn công XSS. Đầu tiên, bạn cần phải loại bỏ các lỗ hổng XSS ở phía ứng dụng. Sau khi cung cấp bảo mật dựa trên mã, các biện pháp khác, tức là tiêu đề X-XSS-Protection, được yêu cầu để chống lại các lỗ hổng XSS trong trình duyệt.
Cách sử dụng X-XSS-Protection
Các trình duyệt hiện đại có thể phát hiện các trọng tải XSS tiềm năng bằng cách lọc nội dung do ứng dụng tạo. Có thể kích hoạt tính năng này với thông tin tiêu đề X-XSS-Protection.
Để bật tiêu đề X-XSS-Protection trong Nginx:
add_header X-Frame-X-XSS-Protection 1;
Để bật tiêu đề X-XSS-Protection trong Apache:
Header always append X-XSS-Protection 1
Để bật tiêu đề X-XSS-Protection trong IIS:
<httpProtocol>
<customHeaders>
<add name="X-XSS-Protection" value="1" />
</customHeaders>
</httpProtocol>
Để ngăn khối mã bị tấn công XSS theo mặc định chạy, bạn có thể sử dụng một cái gì đó như sau:
X-XSS-Protection: 1; mode=block
Thay đổi nhỏ này cần được thực hiện nếu có tình huống nguy hiểm tiềm ẩn và bạn muốn ngăn tất cả nội dung hiển thị.
X-Content-Type-Options là gì?
Các trình duyệt thực hiện một phân tích được gọi là MIME Type Sniffing trên nội dung được ứng dụng web hiển thị cho họ. Ví dụ: nếu có yêu cầu truy cập tệp PDF hoặc tệp PNG, các trình duyệt thực hiện phân tích phản hồi HTTP sẽ suy ra loại tệp.
Hãy xem xét một tệp có phần mở rộng jpeg nhưng thực sự có nội dung Văn bản / HTML. Sau khi sử dụng các tiện ích mở rộng và vượt qua các biện pháp bảo vệ trong mô-đun tải lên, tệp sẽ được tải lên thành công. Tệp đã tải lên được gọi qua URL và kết quả là tính năng MIME Type sẽ trả về Văn bản / HTML. Nó hiển thị nội dung dưới dạng HTML. Đó là khi lỗ hổng XSS xảy ra.
Vì vậy, bạn cần ngăn trình duyệt quyết định nội dung bằng cách đánh hơi Kiểu MIME. Để làm điều này, bạn có thể sử dụng nosniff.
Tiêu đề X-Content-Type-Options cho Nginx:
add_header X-Content-Type-Options nosniff;
Tiêu đề X-Content-Type-Options cho Apache:
Header always X-Content-Type-Options nosniff
Tiêu đề X-Content-Type-Options cho IIS:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
Cờ Cookie HttpOnly là gì?
Ứng dụng web theo dõi phiên của người dùng thông qua ID phiên. Các trình duyệt sẽ lưu trữ thông tin này và tự động thêm nó vào mọi yêu cầu HTTP trong phạm vi của cookie.
Tuy nhiên, có thể sử dụng cookie cho các mục đích khác ngoài việc chuyển khóa phiên. Tin tặc có thể tìm ra dữ liệu người dùng bằng cách sử dụng lỗ hổng XSS nói trên hoặc thông qua một cuộc tấn công Truy vấn Yêu cầu Chéo Trang web (CSRF). Vậy cookie nào quan trọng nhất về mặt bảo mật?
Bạn có thể coi thông tin có trong hình ảnh cuối cùng bạn nhấp vào trong thư viện hình ảnh là một ví dụ. Bằng cách này, lưu lượng truy cập HTTP ít hơn và một phần tải có thể được trình duyệt internet của người dùng giải quyết bằng tập lệnh phía máy khách.
Đó là nơi HttpOnly xuất hiện. Dưới đây là một ví dụ về cách gán cookie:
Set-Cookie: user=t=cdabe8a1c2153d726; path=/; HttpOnly
Lưu ý giá trị HttpOnly được gửi trong Set-Cookie hoạt động. Trình duyệt sẽ thấy điều này và sẽ không xử lý các giá trị với cờ HttpOnly khi cookie được truy cập thông qua document.cookie Biến đổi. Một cờ khác được sử dụng trong quy trình Set-Cookie là cờ Bảo mật. Điều này cho thấy rằng giá trị cookie sẽ chỉ được thêm vào tiêu đề cho các yêu cầu HTTPS. Các trang web thương mại điện tử thường sử dụng nó vì họ muốn giảm lưu lượng mạng và tăng hiệu suất.
Sử dụng phương pháp này, bạn có thể ẩn dữ liệu quan trọng của người dùng như tên người dùng, mật khẩu và thông tin thẻ tín dụng. Nhưng có một vấn đề. Người dùng hoàn tất quá trình đăng nhập được gán một giá trị cookie mà không có cờ Bảo mật. Người dùng có thể có khóa phiên khi họ thực hiện yêu cầu HTTP đến các liên kết không phải HTTPS. Thêm cờ an toàn thật dễ dàng:
Set-Cookie: user=t=cdabe8a1c2153d726; path=/; Secure
Khi nào thì không nên sử dụng HttpOnly? Nếu bạn dựa vào Javascript, bạn nên cảnh giác vì điều này có thể làm cho trang web của bạn kém an toàn hơn.
Các bước nhỏ làm việc để bảo mật web rộng hơn
Bạn không cần kiến thức về phần mềm và máy chủ nâng cao để tăng tính bảo mật của các ứng dụng web. Chỉ cần thay đổi một vài dòng, bạn có thể ngăn chặn một số cuộc tấn công nghiêm trọng. Tất nhiên, điều này là không đủ. Tuy nhiên, đó là một bước nhỏ nhưng hiệu quả để bảo mật website. Kiến thức là cách phòng ngừa tốt nhất, vì vậy cũng rất hữu ích khi biết các sắc thái tinh tế của cách HTTPS bảo vệ dữ liệu trong quá trình truyền.