使用session_start()保护页面有多安全?

时间:2016-02-11 09:37:17

标签: php security

在我的登录页面之后,除非您已登录,否则我的所有其他页面都无法访问。基本上要检查您是否已登录我有一个简单的if else语句:

session_start();
if (isset($_SESSION['id'])) {
    // Show the page
} else {
    // Ask the user to log in
}

对于管理页面,我有一个额外的检查:

session_start();
if (isset($_SESSION['id']) && $_SESSION['isAdmin'] == TRUE){
  // Show the page
} else {
  // Unauthorised access
}

这是保护PHP页面的安全方法吗?

3 个答案:

答案 0 :(得分:2)

是的,这是安全的方式。并尝试在页面顶部添加<?php if(!session_id()) session_start(); ?>,因为如果您已将此页面包含在另一个页面中并且会话已在该页面中启动,则会话将被取消,此页面将容易受到未经授权的用户的攻击。< / p>

答案 1 :(得分:1)

创建一个函数,然后在加载页面时调用此函数..如果您登录,则返回true和false,然后您可以管理URL重定向..

  
    
      

    
  
if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true) {
    echo "Welcome to the member's area, " . $_SESSION['username'] . "!";
} else {
    echo "Please log in first to see this page.";
}

这运气好......

答案 2 :(得分:1)

这取决于。 所有PHP会话变量都存储在服务器端。会话由session_start();启动的时刻。 PHP在您的计算机上设置一个名为PHPSESSID的临时cookie,设置为在浏览会话结束时到期。使用此cookie,PHP服务器将值分配给会话变量。无论何时注销(即session_destroy();),此PHPSESSID cookie值都无用

关于此问题的不安全之处在于,如果某人实际窃取了您的PHPSESSID Cookie值,此人只需在其计算机上设置此PHPSESSID Cookie即可访问您的会话,甚至无需输入任何用户名或密码。但是,如果在Web服务器上使用SSL / HTTPS,则可以减轻这种影响。必须在使用session_start();的任何地方强制执行。您必须强制使用会话的SSL / HTTPS。如果您只使用SSL / HTTPS进行登录,并在会话的其余部分使用HTTP,则不会使您安全,因为PHPSESSID cookie是通过HTTP以明文形式发送的。

据我所知,破坏PHP会话机制的唯一方法是使用中间人攻击来窃取PHPSESSID cookie,如果你有一个攻击,这可能完全没用有效的SSL证书以及为您的网络服务器使用强密码套件。也可以使用正确制作的XSS攻击来检索此cookie,如果使用preg_replace使用正确的正则表达式将PHP输入中的javascript或等效内容过滤到PHP代码,则可以缓解此问题。