我是PHP
和mySQL
的新手,我为自己的网站构建了一个小型登录表单。由于互联网上对此类内容的描述要广泛得多,我只想问你这是否是一种安全的方法,因为它只是几行而且有效:
首先,我使用用户名和密码在phpMyAdmin
中创建一个表(使用md5进行哈希处理)。之后,我使用以下脚本在网站上运行登录,其中$_POST
内容来自表单。
<?php
session_start();
$db = @mysqli_connect("...", "...", "...") or
die("Connection failed!");
mysqli_select_db($db,'...');
if(isset($_POST['username']))
{
$_SESSION['user'] = $_POST['username'];
$_SESSION['password'] = md5($_POST['password']);
$user = $_SESSION['user'];
$password = $_SESSION['password'];
$sql = "SELECT * FROM logins WHERE username = \"$user\"";
$result = $db->query($sql);
$row = $result->fetch_assoc();
if($row["password"] == $password)
{
$_SESSION['logged'] = "loggedin";
}
}
?>
退出脚本也非常简单。
<?php
session_start();
session_destroy();
unset($_SESSION['user']);
unset($_SESSION['password']);
header('Location: ../index.php');
?>
此外,我用
限制每个私人内容<?php
if (isset($_SESSION['logged']))
{
$temp = $_SESSION["user"];
echo "Hello $temp, nice to see you!";
}
?>
或我进行重定向。
所以这是我的问题:
谢谢!
答案 0 :(得分:1)
你需要做很多工作。这里有一些好的开始。从这里和谷歌那里获取想法,因为那里有很多你需要利用的信息。
如何同时服务并提交页面,请参阅此处Is HTTPS as the form's action enough?
关于如何哈希看到这里(目前我的选择)Password Hashing Functions
最后阅读表格验证和输入消毒好的SO帖子是What's the best method for sanitizing user input with PHP?
此外,正如其中一条评论所指出的那样,请查看Prepared Statements
希望这有助于您开始旅程。
答案 1 :(得分:0)
您没有任何安全性,因为您正在发布用户名和密码。除非您使用HTTPS,否则它们将以明文形式通过互联网发送。 MD5编码也没用。
更安全的方法是在发布密码之前对密码进行编码,理想情况是使用到期时间戳,因此在x时间后不能重复使用密码。
此外,您的sql语句使用POSTed值而不进行任何清理,这会将您的数据库暴露给sql注入...
请不要在任何战略数据库中使用您的代码。