我有一个简单的网络应用程序,我所做的是登录页面和主页在一个页面。 这是场景:
#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>
}
我的问题是,建议这样切换而不是重定向到不同的/成功页面? 它会影响速度和安全性或漏洞吗?
答案 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
,则可能存在漏洞。
这是因为在以下情况下它很容易受到影响:
这是一个示例场景,这就是为什么OWASP recommend在登录后总是重定向的原因,因为这会阻止POST数据在浏览器中缓存。
在上面的示例中,Carol可以在更新Alice认为超时的会话后执行攻击,或者即使Alice已经明确注销,Carol也可以点击返回登录的主页并刷新POST数据在这种情况下也会刷新。
但是,如果您将用户重定向到同一页面,因为没有HTTP 200响应,则不会缓存登录凭据。