2010-04-22 46 views
9

tôi có trang web sử dụng cookie phiên để bảo mật. nó hoạt động tốt và tất cả, nhưng bất kỳ yêu cầu ajax nào bây giờ đều không an toàn. ví dụ cho phép người dùng nói trên một trang. họ chỉ có thể truy cập trang này nếu họ đăng nhập bằng phiên - cho đến nay rất tốt. nhưng bây giờ yêu cầu ajax họ yêu cầu làĐảm bảo yêu cầu ajax

ajaxpages/somepage.php?somevar=something&anothervar=something 

nếu bất kỳ người dùng khác quyết định chỉ cần vào liên kết mà bản thân (mà không có một phiên) họ vẫn nhận được đầu ra ajax cùng cái đĩa dành cho đăng nhập vào con người.

vì vậy rõ ràng là im sẽ phải chuyển dữ liệu phiên qua khi tôi gửi yêu cầu ajax. bất cứ ai có bất kỳ lời khuyên cho cách tốt nhất để làm điều này? ive chưa bao giờ làm điều này trước đây và thay vào đó sẽ sử dụng các phương thức đáng tin cậy hơn là tạo nên phương thức của riêng tôi.

Trả lời

5

Yêu cầu ajax hoạt động giống như bất kỳ yêu cầu nào khác đối với trang web của bạn và phải trả về cùng cookie phiên như yêu cầu không phải là yêu cầu. Điều này được chỉ ra trong this question. Nếu bạn không nhận được cookie phiên, có lẽ cái gì khác là sai.

+0

tôi cần trợ giúp, tránh nhận xét trùng lặp, vui lòng tham khảo ý kiến ​​của Rook XD thanks kibbee –

2

Sử dụng cùng một kiểm tra bảo mật trên các trang xử lý yêu cầu ajax.

2

Vì đó là một trang PHP, tôi không thấy lý do tại sao bạn không thể thực hiện xác thực ở phía PHP. Nếu xác thực thành công, hãy gửi lại dữ liệu. Nếu không, hãy gửi lại một thông báo lỗi. AJAX không khác với bất kỳ yêu cầu nào khác.

4

Có đầu ra ajax không nhất thiết là lỗ hổng. Nó hoàn toàn phụ thuộc vào dữ liệu nào đang được truyền đi. Tôi không chắc bạn đang sử dụng nền tảng nào, nhưng hầu hết các nền tảng phát triển ứng dụng web đều có biến phiên có thể duy trì trạng thái giữa các yêu cầu.

Những gì bạn nên có tại chỗ là cách đánh dấu người dùng như đang đăng nhập từ phía máy chủ. Tôi php này sẽ như thế nào:

if(login($user,$password)){ 
    $_SESSION['logged_in']=true; 
} 

Sau đó, bạn có thể kiểm tra trong một tập tin tiêu đề nếu họ được phép truy cập vào trang:

if(!$_SESSION['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

(Nếu một biến không được thiết lập nó cũng là sai .)

Có một vài điều bạn cần lưu ý. Đây là một lỗ hổng:

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

Người dùng có thể kiểm soát $ _COOKIE, để họ có thể cho bạn biết rằng họ đang đăng nhập

Một lỗ hổng:.

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
} 

header() không giết kịch bản. Trong thực tế nó vẫn chạy, vì vậy nó vẫn sẽ xuất ra nhưng nó sẽ không được hiển thị trong trình duyệt, bạn vẫn có thể sử dụng netcat/telnet/wireshark để xem dữ liệu.

+0

tôi có câu hỏi ở đây, tôi không nghĩ rằng cần tạo câu hỏi SO mới. XD tôi thường sử dụng lối ra ;. vì vậy trong trường hợp này, sử dụng chết tốt hơn hoặc thoát ra tốt hơn? bất kỳ đề nghị cho tôi để đọc? về sự khác biệt giữa chết và lối ra. cảm ơn. và một nữa, tôi đang bối rối, nếu chỉ kiểm tra người dùng đăng nhập, điều này có dễ bị xss không? vì ai cũng có thể lừa người dùng đã đăng nhập vào trang web xss để lấy dữ liệu. hoặc tôi hoàn toàn sai về xss.cảm ơn lần nữa Rook XD –

+0

@Tian Loon tôi không biết bạn đang hỏi gì. Tại sao có sự khác biệt giữa chết và lối ra? Hoặc giữa echo và in? Có, xss có thể được sử dụng để chiếm quyền điều khiển phiên. Bài đăng của tôi không liên quan gì đến xss. – rook

+0

oops. cảm ơn, tôi chỉ tìm thấy http://stackoverflow.com/a/1795031/805373 giải thích việc chết và thoát là như nhau. hiểu rồi. cảm ơn ROok –

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