<?php
if (!empty($_POST['password']) && $_POST['password'] === "correct" ) {
echo "<h1 style='color:green'>Password is correct, you may enter!!!</h1>";
}else{
if (!empty($_POST['password']) && $_POST['password'] !== "correct") {
die('<h1 style="color:red">Password is ICORRECT, you may not enter!!!</h1>');
}else{
echo "Enter Password:";
echo "<form action='' method='POST'>";
echo "<input type='text' name='password'>";
echo "<input type='submit'>";
echo "</form>";
die();
}}
?>
除了有人访问您的网络服务器并查看密码之外,是否有其他人可以访问您的网站(例如黑客),并看到“密码正确,您可以进入!!!”实际上不知道密码。
而且,我们可以排除 SSL 攻击之类的东西。
我只是想知道,从表面上看,这个登录安全吗?
我投反对票。密码永远不应该出现在代码库中,尤其是当您在 git 中跟踪代码时。使用环境变量或数据库。
这是一个不错的包,我使用了很多环境变量加载:
https://github.com/vlucas/phpdotenv
也永远不要将您的 env 文件提交到您的存储库。 :)
我认为,如果您将与登录凭据相关的所有内容硬编码到代码中的某个位置,那么它们都会构成威胁。我宁愿使用诸如
MySQL
之类的带有 md5 散列密码的数据库,但没有人可以解码。
一个好的方法是在数据库中搜索用户名和密码,看看它们是否匹配:
SELECT username,password FROM users WHERE username='username' AND password='password'
如果查询返回某些内容,则说明您有匹配项。如果没有,则打印错误消息。
不,这不是安全登录。 不仅仅是因为您选择的密码。
你是对的,为了知道你在做什么,黑客必须进入服务器并查看代码。
然而,这是通过默默无闻实现的安全。 而且没有效果。
您想要练习安全性的各个层次。 您应该假设黑客可以访问您的源代码。 即使知道代码,您也应该阻止他们进入您的页面。
毕竟,您有多确定您的服务器不会被黑客攻击,或者您放在 Github 上的源代码不会泄露。 或者可能是实习生错误配置了服务器,导致 Apache 停止处理 php 并仅输出原始代码。 即使发生所有这些事情,您也希望您的页面安全。
password_verify
函数可用于检查密码。 还有一个 password_hash
功能,将更新用于帮助保持安全的算法。
您不应该在代码中对密码进行明文比较。 您应该这样做,以便您无法知道密码是什么,并且信息不会泄露。
密码“正确”很弱 - 因此黑客可以使用字典暴力并快速找到它
如果您的服务器配置错误和/或有一些附加软件(有错误),黑客可以使用它通过浏览器访问您服务器上的文件。
我认为你的问题是理论上的并且你知道明确存储你的用户密码是不好的 - 万一黑客通过用户电子邮件获取密码,那么他可以做出很多“坏事”,因为我认为许多用户使用他们的密码到处都有电子邮件密码...所以使用
bcrypt
是个好主意:)