Thứ Sáu, 28 tháng 1, 2011

Bảo mật Session trong lập trình PHP

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 session fixation 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à sau dụ ngưòi dùng kích vào
Click here
Trong khi truy cấp thường hay lưu thông tin đăng nhập trong session. 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ản trị. 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àm session_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ấn công phổ biến khác như kiểu session hijacking. Đúng hơn là cái này là một cái chung 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êu cầu đầư được trợ giúp đặc biệt và không thay đổi giữa các yêu cầu đầu khác nhau. 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êu cầ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 được load 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 again exit;
}
Theo lập trình việt

0 nhận xét:

Đăng nhận xét