2012-05-29 36 views
5

Tôi đang cố gắng tìm ra cách ngăn chặn việc chiếm đoạt phiên. Dưới đây là những gì tôi đang nghĩ đến:PHP Kiểm tra tác nhân người dùng và IP để ngăn chặn tấn công phiên

Cùng với phiên id người dùng, hãy thêm tác nhân người dùng và phiên IP người dùng. Mỗi khi một trang được tải, các phiên này sẽ được kiểm tra để xem liệu chúng có phù hợp không - liệu điều này có đủ không? Ví dụ:

<?php 

$userIp = $_SESSION['userIp']; 
$userAgent = $_SESSION['userAgent']; 

if ($userIp != $_SERVER['REMOTE_ADDR'] || $userAgent != $_SERVER['HTTP_USER_AGENT'] { 
    session_destroy(); 
} 

?> 

Cảm ơn.

Trả lời

11

Nó phức tạp hơn thế nhiều. Trang web/dịch vụ của bạn sẽ được truy cập bởi nhiều người với các thiết lập khác nhau. Điều đầu tiên mà có thể đi sai là nếu ai đó đang đi qua một máy chủ proxy. IP mà ứng dụng của bạn sẽ thấy có thể thay đổi và phiên sẽ phá vỡ ngay cả đối với người dùng hợp lệ.

Nếu bạn hoàn toàn cần làm điều gì đó với IP, hầu hết những gì bạn có thể làm mà không nhận được quá nhiều xác thực sai là kiểm tra quốc gia/vùng có nguồn gốc. Nếu bạn phát hiện một thông tin đăng nhập từ Canada và một thông tin đăng nhập khác từ Ấn Độ, có thể có vấn đề. Thậm chí sau đó, nó không phải là bằng chứng ngu ngốc.

Tác nhân người dùng cũng quá dễ giả mạo: nếu tôi có thể nhận được PHPSESSIONID của ai đó, thì tôi chắc chắn có thể nhận được Tác nhân người dùng của họ. Vì vậy, không có nhiều đã được thực hiện ở đây.

Cách tốt nhất để bảo vệ phiên của ai đó là đặt mọi thứ được xác thực sau HTTPS và đảm bảo rằng cookie phiên chỉ là HTTPS.

EDIT: Nếu nói đến điểm dữ liệu bạn bảo vệ sau phiên là cực kỳ nhạy cảm và người dùng của bạn cần biết điều đó, bạn luôn có thể hiển thị cho họ các phiên khác đã đăng nhập người dùng. Điều tương tự cũng được thực hiện bởi GMail chẳng hạn.

+0

Cảm ơn câu trả lời. Tôi không quá bận tâm về điểm đầu tiên phải trung thực, nhưng thứ hai của bạn là hợp lệ. Nếu tôi không thể tìm ra cách để ngăn chặn điều này, tôi sẽ chỉ sử dụng HTTPS. –

+1

Cảm ơn! Nhân tiện, bất cứ lựa chọn nào bạn quyết định đi cùng, tôi luôn đề xuất thêm HTTPS lên hàng đầu. Sự gia tăng của các điểm truy cập Wi-Fi công cộng có nghĩa là mọi thứ không có HTTPS sẽ mở ra cho mọi người xem. –

+0

Vì bạn chỉ muốn sử dụng http, tên người dùng và mật khẩu của người dùng của bạn đã có thể nhận được bởi tin tặc nếu người dùng không sử dụng vpn. Thậm chí không cần phải suy nghĩ cho phiên. –

1

Tôi đồng ý với z42

cũng tôi muốn đề nghị một cách tiếp cận, mọi một thông tin đăng nhập người sử dụng thành công vào trang web của bạn bạn có thể tạo một MUỐI và lưu nó trong một phiên và trong là tốt db của bạn, và tạo điều kiện để kiểm tra xem người dùng đã đăng nhập hay chưa, với điều này bạn không thể ngăn nhiều người dùng đăng nhập bằng cùng một tài khoản nhiều lần và hủy SALT khỏi db khi người dùng đăng xuất.

+0

Cảm ơn bạn đã đề xuất, rất hữu ích! Tôi chắc chắn sẽ sử dụng kỹ thuật này. –

+1

Bạn hoan nghênh. :) –

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