我的代码是否安全?

时间:2014-04-27 06:12:27

标签: php login

我正在使用以下代码在我的服务器中登录和创建会话。反正黑客可以打破这个吗?这里jp_objects是类。

if (isset($_POST['username'])) {
    $username = $_POST['username'];
    $password = md5($_POST['password']);
    $check_login = new jp_objects('id','users',"username = '".$username."' AND password = '".$password."'",'','');
    if ($check_login->nbResults != '0') {
        $_SESSION['user_id'] = $check_login->results[0]->id;
        header("Location: home.php");
    } else {
        $message = '<span class="label label-danger">Please enter your correct password.</span>';
    }   
}

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

不,您的代码有SQL注入漏洞。您不能过滤$ _POST [&#39;用户名&#39;]。

尝试将admin';--(或其他真实用户名)放入您的登录表单,我认为您已经登录而没有密码。

答案 1 :(得分:0)

使用数据错误检查和验证始终符合您的最佳利益。

实施例。 $username = $_POST['username']; $password = md5($_POST['password']); $check_login = new jp_objects('id','users',"username = '".$username."' AND password = '".$password."'",'','');

应该进行一些错误检查或验证,例如

$username = $_POST['username'];

if((strlen($username)>20)||!(is_string($username)){
header("Location: LOCATION TO REDIRECT");
}

$password = md5($_POST['password']);
$check_login = new jp_objects('id','users',"username = '".$username."' AND password =       '".$password."'",'','');

没有什么是“黑客证明”,但检查数据不一致是一种很好的做法。以上只是确保字符串不超过20个字符并且是字符串的示例。

答案 2 :(得分:0)

除了SQL注入的漏洞之外,您还没有使用密码,许多人认为MD5不应再用于加密目的。

以下是使用salt哈希密码的文档:http://www.php.net/manual/en/faq.passwords.php

答案 3 :(得分:0)

不,这是非常不安全的。

  1. 您没有消毒您的输入。来自外部(即来自用户甚至服务)的任何数据应始终清理并保证安全。这可以使用filter扩展名来完成(filter_input()功能更具体)。

    $username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
    $password = filter_input(INPUT_POST, 'username', FILTER_UNSAFE_RAW);
    
  2. 您应该使用预先准备好的语句,这会增加一层安全性。它们可以防止您的查询容易受到SQL injections的攻击。您的数据库实现隐藏在课程后面,因此您必须自己解决这个问题。

  3. 使用md5()哈希密码并不安全。使用免费的密码破解程序,最多需要几秒钟才能打破大多数MD5哈希密码。您应该使用password extension来填充密码。如果你使用PHP&lt; 5.0.0然后您可以使用由compatibility library先生维护的Anthony Ferrara

    $password = password_hash($password, PASSWORD_BCRYPT);
    
  4. 您向我们展示的代码看起来像是来自更大脚本的代码段。如果是这样,那么您还应该在重定向用户后终止脚本。设置Location标头后,使用exit;停止脚本继续运行。在重定向时,使用绝对路径(给出页面的完整路径,使用/前缀)也是一个好主意。

    header("Location: /home.php");
    exit;