2011-06-30 36 views
10

Kết nối https có bảo mật cookie và ngăn chặn các cuộc tấn công XSS hay không. Tôi có một blog đơn giản cho phép người dùng nhập mã JavaScript làm đầu vào. Tôi muốn cho phép người dùng nhập Javascript trong khi vẫn ngăn chặn các cuộc tấn công XSS và ăn cắp cookie. Https có giúp cookie an toàn không. Tôi chỉ tìm thấy vài trang web nói về điều này và vẫn còn một chút không rõ ràng.Cookie bảo mật https có ngăn chặn các cuộc tấn công XSS không?

+0

Bản thân HTTPS không ngăn XSS. –

+0

Cho phép người dùng nhập Javascript là ** cực kỳ ** nguy hiểm. Rất khó để ngăn người dùng độc hại thực hiện một số điều rất khó chịu với người dùng khác của bạn. –

+0

@Cameron - cho dù đó là nguy hiểm hay không là không liên quan. Do các trình duyệt hỗ trợ giao thức giả và javascript * javascript * như Greasemonkey và Firebug cho phép người dùng chạy tập lệnh trong các trang, không thể ngăn người dùng chạy bất kỳ tập lệnh nào họ muốn trong các trang trong trình duyệt của họ hoặc bất kỳ tác nhân người dùng nào khác. – RobG

Trả lời

7

HTTPS có thể ngăn chặn một cuộc tấn công cấp trung gian chứ không phải XSS. Thật không may là cookie phiên không an toàn với điều này một mình, người ta có thể yêu cầu một trang với HTTP và sau đó cùng một cookie sẽ được gửi không được bảo vệ.

Để đảm bảo rằng các cookie phiên chỉ được gửi trên các kết nối HTTPS, bạn có thể sử dụng session_set_cookie_params function() trước khi bắt đầu phiên họp:

session_set_cookie_params(0, '/', '', true, true); 
session_start(); 

Lưu ý đầu tiên true, nó có nghĩa rằng cookie sẽ được gửi chỉ cho các trang HTTPS. true thứ hai cho trình duyệt biết, JavaScript đó không được truy cập cookie phiên, nó phụ thuộc vào trình duyệt nếu điều đó được thực hiện đúng.

Một cách hay khác để làm cho trang web của bạn an toàn hơn, chỉ sử dụng cookie phiên để duy trì phiên và sử dụng cookie thứ hai để quản lý xác thực. Tôi có thể cung cấp một ví dụ nếu bạn quan tâm.

+0

Có chắc chắn, hiển thị một ví dụ. Theo câu trả lời của bạn, nếu cookie phiên bị buộc phải đi qua kết nối https, thì chúng tôi có thể nói rằng nó an toàn khỏi các cuộc tấn công xss. – Hussein

+0

@Hussein - Cookie phiên không phải là một phần của một cuộc tấn công XSS, một lời giải thích tốt về XSS bạn có thể tìm thấy ở đây: http://shiflett.org/articles/cross-site-scripting. Ví dụ tôi đã viết mô tả cách sử dụng các trang HTTP và HTTPS hỗn hợp, nhưng nó cũng cho thấy cách giữ phiên và xác thực riêng biệt http://www.martinstoeckli.ch/php/php.html#ssl_nomim_cookie. Cookie phiên sẽ luôn là mục tiêu của các cuộc tấn công. – martinstoeckli

+0

Cảm ơn @martin, Thông tin rất hữu ích trong bài viết của bạn. – Hussein

4

Giao thức HTTP (HTTPS hoặc HTTP) không hỗ trợ XSS hoặc thực sự có bất kỳ mối quan hệ nào. Bạn sẽ cần phải thêm các biện pháp phòng ngừa và cẩn thận nơi bạn xuất javascript cho khách hàng.

+0

@comm @cwa @jake cảm ơn. Giả sử chúng tôi muốn người dùng nhập mã quảng cáo Google vào blog. Mã Google là javascript. Chúng tôi không thể tách javascript ra vì nó là cần thiết. Nếu chúng ta cho phép javascript thì chúng ta sẽ mở ra nhiều lĩnh vực tấn công xss. Giải pháp cho điều này là gì. Tôi chắc chắn có một cách để đi về điều này. – Hussein

1

Khi bạn đã cho phép ai đó lưu trữ động và thực thi JavaScript tùy ý trên trang web của mình, họ có quyền truy cập vào nhiều nội dung bạn muốn họ để lại một mình. Ở mức tối thiểu, họ có thể chiếm đoạt ID phiên PHP của bạn (sau này họ sẽ có quyền truy cập vào cookie của bạn) và sau đó sử dụng Ajax để chuyển tiếp nó tới một số máy chủ từ xa. Một khi họ có điều đó, họ có thể làm tất cả những thứ vớ vẩn với người dùng của bạn.

Nếu bạn để cho phép họ thêm JavaScript của riêng mình, tôi khuyên bạn nên vô hiệu hóa tất cả các chức năng Ajax (XMLHTTPRequest = function(){} ngăn tất cả Ajax dễ dàng trên hầu hết các trình duyệt, nhưng bạn có thể cần xem xét những gì IE cần không biết ActiveXObject = function(){} sẽ làm gì ...)). Rất tiếc, bạn không thể ngăn truy cập vào cookie nếu bạn có bất kỳ kỳ vọng nào về việc sử dụng chúng (tức là nếu bạn có phiên), vì vậy bạn sẽ cần tìm một số cách giải quyết khác.

1

Nếu bạn muốn người dùng có thể nhập JavaScript , nhưng không được phân tích cú pháp, hãy chạy nó qua htmlspecialchars. Nếu bạn muốn họ có thể thực thi mã, thì không, HTTPS sẽ không giúp bạn, và bạn sẽ cần phân tích mã và xóa bất kỳ thứ gì xấu khỏi mã.

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