PHP和mySQL登录安全性存在疑问

时间:2016-05-03 17:36:57

标签: php mysql security login

我是PHPmySQL的新手,我为自己的网站构建了一个小型登录表单。由于互联网上对此类内容的描述要广泛得多,我只想问你这是否是一种安全的方法,因为它只是几行而且有效:

首先,我使用用户名和密码在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!";
     }
?>

或我进行重定向。

所以这是我的问题:

  1. 这是一种安全的方法吗?可以轻易入侵吗?
  2. 如果reverse lookup可能,m​​d5会有什么意义?
  3. 谢谢!

2 个答案:

答案 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注入...

请不要在任何战略数据库中使用您的代码。