2010-09-03 33 views
6

Tôi mới sử dụng ColdFusion, vì vậy tôi không chắc liệu có cách nào dễ dàng để thực hiện việc này hay không. Tôi đã được chỉ định để sửa các lỗ hổng XSS trên toàn bộ trang web CF này. Thật không may, có rất nhiều trang đang sử dụng đầu vào của người dùng, và nó sẽ gần như không thể đi vào và sửa đổi tất cả.Ngăn chặn các cuộc tấn công XSS trên toàn trang web

Có cách nào (trong CF hoặc JS) để dễ dàng ngăn chặn các cuộc tấn công XSS trên toàn bộ trang web không?

+1

Lưu ý rằng bạn muốn ngăn chặn nó bằng cách sử dụng ngôn ngữ lập trình phía máy chủ/khuôn khổ, không sử dụng phía khách hàng (như JS). Các ngôn ngữ phía máy khách cụ thể là khách hàng không thể sửa chữa, có thể tấn công và giả mạo. – BalusC

+0

xin vui lòng xem: http://www.petefreitag.com/item/759.cfm – Henry

Trả lời

35

Tôi ghét phải phá vỡ nó ra cho bạn, nhưng -

  1. XSS là một vấn đề đầu ra, không một vấn đề Input. Lọc/Xác thực đầu vào là một lớp bảo vệ bổ sung, nhưng nó không bao giờ có thể bảo vệ bạn hoàn toàn khỏi XSS. Hãy xem XSS cheatsheet by RSnake - có quá nhiều cách để thoát khỏi bộ lọc.
  2. Không có cách nào dễ dàng để khắc phục ứng dụng cũ. Bạn phải mã hóa chính xác mọi thứ mà bạn đặt vào tệp html hoặc javascript của mình và điều đó có nghĩa là xem lại mọi đoạn mã tạo html.

Xem OWASP's XSS prevention cheat sheet để biết thông tin về cách phòng ngừa XSS.


Một số nhận xét bên dưới cho thấy xác thực đầu vào là chiến lược tốt hơn là mã hóa/thoát tại thời điểm xuất. Tôi sẽ chỉ trích dẫn từ OWASP's XSS prevention cheat sheet -

Thông thường, xác thực đầu vào là phương pháp ưu tiên để xử lý dữ liệu không đáng tin cậy. Tuy nhiên, xác nhận đầu vào không phải là một giải pháp tuyệt vời cho các cuộc tấn công tiêm. Đầu tiên, xác thực đầu vào thường được thực hiện khi nhận được dữ liệu, trước khi đích được biết. Điều đó có nghĩa là chúng ta không biết nhân vật nào có thể có ý nghĩa trong trình thông dịch đích. Thứ hai, và thậm chí quan trọng hơn, các ứng dụng phải cho phép các ký tự có khả năng gây hại. Ví dụ, người nghèo O'Malley có thể ngăn chặn việc đăng ký trong cơ sở dữ liệu đơn giản chỉ vì SQL coi 'một nhân vật đặc biệt?

Để xây dựng - khi người dùng nhập chuỗi như O'Malley, bạn không biết mình có cần chuỗi đó bằng javascript hay bằng html hay bằng một số ngôn ngữ khác. Nếu trong javascript của nó, bạn phải hiển thị nó như là O\x27Malley và nếu nó ở dạng HTML, nó sẽ trông giống như O'Malley. Đó là lý do tại sao nó được đề nghị trong cơ sở dữ liệu của bạn chuỗi nên được lưu trữ chính xác cách người dùng nhập, và sau đó bạn thoát nó một cách thích hợp theo đích cuối cùng của chuỗi.

+0

Bạn đang nói về cái gì? Nó không quan trọng nếu bạn lọc trên đầu vào hoặc đầu ra. Cuối cùng nếu bạn đã lọc trên đầu vào, sau đó đầu ra sẽ là tốt HOẶC bạn có thể lưu trữ nó thô và lọc nó trên mọi yêu cầu mà dường như lãng phí. – Klinky

+4

@Klinky - Xem câu trả lời cập nhật của tôi. Lọc đầu vào * giúp *, nhưng không phải là giải pháp chắc chắn cho XSS. –

+0

Điểm tốt, cập nhật của bạn và thực sự đọc OWASP chi tiết hơn làm cho nó rõ ràng hơn một chút lý do tại sao thoát trên đầu ra sẽ được thuận lợi và linh hoạt hơn. Tôi vẫn sẽ nói xác nhận là một yêu cầu về những thứ có thể được xác nhận hiệu quả, ví dụ bạn không muốn chấp nhận đầu vào của người dùng của một chuỗi khi db hoặc javascript của bạn sẽ được mong đợi một số nguyên. Đó sẽ không phải là một vấn đề XSS mặc dù. – Klinky

0

ColdFusion 9 Livedocs mô tả cài đặt được gọi là "scriptProtect" cho phép bạn sử dụng bảo vệ của coldfusion. Tôi chưa sử dụng nó, vì vậy tôi không chắc nó hiệu quả như thế nào.

Tuy nhiên, nếu bạn triển khai một bên thứ ba hoặc phương pháp xử lý riêng của bên thứ ba, bạn có thể muốn đặt nó trong sự kiện "onRequestStart" của ứng dụng để cho phép nó xử lý toàn bộ trang web khi nói đến Vi phạm phạm vi URL và FORM (vì mọi yêu cầu sẽ thực thi mã đó).

+3

không phải là rất hiệu quả, không may. – Henry

1

Một điều bạn nên xem là triển khai tường lửa ứng dụng như Portcullis: http://www.codfusion.com/blog/page.cfm/projects/portcullis bao gồm một hệ thống mạnh hơn nhiều khi được xây dựng trong scriptProtect dễ bị đánh bại.

Đây là điểm khởi đầu tốt để ngăn chặn nhiều cuộc tấn công nhưng đối với XSS bạn sẽ kết thúc bằng tay và xác minh rằng bạn đang sử dụng những thứ như HTMLEditFormat() trên bất kỳ đầu ra nào có thể được chạm vào bởi phía máy khách hoặc dữ liệu khách hàng để ngăn chặn xuất mã html/js hợp lệ.

0

Bên cạnh đó áp dụng tất cả các bản sửa lỗi nóng ColdFusion và các bản vá lỗi, bạn cũng có thể:

  1. bằng chứng Không đầy đủ nhưng giúp, Đặt sau đây theo CFADMIN> Cài đặt> "Enable Protection Script toàn cầu"
  2. Thêm CSRFToken để bạn hình thức http://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet
  3. Kiểm tra http Referer
  4. Thêm xác nhận cho tất cả các đầu vào tài khoản
  5. sử dụng cfqueryparam cho truy vấn của bạn
  6. Add HTMLEditFormat() trên bất kỳ đầu ra
  7. Bên cạnh blog xuất sắc Peter Freitag của bạn cũng nên đăng ký để Jason Dean của http://www.12robots.com
Các vấn đề liên quan