2010-12-28 38 views
19

Có được biết đến thuộc tính style tấn công XSS như:tấn công XSS và phong cách thuộc tính

<DIV STYLE="width: expression(alert('XSS'));"> 

Hoặc

<DIV STYLE="background-image: url(javascript:alert('XSS'))"> 

Tất cả các ví dụ I've seen sử dụng hoặc biểu hiện hoặc chức năng url - về cơ bản một cái gì đó chức năng như vậy đòi hỏi " ("và") ".

Tôi đang nghĩ đến việc phương pháp thẻ phong cách lọc sau đây, tôi sẽ kiểm tra chúng bằng sau (ước tính) ngữ pháp:

identifier: [a-zA-Z_][a-zA-Z0-9\-]* 
number: [0-9]+ 
string: '[a-zA-Z_0-9 ]*' 
value : identifier | number | string | number + "(em|px)" | number +"%" 
entry: identifier ":" value (\s value)* 
style: (entry ;)* 

Vì vậy, về cơ bản tôi cho phép tính ASCII với các giá trị số hoặc giá trị chuỗi rất hạn chế (về cơ bản cho tên phông chữ) không cho phép sử dụng bất kỳ thứ gì trông giống như cuộc gọi.

Câu hỏi này đủ hay chưa? Có bất kỳ cuộc tấn công nào có thể làm điều gì đó như vậy không:

<DIV STYLE="this-is-js-property: alert 'XSS';"> 

Và thành công?

Ai có thể nghĩ đến lỗ hổng XSS của thử nghiệm như vậy không?

Để Làm cho nó rõ ràng

tôi cần các thuộc tính kiểu như nhiều công cụ như TinyMCE sử dụng chúng và lọc vô hại phong cách thuộc tính tắt sẽ làm tổn thương đáng kể các chức năng.

Vì vậy, tôi thích vượt qua các trường hợp phổ biến xóa tất cả những thứ có thể sử dụng @import, url, biểu thức v.v. Và cũng đảm bảo rằng cú pháp css cơ bản là ok.

trả lời

Không nó không phải là an toàn do nhấp Jacking dễ bị tổn thương.

+1

công việc tốt, không biết nhiều –

Trả lời

9

Tính năng này không hoạt động do lỗ bấm dễ bị tổn thương.

Ví dụ:

<a href="http://example.com/attack.html" style="display: block; z-index: 100000; opacity: 0.5; position: fixed; top: 0px; left: 0; width: 1000000px; height: 100000px; background-color: red;"> </a> 

Tìm thấy tại: http://www.bioinformatics.org/phplabware/forum/viewtopic.php?id=164

Mã này sẽ được xác nhận một cách hoàn hảo nhưng nó có thể gây thiệt hại nghiêm trọng.

Quy tắc chung sử dụng danh sách trắng rất nghiêm ngặt hoặc không cho phép thuộc tính kiểu.

+0

Điểm tốt! Tôi nghĩ rằng chúng tôi có thể sử dụng X-Frame-Options để bảo vệ lỗ hổng bảo mật nhấp chuột ngày nay. – liweijian

3

Có một nền tảng mở có tên là OWASP giúp bạn thực hiện điều này.

Để trả lời câu hỏi của bạn Are there any attacks....; Vâng!

Có rất nhiều tài liệu ở đó và có các thư viện bạn có thể sử dụng để thoát đúng tất cả mã XSS.

Đọc số XSS prevention sheet.

+3

này, bạn có thể hài lòng cụ thể hơn? Bất kỳ ** tấn công ** cụ thể nào? Tôi đã tìm kiếm các trang web này và tôi đã không tìm thấy bất cứ điều gì mà sẽ cho phép để làm các cuộc tấn công như vậy bằng cách sử dụng định danh css, và chỉ số. Đó là lý do tôi hỏi. – Artyom

+0

Có rất nhiều cách mã hóa html. Bạn có thể sử dụng các thực thể HTML cho một. Tài liệu OWASP có tất cả các ví dụ, và các thư viện ở đó thoát đúng cách 'tất cả' possibilites –

+0

Thực thể HTML và các cách mã hóa" có dây "khác không được phép như bạn thấy trong ngữ pháp. " – Artyom

1

Quy tắc bảo mật # 1: Nếu bạn ít nghi ngờ nhất, hãy giả sử có lỗ.

Bạn đang cố gắng đạt được điều gì? Chức năng nào sẽ khiến CSS từ một nguồn không đáng tin cậy?

+0

có thể là trình soạn thảo wysiwyg bởi n người dùng không tin cậy? –

+0

Trong trường hợp của tôi, đó là một hệ thống thảo luận, nơi mọi người có thể đăng các nhận xét trong CommonMark + HTML và chúng có thể bao gồm các thuộc tính 'style = ...'. (Tôi không phải là poster gốc, tôi chỉ có một "vấn đề" tương tự.) – KajMagnus

0

Có, bạn có thể sử dụng các cuộc tấn công XSS với thuộc tính Kiểu.

Những phong cách được tiêm như chúng ta không có họ khai báo trong thẻ của chúng tôi trong một trang jsp đặc biệt nhưng khi đột phá vòng vây kiểm toán bởi nhóm bảo mật của chúng tôi:

<img src="<path here>" style=x:ex/**/pression 
(alert(54163)) ".gif" 

Tôi đang nghĩ đến việc sử dụng một bộ lọc HTTP để dừng lại ở đây, nhưng tôi vẫn nhìn vào nó.

Chúng tôi cũng không có lĩnh vực đầu vào ẩn của chúng tôi proteccted hoặc và điều này đột phá vòng vây cũng như:

<input type="hidden" name="<variable name here>" value="<value here>" style=x:ex/**/pression(alert 
(54163)) ""> 

Với một công cụ như Burpsuite, bạn có thể thay đổi yêu cầu một cách nhanh chóng để tiêm XSS vào thẻ như thế này . Tuy nhiên, với API ESAPI từ OWASP, bạn có thể thêm bảo vệ. Chúng tôi đã không sử dụng thẻ JSTL vì đó là mã cũ, vì vậy đó là giải pháp ngắn hạn tốt nhất.

Đối với thông tin nhập ẩn tôi đã sử dụng;

<input type="hidden" name="id" value="<%=ESAPI.encoder().encodeForHTMLAttribute(id)%>" 

Bạn cũng có thể sử dụng XSS with the js onload event in an img tag:

+0

Nhưng trong trường hợp thuộc tính và thuộc tính src của bạn không được thoát đúng cách, tức là chúng không thể không có dấu ngoặc kép và nội dung được mã hóa đúng cách. – Artyom

+0

XSS mà tôi hiển thị là những thứ thực sự có được thông qua mã js của chúng tôi. –

Các vấn đề liên quan