PHP登录页面和主页单页,是否可取?

时间:2014-03-20 12:48:15

标签: php security login-script

我有一个简单的网络应用程序,我所做的是登录页面和主页在一个页面。 这是场景:

#PHP login script goes here inc. Database config and Authentication
if(!login()) {

<html>
<head>
<title>Homepage</title>
<css goes here>
<js goes here>
<body>

[ Login form goes here ]

</body>
</html>

} else {

#PHP main page script goes here inc. Database config and Authentication
<html>
<head>
<title>Homepage</title>
<css goes here>
<js goes here>
<body>

[ Main page if it is login ]

</body>
</html>
}

我的问题是,建议这样切换而不是重定向到不同的/成功页面? 它会影响速度和安全性或漏洞吗?

3 个答案:

答案 0 :(得分:0)

此处没有安全隐患。 (基本上)

然而,这非常不可取,因为这是不好的做法。如果您自己一个小型项目/应用程序,那么如果它看起来没有打扰你,也许你可以使用这种方法。

答案 1 :(得分:0)

查看您提供的示例代码,我看到您已经在使用 login()函数来决定是否有人登录。我会更改该功能(或创建一个新功能)如果用户未登录,则会将标头重定向发送到login.php页面,并终止该脚本。

这样,您就不必在应用程序的每个页面上执行IF ELSE。

function CheckLogin(){
    // do your login checks here, if user is not logged in, redirect to login.php
    header('location: http://mysite.nl/login.php');
    die(); // terminate the entire script.
}

页面看起来像:

<?php 
    //PHP login script goes here inc. Database config and Authentication
    CheckLogin(); // ^^^^^^ The CheckLogin() function was included from there ^

    // Contents of the page, wether it be home, a photoalbum or anything you can imagine!
?>

在登录页面上,您需要删除CheckLogin()函数。

答案 2 :(得分:0)

如果您的表单也张贴到index.php,则可能存在漏洞。

这是因为在以下情况下它很容易受到影响:

  1. Alice登录,然后查看您登录的主页以获取任何新闻。
  2. Alice的登录会话超时。
  3. 爱丽丝去吃午饭。
  4. Carol加载浏览器的开发者工具,然后点击刷新。
  5. 然后,浏览器会从登录表单重新提交POST数据。
  6. 用户名和密码在浏览器工具中可见,Carol会记录这些工具以便以后恶意使用。
  7. 这是一个示例场景,这就是为什么OWASP recommend在登录后总是重定向的原因,因为这会阻止POST数据在浏览器中缓存。

    在上面的示例中,Carol可以在更新Alice认为超时的会话后执行攻击,或者即使Alice已经明确注销,Carol也可以点击返回登录的主页并刷新POST数据在这种情况下也会刷新。

    但是,如果您将用户重定向到同一页面,因为没有HTTP 200响应,则不会缓存登录凭据。