PHP+;无数据库:登录->;这安全吗?

PHP+;无数据库:登录->;这安全吗?,php,database,security,login,Php,Database,Security,Login,我想创建一个没有数据库的管理员登录(这是一个非常简单的网站)这是我的代码,这是安全的还是很容易使用我的会话?我怎样才能做得更好 index.php <?php include("auth.php"); if(!checkAuthentication()){ ?> <form method="post" action="?login=1"> <label for="username">Username</label> <inp

我想创建一个没有数据库的管理员登录(这是一个非常简单的网站)这是我的代码,这是安全的还是很容易使用我的会话?我怎样才能做得更好

index.php

<?php
include("auth.php");

if(!checkAuthentication()){
?>
<form method="post" action="?login=1">
    <label for="username">Username</label>
    <input type="text" id="username" name="username">
    <label for="password">Password</label>
    <input type="text" id="password" name="password">
    <input type="submit" value="Login">
</form>
<?php
}else{
header("Location: protected_page.php");
exit();
}

用户名
密码
protected_page.php

<?php
include("auth.php");

if(!checkAuthentication()){
    header("Location: http://localhost/login/index.php");
    exit();
}

var_dump($_SESSION);
?>

谢谢你的帮助

有几件事:

首先,将用户名和密码以纯文本形式存储在PHP文件本身中。这不仅是一种糟糕的做事方式,也是一场噩梦。假设你的脚本在增长,你需要50个用户才能使用“安全”区域——这将是一个噩梦

其次,您的脚本不能很好地处理攻击(即暴力)。我可以对它进行5、5、500次暴力攻击,但它不会锁定“我的”帐户或IP地址。也许需要调查一下

密码应该存储在安全的地方,而不是检查
md5('password')=$\u POST['password']
(例如,您应该检查
md5($\u POST['password'])==$hashedpassword
的值,其中
$hashedpassword
是站点/数据库中某处存储的哈希值。这样,如果有人进入你的网站,就不会有纯文本密码

我还注意到,您在index.php中包含auth.php,但没有检查用户是否已登录(例如,如果用户关闭浏览器,记不起保护区域的完整URL,则可能会发生这种情况)。那么,如果用户登录两次会发生什么呢?如果用户在登录时点击登录框,会发生什么情况?值得深思

最后,考虑(对于UX的目的)具有索引.php检查,如果用户登录,如果没有,将它们转移到Login .php。这意味着,如果他们失去连接(浏览器关闭)并转到

www.yoursite.com
,如果他们登录,他们可以看到任何内容。这只是个人喜好,但值得研究

<强>最不符合< /强>:考虑使用框架。有无数的理由让你这么做,事实上,你在这里问我们它是否安全,这绝对是告诉你它不安全的理由。网络上的漏洞实在太多了,请不要增加漏洞。除非你真的很确定自己在做什么,否则就抓住一个框架。

以下几点:

首先,将用户名和密码以纯文本形式存储在PHP文件本身中。这不仅是一种糟糕的做事方式,也是一场噩梦。假设你的脚本在增长,你需要50个用户才能使用“安全”区域——这将是一个噩梦

其次,您的脚本不能很好地处理攻击(即暴力)。我可以对它进行5、5、500次暴力攻击,但它不会锁定“我的”帐户或IP地址。也许需要调查一下

密码应该存储在安全的地方,而不是检查
md5('password')=$\u POST['password']
(例如,您应该检查
md5($\u POST['password'])==$hashedpassword
的值,其中
$hashedpassword
是站点/数据库中某处存储的哈希值。这样,如果有人进入你的网站,就不会有纯文本密码

我还注意到,您在index.php中包含auth.php,但没有检查用户是否已登录(例如,如果用户关闭浏览器,记不起保护区域的完整URL,则可能会发生这种情况)。那么,如果用户登录两次会发生什么呢?如果用户在登录时点击登录框,会发生什么情况?值得深思

最后,考虑(对于UX的目的)具有索引.php检查,如果用户登录,如果没有,将它们转移到Login .php。这意味着,如果他们失去连接(浏览器关闭)并转到

www.yoursite.com
,如果他们登录,他们可以看到任何内容。这只是个人喜好,但值得研究

<强>最不符合< /强>:考虑使用框架。有无数的理由让你这么做,事实上,你在这里问我们它是否安全,这绝对是告诉你它不安全的理由。网络上的漏洞实在太多了,请不要增加漏洞。除非你真的很确定自己在做什么,否则就抓住一个框架。

以下几点:

首先,将用户名和密码以纯文本形式存储在PHP文件本身中。这不仅是一种糟糕的做事方式,也是一场噩梦。假设你的脚本在增长,你需要50个用户才能使用“安全”区域——这将是一个噩梦

其次,您的脚本不能很好地处理攻击(即暴力)。我可以对它进行5、5、500次暴力攻击,但它不会锁定“我的”帐户或IP地址。也许需要调查一下

密码应该存储在安全的地方,而不是检查
md5('password')=$\u POST['password']
(例如,您应该检查
md5($\u POST['password'])==$hashedpassword
的值,其中
$hashedpassword
是站点/数据库中某处存储的哈希值。这样,如果有人进入你的网站,就不会有纯文本密码

我还注意到,您在index.php中包含auth.php,但没有检查用户是否已登录(例如,如果用户关闭浏览器,记不起保护区域的完整URL,则可能会发生这种情况)。那么,如果用户登录两次会发生什么呢?如果用户在登录时点击登录框,会发生什么情况?值得深思

最后,考虑(对于UX的目的)具有索引.php检查,如果用户登录,如果没有,将它们转移到Login .php。这意味着如果他们失去连接(浏览器关闭)并转到

www.yoursite.com
,如果他们登录,他们可以看到发生了什么
<?php
include("auth.php");

if(!checkAuthentication()){
    header("Location: http://localhost/login/index.php");
    exit();
}

var_dump($_SESSION);
?>