2011-02-07 40 views
0

我是PHP新兴的类开发人员,但我仍然很困惑会议的概念。PHP用户级安全协助?

问题1:客户端操作会改变会话吗?如果没有,我可以设置静态会话并使用它们而无需验证?

问题2:我应该如何管理我的用户帐户?

我确实使用了SALT,但是在注册过程中会生成一个代码,并将其插入到用于登录参考的DB中。任何纠正与解释将不胜感激,以及任何有关会议正在修改的客户端。

class user { 
    private $username = ''; 
    private $password = ''; 
    private $salt  = ''; 
    public $prefix  = 'rhs_'; 

    function __construct() { 
     $this->username = ''; 
     $this->password = ''; 
     $this->salt  = ''; 

     session_start(); 
    } 

    public function login ($username, $password) { 
     $mysql_conn = Database::obtain(); 
     $username = $mysql_conn->escape($username); 
     $sql = 'SELECT `password`, `salt`, `first_name`, `last_name`, `permission` FROM `accounts` WHERE `username`="'.$username.'"'; 
     $row = $mysql_conn->query_first($sql); 

     if(!empty($row['password'])) { 
      $encrypted = md5(md5($mysql_conn->escape($password)).$row['salt']); 
      if ($encrypted == $row['password']) { 
       $_SESSION[$this->prefix.'username']  = $username; 
       $_SESSION[$this->prefix.'password']  = $password; 
       $_SESSION[$this->prefix.'name']   = $row['first_name'].' '.$row['last_name']; 
       $_SESSION[$this->prefix.'permission'] = $row['permission']; 
       header('location: ?page=cpanel'); 
      } else { 
       return false; 
      } 
     } else { 
      return false; 
     } 
    } 
+0

会话与类无关。请参阅http://www.php.net/manual/en/book.session.php – DeveloperChris 2011-02-07 01:56:47

回答

0

我在PHP

即使你是经验丰富的程序员做一个不安全的认证系统是易如反掌是新阶级的发展。您应该使用OpenID(或类似Facebook连接等系统)。他们拥有安全专家作为员工。我创建了一个little library you can use for this。您可以在http://westerveld.name/php-openid//处看到演示

是否可以通过客户端 操作更改会话?如果没有,我可以设置静态 会话并使用它们而不用 验证?

它不能被客户端改变,但用户会话可能被黑客窃取。您需要防止session-fixation =>session_regenerate_id

我应该如何管理我的用户帐户 ?

你可能不应该这样做,因为你犯的一个错误是BIG。但以下是一些快速提示:

  • 您应该使用phpass将您的密码存储在数据库中。因为我注意到你没有使用key stretching。您应该执行基准测试,如果您可以快速生成哈希值,那么您绝对不能安全地保护您的密码。 Bcrypt对哈希来说非常好(被phpass使用,你应该使用这个库),因为它是摩尔定律。
  • 保护您的用户免受CSRF的侵害。
  • 您应该阅读the OWASP top 10

我也创造了一点点authentication library只是为了它的乐趣。我认为这是非常安全的,尽管例如logout.php仍然易受CSRF的影响,虽然这不是一个真正的大问题(修复非常简单)。

3

会话是可以写入和保存变量的服务器上的文件。每个会话文件对应于您的站点的一个活动访问者。 PHP会自动删除大约24分钟未读取或写入的文件。

会话通过cookie链接到用户。当用户浏览到使用会话的页面时,PHP会检查是否与请求一起发送了一个特殊名称的cookie,其中包含其会话标识符。

  • 如果cookie存在,该标识符告诉PHP打开哪个会话文件并读取以填充$_SESSION
  • 如果不存在cookie,则会生成一个新的标识符并将其作为cookie发送给用户,并创建一个新的空会话文件。

由于会话是服务器上的文件,因此您的用户无法修改它们。

+0

这是否意味着我需要更新会话或他们将变为不活动?如果是这样,会不会召开会议续约? – blanknamefornow 2011-02-07 01:58:37

+0

当访问者点击您调用`session_start()`的网站页面时,会话文件被读取。这会重置文件上的到期日期。你不必写任何特殊的代码。 – 2011-02-07 02:12:53