2011-08-05 36 views
8

Có an toàn để sử dụngBảo mật phiên?

If ($_SESSION['authenticated'] == true) { 
    /////Show secure page 
} 

Có thể ai đó chỉ cần đi và thay đổi nơi biến phiên được lưu trữ để làm cho $ _SESSION của họ [ 'autheticated'] = true?

Điều tương tự với người dùng có $ _SESSION ['id'] = vào id chỉ mục của họ. Làm thế nào tôi có thể làm cho người bảo vệ này? Có ai đó chỉ cần đi và thay đổi giá trị id và mạo danh người dùng khác không?

Phương pháp dưới đây có phải là cách phù hợp để thực hiện điều gì đó bảo mật không?

$_SESSION['random_check'] = (random number) 

và cũng lưu trữ này trong một cột trong cơ sở dữ liệu của tôi và mỗi lần tôi sẽ

If ($_SESSION['authenticated'] == true && $_SESSION['random_check'] == random_number) { 
/////Then show secure page 
} 

Cảm ơn,

+0

tôi sử dụng phương pháp này cho tất cả các dự án của tôi 'booleans' kết hợp với một hash của tên người dùng và ngày đăng nhập (cũng được cập nhật trong db + được tổ chức trong phiên), sau đó khi kiểm tra được thực hiện tất cả được so sánh là hợp lệ và cập nhật một lần nữa) nếu im trên chia sẻ lưu trữ bệnh thay đổi đường dẫn lưu chỉ trong trường hợp & .htaccess thư mục –

Trả lời

3

Tôi khá chắc chắn rằng phiên trong hầu hết các lưu trữ chỉ là một giao diện để bạn hệ thống tập tin, tức là tất cả dữ liệu Phiên được lưu trữ trong đĩa cứng của máy chủ, nếu bạn nhìn vào đầu ra phpinfo(), bạn có thể xem nơi đường dẫn thực tế của dữ liệu Phiên là.

Với điều đó nói rằng, trừ khi bạn chmod đường dẫn phiên của bạn để 777 và kẻ tấn công xảy ra để biết nơi bạn đang lưu trữ ứng dụng của bạn và có đăng nhập, sau đó tôi không nghĩ rằng đó là một vấn đề.

Vấn đề lớn hơn ở đây là đảm bảo cookie của bạn vì đó là phần thông tin sẽ chuyển qua lại giữa máy chủ và ứng dụng của bạn mà kẻ tấn công có thể sử dụng để mạo danh người dùng hợp pháp.

1

Có, Có an toàn để sử dụng không. Tôi dùng cái này Tôi làm điều này: -kiểm tra thông tin đăng nhập, nếu là thông tin đăng nhập hợp lệ, đặt $ _SESSION ['logged'] = 'yes' và tạo mã thông báo um $ _SESSION ['token'] = 'mã thông báo' mã thông báo này, tôi lưu trong phần tử html đầu vào và kiểm tra từng hành động. cái gì đó như:

<?php 

    class token { 



     public function generateToken() { 

      return $_SESSION['token'] = md5(microtime()); 

     } 



     function generateField($name = "token"){ 

      return "<input type='hidden' value='{$_SESSION['token']}' name='{$name}'>"; 

     } 



     public function getToken() { 

      return $_SESSION['token']; 

     } 



     public function getTokenFromFields($method = "GET") { 

      return strtoupper($method) == "GET" ? $_GET['token'] : $_POST['token']; 

     } 



     public function checkToken() { 

      return $this -> getToken() == $this -> getTokenFromFields(); 

     } 

     public function updateToken() { 
      $_SESSION['token'] = md5(microtime()); 
     } 

    } 



?> 

<?php 
//orther file 
require 'class.token.php'; 
$token = new token(); 
$Atoken = $token -> generateToken(); 
echo "<script> 

     var data = {}; 

     data['token'] = '{$Atoken}'; 

     data['foo'] = 'baa'; 
    </script>"; 
$token -> generateField(); 
?> 

<script> 
$.ajax({type:"GET", url:"process.php", "data=foo=baa&token=" + data.token, success:function(response) { } }) 
</script> 

Trong process.php:

<?php 
if($_SESSION['token'] == $_GET['token']) { 
//do something 
} else die('bad token'); 
?>