Bảo mật Session
Có hai kiểu tấn công session phổ biến nhất đó là session cố định(session fixation) và cướp session ( session hijacking) Khi một người triệu gọi trang web lần đầu tiên ứng dụng sẽ gọi session_start() để tạo ra sesion cho user. PHP sẽ tự động sinh ngẫu nhiên một định danh khác nhau cho mỗi ...
Có hai kiểu tấn công session phổ biến nhất đó là session cố định(session fixation) và cướp session ( session hijacking) Khi một người triệu gọi trang web lần đầu tiên ứng dụng sẽ gọi session_start() để tạo ra sesion cho user. PHP sẽ tự động sinh ngẫu nhiên một định danh khác nhau cho mỗi user. Và sau đó nó send tạo một trên cookies với tên mặc định là PHPSESSID bạn có thể thay đổi tên mặc định của nó bằng cách thay đổi nó trong php.ini hoặc dùng hàm session_name() .
Từ lần viếng thăm sau nó sẽ định danh user bằng cookies. Tuy nhiên có thểgán session qua chuỗi truy vấn. Đây là cách dễ ràng để tấn công sessionfixation bởi vì kẻ tấn công có thể thay đổi giá trị PHPSESSID.
Cách phổ biến là lưu trữ link trong ứng dụng của bạn nối thêm session id và saudụ ngưòi dùng kích vào ClickhereTrong khi truy cấp thường hay lưu thông tin đăng nhập trongsession. Nếu user đăng nhập vào với cùng session id thì kẻ tấn công cũng có thểtruy cập với session id đó vì vậy có thể truy cập vào thay đổi các thông tin account. Quan trọng hơn là nó sẽ tiến tới chiếm quyền điều khiển của những acount quảntrị.
Chúng ta có thể xuất tất cả các session id của tất cả các user bằng hàmsession_regenerate_id()
Mã:
session_start();
// If the user login is successful, regenerate the session ID if (authenticate()) {session_regenerate_id(); }
Cách làm trên chỉ bảo vệ user bởi cách tấn công session fixed và dễ dàng đềnghị truy cập của các kẻ tấn công . Nó không giúp chống lại được các kiểu tấncông phổ biến khác như kiểu session hijacking. Đúng hơn là cái này là một cáichung mà thời hạn mô tả bởi bất kì cái gì đó có nghĩa bởi các kẻ tấn công kiếmđược những session id của user hữu ích.
Ví dụ, một user tin rằng khi đăng nhập thì session id được định nghĩa lại và cómột session mới. cái gì sẽ sẩy ra nếu các kẻ tấn công mà phát hiện ID mới và cốgắng truy cập vào session của user ?
Session ID để định danh các yêu cầu khác nhau của các user khác nhau. một yêucầu đầư được trợ giúp đặc biệt và không thay đổi giữa các yêu cầu đầu khácnhau. nếu không chắc chắn(chiếm truờng hợp ít) user từ một trình duyệt có thểchuyển nó thành cái khác trong khi đang sử dụng cùng phiên làm việc. các yêucầu đầu để xác định rõ kiểu tấn công session hijacking.
Sau khi user đăng nhập lưu tác nhân user (User-Agent ) vào session:
$_SESSION[’user_agent’] = $_SERVER[’HTTP_USER_AGENT’]; Và sau đó khi trang đượcload lần hai kiểm tra chắc chắn rằng User-Agent không được thay đổi. Nếu nó bịthay đổi lên cho đăng nhập lại
Mã:
if ($_SESSION[’user_agent’] != $_SERVER[’HTTP_USER_AGENT’])
{
// Force user to log in againexit;
}