Tại sao iframe được coi là nguy hiểm và là rủi ro bảo mật? Ai đó có thể mô tả một ví dụ về một trường hợp mà nó có thể được sử dụng một cách ác ý không?
Tại sao iframe được coi là nguy hiểm và là rủi ro bảo mật? Ai đó có thể mô tả một ví dụ về một trường hợp mà nó có thể được sử dụng một cách ác ý không?
Câu trả lời:
Ngay sau khi bạn hiển thị nội dung từ một miền khác, về cơ bản bạn tin tưởng rằng miền đó không chứa phần mềm độc hại.
Không có gì sai với iframe. Nếu bạn kiểm soát nội dung của iframe, chúng hoàn toàn an toàn.
<iframe>
phần tử) có kiểu dáng phù hợp và gợi ý iframe chứa nội dung không đáng tin cậy, không có vấn đề gì. Tất nhiên, các lỗ hổng thực tế của Modulo trong trình duyệt. Trong ngắn hạn, an <iframe>
là khoảng an toàn như a <a href>
.
<iframe>
khỏi cùng một miền có thể gây ra rủi ro bảo mật nếu kẻ tấn công có thể sửa đổi nội dung bên trong iframe ẩn. Điều đó sẽ cho phép kẻ tấn công mở rộng cuộc tấn công XSS bên trong ẩn <iframe>
đến bất kỳ trang nào trên trang web của bạn đề cập đến <iframe>
nội dung d đã nói . Xem stackoverflow.com/a/9428051/334451 để biết chi tiết.
Phần IFRAME
tử có thể là một rủi ro bảo mật nếu trang web của bạn được nhúng bên trong một IFRAME
trang web thù địch . Google "clickjacking" để biết thêm chi tiết. Lưu ý rằng nó không quan trọng nếu bạn sử dụng <iframe>
hay không. Cách bảo vệ thực sự duy nhất khỏi cuộc tấn công này là thêm tiêu đề HTTP X-Frame-Options: DENY
và hy vọng rằng trình duyệt biết công việc của nó.
Ngoài ra, phần tử IFRAME có thể là một rủi ro bảo mật nếu bất kỳ trang nào trên trang web của bạn chứa lỗ hổng XSS có thể bị khai thác . Trong trường hợp đó, kẻ tấn công có thể mở rộng cuộc tấn công XSS sang bất kỳ trang nào trong cùng một miền có thể được thuyết phục tải trong một <iframe>
trang có lỗ hổng XSS. Điều này là do nội dung từ cùng một nguồn gốc (cùng một miền) được phép truy cập DOM nội dung mẹ (thực tế thực thi JavaScript trong tài liệu "máy chủ"). Các phương pháp bảo vệ thực sự duy nhất khỏi cuộc tấn công này là thêm tiêu đề HTTP X-Frame-Options: DENY
và / hoặc luôn mã hóa chính xác tất cả dữ liệu do người dùng gửi (nghĩa là không bao giờ có lỗ hổng XSS trên trang web của bạn - nói thì dễ hơn làm).
Đó là mặt kỹ thuật của vấn đề. Ngoài ra, có vấn đề về giao diện người dùng. Nếu bạn dạy người dùng của mình tin tưởng rằng thanh URL sẽ không thay đổi khi họ nhấp vào liên kết (ví dụ: trang web của bạn sử dụng iframe lớn với tất cả nội dung thực tế), thì người dùng sẽ không nhận thấy bất kỳ điều gì trong tương lai trong trường hợp bảo mật thực sự sự dễ bị tổn thương. Ví dụ: bạn có thể có lỗ hổng XSS trong trang web của mình cho phép kẻ tấn công tải nội dung từ nguồn thù địch trong iframe của bạn. Không ai có thể phân biệt được vì thanh URL trông vẫn giống với hành vi trước đó (không bao giờ thay đổi) và nội dung "có vẻ" hợp lệ mặc dù đó là từ miền thù địch yêu cầu thông tin đăng nhập của người dùng.
Nếu ai đó tuyên bố rằng việc sử dụng một <iframe>
phần tử trên trang web của bạn là nguy hiểm và gây ra rủi ro bảo mật, thì người đó không hiểu <iframe>
phần tử đó có tác dụng gì hoặc anh ta đang nói về khả năng xuất hiện các <iframe>
lỗ hổng liên quan trong trình duyệt. Bảo mật của <iframe src="...">
thẻ ngang bằng <img src="..."
hoặc <a href="...">
miễn là không có lỗ hổng trong trình duyệt. Và nếu có một lỗ hổng bảo phù hợp, nó có thể là có thể kích hoạt nó ngay cả khi không sử dụng <iframe>
, <img>
hoặc <a>
yếu tố, do đó, nó không đáng kể cho vấn đề này.
Tuy nhiên, hãy lưu ý rằng nội dung từ <iframe>
có thể bắt đầu điều hướng cấp cao nhất theo mặc định . Nghĩa là, nội dung bên trong <iframe>
được phép tự động mở liên kết qua vị trí trang hiện tại (vị trí mới sẽ hiển thị trong thanh địa chỉ). Cách duy nhất để tránh điều đó là thêm sandbox
thuộc tính mà không có giá trị allow-top-navigation
. Ví dụ <iframe sandbox="allow-forms allow-scripts" ...>
,. Thật không may, sandbox cũng luôn vô hiệu hóa tất cả các plugin. Ví dụ: không thể sandbox nội dung Youtube vì trình phát Flash vẫn được yêu cầu để xem tất cả nội dung Youtube. Không có trình duyệt nào hỗ trợ sử dụng plugin và không cho phép điều hướng cấp cao nhất cùng một lúc.
Lưu ý rằng điều đó X-Frame-Options: DENY
cũng bảo vệ khỏi cuộc tấn công kênh bên hiệu suất hiển thị có thể đọc nội dung chéo nguồn gốc (còn được gọi là "Cuộc tấn công định thời điểm hoàn hảo ").
"This is because content from the same origin (same domain) is allowed to access the parent content DOM (practically execute JavaScript in the "host" document)."
nên diễn đạt lại theo hướng của tài liệu (cha) có chứa lỗ hổng XSS đối với tài liệu (con) trong iframe?
<iframe>
trên một trang, nó cho phép mở rộng lỗ hổng bảo mật từ nội dung bên trong iframe sang tài liệu lưu trữ. Câu hỏi là về <iframe>
sự nguy hiểm và nếu tài liệu lưu trữ có lỗ hổng XSS, bạn thực sự không cần <iframe>
phần tử.
Tôi giả định iFrame tên miền chéo vì có lẽ rủi ro sẽ thấp hơn nếu bạn tự kiểm soát nó.
"Nguy hiểm" và "Rủi ro bảo mật" không phải là những điều đầu tiên mà mọi người nghĩ đến khi nhắc đến iframe… nhưng chúng có thể được sử dụng trong các cuộc tấn công bằng clickjacking .
iframe cũng dễ bị tấn công bởi Cross Frame Scripting: