2013-04-09 51 views
22

Tôi khóa địa chỉ ip.Địa chỉ IP bị khóa PHP

Điều này có nghĩa là người dùng chỉ có thể đăng nhập bằng cùng địa chỉ IP không? Hay người dùng sẽ đăng xuất và phải đăng nhập lại để có phiên mới?

if (isset($_SESSION['last_ip']) === false) { 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
} 

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 

Trả lời

13

Mã này sẽ xóa phiên (đăng xuất) nếu địa chỉ IP của người dùng thay đổi.

Vì vậy, người dùng có thể đăng nhập từ bất kỳ địa chỉ IP nào, nhưng sẽ bị đăng xuất nếu thay đổi.

Điều này có thể hoạt động để ngăn chặn việc chiếm đoạt phiên, nhưng nó sẽ không hoạt động tốt nếu bạn đang sử dụng IP động vì IP của bạn sẽ tiếp tục thay đổi.

+0

nếu phiên bị xóa, người dùng sẽ có thể nhận phiên mới từ ip mới nếu họ đăng nhập –

+0

Có, họ sẽ làm. – Halcyon

+0

tôi có thêm session_regenerate_id (true); Vậy 2 cái này hoạt động như thế nào? –

8

. Nếu IP của người dùng thay đổi, anh ta sẽ bị đăng xuất. Mặc dù kẻ tấn công vẫn có thể bắt chước IP nếu anh ta biết, vì vậy nó không hoàn toàn an toàn. Hãy nhìn vào các trang này để biết thêm thông tin về làm thế nào để ngăn chặn phiên tặc:

Tôi cũng muốn khuyên bạn nên Chris Shiflett. bài viết của mình trên phiên tặc có thể được tìm thấy ở đây:

http://shiflett.org/articles/session-hijacking

1
if (isset($_SESSION['last_ip']) === false) { 
    $_SESSION['last_ip'] = $_SERVER['REMOTE_ADDR']; 
} 

Trên đang có nghĩa là nếu phiên "last_ip" chưa được tạo, nó sẽ được tạo ra và lưu trữ giá trị của ip hiện tại của người dùng.

if ($_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 

Trên đang chỉ ra rằng nếu giá trị phiên họp của "last_ip" không bằng ip hiện tại của bạn, nó sẽ giải phóng tất cả các biến phiên (session_unset) và phá hủy tất cả dữ liệu đăng ký một phiên (session_destroy).

Hãy mô tả kịch bản thực tế.

ví dụ: Tôi truy cập vào trang web của bạn để khối mã lưu trữ ip hiện tại của tôi. Bây giờ internet của tôi đã bị ngắt kết nối và tôi kết nối lại với isp của tôi trong đó có dhcp kích hoạt và cung cấp cho ip mới tôi. Vì vậy, nếu truy cập vào trang web của bạn một lần nữa, khối thứ hai kiểm tra mã mà tôi có IP khác nhau vì vậy nó sẽ đăng xuất tôi.

Cũng chỉnh sửa khối thứ hai của mã này để nếu phiên "last_ip" chưa được tạo, nó sẽ không ném thông báo php.

if (isset($_SESSION['last_ip']) && $_SESSION['last_ip'] != $_SERVER['REMOTE_ADDR']){ 
    session_unset(); 
    session_destroy(); 
} 
Các vấn đề liên quan