2008-10-27 25 views
6

Tôi có trình chỉnh sửa văn bản đa dạng trên trang web của mình mà tôi đang cố gắng bảo vệ chống lại các cuộc tấn công XSS. Tôi nghĩ rằng tôi có khá nhiều thứ được xử lý, nhưng tôi vẫn không chắc chắn về việc phải làm gì với hình ảnh. Ngay bây giờ tôi đang sử dụng regex sau đây để xác nhận URL hình ảnh, mà tôi giả định sẽ chặn inline javascript tấn công XSS:Viết kịch bản chéo từ một Hình ảnh

"https?://[-A-Za-z0-9+&@#/%?=~_|!:,.;]+" 

Những gì tôi không chắc chắn về là cách mở này rời khỏi tôi để tấn công XSS từ hình ảnh từ xa. Liên kết tới một hình ảnh bên ngoài có phải là mối đe dọa bảo mật nghiêm trọng không?

Điều duy nhất tôi có thể nghĩ là URL đã nhập tham chiếu đến tài nguyên trả về "text/javascript" làm loại MIME thay vì một số loại hình ảnh và sau đó javascript đó được thực thi.

Điều đó có khả thi không? Có bất kỳ mối đe dọa bảo mật nào khác mà tôi nên cân nhắc không?

+2

tôi cũng khuyên các cheat sheet ha.ckers.org: ha.ckers.org/xss.html –

Trả lời

4

Một điều đáng lo ngại là bạn có thể dễ dàng nhúng mã PHP bên trong hình ảnh và tải lên phần lớn thời gian. Điều duy nhất một cuộc tấn công sau đó sẽ phải có khả năng làm là tìm một cách để bao gồm hình ảnh. (Chỉ có mã PHP sẽ được thực hiện, phần còn lại chỉ được lặp lại). Kiểm tra kiểu MIME sẽ không giúp bạn với điều này bởi vì kẻ tấn công có thể dễ dàng tải lên một hình ảnh với đúng vài byte đầu tiên, tiếp theo là mã PHP tùy ý. (Điều này cũng đúng với mã HTML và Javascript).

+0

người tôi không để Đăng tải hình ảnh. Người dùng chỉ được phép liên kết đến hình ảnh trên các trang web khác vì những lý do như những gì bạn đã đề cập. –

+0

Bộ lọc tên tệp đơn giản có ngăn chặn điều này không? – AaronSieb

+0

@AaronSieb, không vì bạn có thể, ví dụ: nhúng mã PHP vào một khay GIF và tải lên hình ảnh GIF hoàn toàn hợp lệ với loại tệp chính xác và loại mime. Vấn đề là, miễn là tôi có thể thao tác các trang web để làm bao gồm ("my_uploaded_gif.gif") bạn đang gặp rắc rối. Ngoài ra, hãy xem điều% 00. –

1

Trong trường hợp đó, hãy xem ngữ cảnh xung quanh: người dùng chỉ cung cấp URL? Trong trường hợp đó, bạn chỉ cần xác nhận hợp lệ ngữ nghĩa của URL và kiểu MIME. Nếu người dùng cũng nhận được thẻ đầu vào của một số loại, bạn sẽ phải chắc chắn rằng họ không thể thao túng để làm bất cứ điều gì khác sau đó hiển thị hình ảnh.

2

Nếu người xem cuối ở trong khu vực được bảo vệ bằng mật khẩu và ứng dụng của bạn chứa Url bắt đầu hành động dựa trên yêu cầu GET, bạn có thể thực hiện yêu cầu thay mặt người dùng.

Ví dụ:

  • src = "http://yoursite.com/deleteuser.xxx?userid=1234"
  • src = "http://yoursite.com/user/delete/1234 "
  • src =" http://yoursite.com/dosomethingdangerous"
+0

Tôi có thực sự dễ bị tổn thương đến điều đó không? Regex của tôi chỉ cho phép http/https ở đầu URL, vì vậy Javascript (hoặc bất kỳ mã hóa nào của nó) không được phép vượt qua, hoặc tôi có sai không? –

+0

Rất tiếc, đã quên 'https?: // '. Tôi sẽ chỉnh sửa câu trả lời của mình. –

+0

Bởi REST chúng tôi không bao giờ viết bất cứ điều gì với GET ... – inf3rno

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