2010-04-11 41 views
7

Trong khi tôi đang đọc về các bài viết chiếm quyền điều khiển phiên, tôi đã biết rằng sẽ tốt hơn nếu mã hóa giá trị id phiên được lưu trữ trong cookie.Làm cách nào để mã hóa id phiên trong cookie?

Theo như tôi biết, khi tôi bắt đầu phiên bằng cách gọi session_start(), PHP không mã hóa giá trị id phiên trong cookie.

Làm cách nào để mã hóa giá trị id phiên và sau đó khởi tạo phiên với nó?

+0

Ai đó có thể xóa thẻ 'phiên mã hóa 'không? –

+0

@smotchkiss // Tôi cũng đang nghĩ về nó. Xin lỗi vì tên thẻ mơ hồ. – Moon

+0

Tôi biết điều này không trả lời câu hỏi của bạn mỗi lần nói. Nhưng bạn đã xem xét việc lưu trữ IP cùng với ID phiên và kiểm tra IP khi đọc phiên. Bằng cách này, bạn có thể chắc chắn rằng máy tính đang cung cấp id phiên là giống như bạn đã phát hành phiên. – Voltin

Trả lời

18

Mã hóa sẽ không hữu ích. Cookie phiên chỉ là một số ma thuật. Mã hóa nó chỉ có nghĩa là có một số ma thuật khác nhau để cướp. Tùy thuộc vào những tình huống tấn công bạn có trong tâm trí, có những giảm nhẹ khác có thể xảy ra. Ví dụ: bạn có thể giới hạn phiên thành một IP duy nhất. Tuy nhiên, điều đó đặt ra một số vấn đề, ví dụ: người chuyển đổi giữa các điểm không dây.

+0

Chỉ cần (hy vọng) làm rõ cho OP - phiên * trong đó cookie được chuyển vẫn nên được mã hóa và cờ cookie HTTPOnly nên được đặt để ngăn việc truyền của nó qua các kênh không được mã hóa. Mã hóa đúng cách kênh truyền dẫn mà cookie phiên được vận chuyển khiến cho kẻ tấn công khó chặn cookie hơn. – atk

+0

Câu hỏi đặt ra là mã hóa chính coookie, tức là giá trị được trình duyệt lưu trữ. Tôi đồng ý mã hóa lưu lượng truy cập là đáng giá đối với một số ứng dụng nhất định. Tôi nghĩ bạn có nghĩa là cờ an toàn, không phải (chỉ) HTTPOnly. –

+0

Cảm ơn. Câu trả lời này đã giúp hiểu được miền vấn đề. Bây giờ tôi có một giải pháp trong https và nơi id phiên được thay thế cho mọi yêu cầu. – nalply

3

Giả sử cookie phiên của bạn là GUID, không có điểm mã hóa nó. Nó sẽ chỉ thay thế một chuỗi giả ngẫu nhiên với chuỗi khác.

1

Thật không may khi mã hóa ID phiên sẽ không tăng cường bảo mật nhiều, vì kẻ tấn công chỉ có thể sử dụng biểu mẫu đã mã hóa (đó là điều duy nhất hiển thị với chúng).

Điều duy nhất điều này có thể ngăn chặn là mẹo bạn gửi liên kết đến ai đó? PHPSESSID = foo trong đó, điều này sẽ khiến PHP tạo phiên đó. Bạn có thể ngăn chặn điều đó bằng cách sử dụng mã hóa và xác thực, nhưng bạn nên tắt hoàn toàn chuyển ID phiên trong URL hoàn toàn.

+0

Tôi tin rằng chỉ cần giữ session.use_trans_sid (http://www.php.net/manual/en/session.configuration.php#ini.session.use-trans-sid) bị vô hiệu hóa là đủ để ngăn chặn điều này. –

+0

Vâng, đúng thế. May mắn là nó bị vô hiệu hóa theo mặc định. –

5

Điều quan trọng hơn là ID phiên của bạn là ngẫu nhiên (có nghĩa là ai đó không thể sử dụng ID phiên của họ để đoán người khác), vì mối nguy hiểm thực sự là ai đó nhận được ID phiên của người dùng khác. Miễn là bạn giữ cho chúng thật sự ngẫu nhiên, không có lý do gì hoặc tiện ích mã hóa nó

1

Làm cho tập lệnh này, truy cập tập lệnh từ trình duyệt web, sau đó kiểm tra cookie của bạn.

<?php 
    session_start(); 
?> 

Bạn có thể sẽ thấy một cái gì đó như thế này

Site   Cookie  Value 
mysite.com PHPSESSID 6fktilab3hldc5277r94qh2204 

PHP làm một công việc tốt nếu tạo ra một tốt đẹp, id duy nhất. Không có điểm trong việc mã hóa điều này.

+0

Điều này không giải quyết được câu hỏi của người đăng? – zombat

+0

@zombat, tôi đã chỉ chứng minh rằng PHP không tạo ra 'PHPSESSID' của' 5' hoặc cái gì đó hoàn toàn yếu như OP có thể đã suy nghĩ. –

1

Bạn nên không bao giờ phụ thuộc hoàn toàn vào một cookie hoặc mục để xác thực (các) người dùng (đã đăng nhập) của bạn. Như đã đề cập ở trên, bạn nên lưu trữ IP và kiểm tra điều đó. Một bổ sung tốt sẽ là lưu trữ USER_AGENT.

Hãy nhớ rằng nếu ứng dụng của bạn có nguồn mở, bạn chỉ làm việc tốt với id phiên vì hacker có thể dễ dàng xác định bạn đang xác thực điều gì.

0

ID phiên là tương đối không thể chấp nhận được, vì vậy đó không thực sự là vấn đề.

Có một điều bạn có thể làm liên quan đến này để chống lại các cuộc tấn công:

  • tạo một phiên làm việc mới khi một người dùng đăng nhập
  • giới hạn độ dài của một phiên

Có một vài thứ khác nữa.Tôi luôn khuyên bạn nên nghiên cứu Rails Guide về những vấn đề này-- nó cung cấp giải thích rất dễ hiểu về các vấn đề đã biết và biện pháp đối phó - tất cả đều áp dụng cho mã PHP.

0

Có nghĩa là mã hóa dữ liệu cookie khi bạn sử dụng cookie để lưu trữ thông tin nhạy cảm. chỉ có máy chủ nên đọc (giải mã).

Không có lý do gì để mã hóa id phiên, vì hacker có thể sử dụng id phiên được mã hóa đó để mạo danh nạn nhân của mình.

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