这个登录功能安全吗?

3

这个登录函数是否安全,我将url数据直接放入函数中,但这样做是否不安全?它是否容易受到注入攻击?尽管我知道它没有SQL注入漏洞,但它是否容易受到其他漏洞的攻击?

if ($_SERVER["REQUEST_METHOD"] == "POST") {    
    $login = check_login($_POST['emailusername'], $_POST['password']);
    if ($login) {
        // Registration Success
       header("location: /");
    } else {
        // Registration Failed
        echo 'Username / password wrong';
    }
}

功能:

// CHECK LOGIN SCRIPT
   function check_login($emailusername, $password) 
    {

$host = 'localhost';
$port = 3306; // This is the default port for MySQL
$database = 'example';
$username1 = 'root';
$password1 = 'root';

$dsn = "mysql:host=$host;port=$port;dbname=$database";
$db = new PDO($dsn, $username1, $password1);

                $password = md5($password);


$statement = $db->prepare('SELECT uid FROM users WHERE (email = ? or username = ?) and password = ?');
$statement->execute(array($emailusername, $emailusername, $password));

if ($result = $statement->fetchObject()) {
    $_SESSION['login'] = true;
    $_SESSION['uid'] = $result->uid;
    return TRUE;
}else{
    return FALSE;
}    }

1
取决于你的 check_login 函数。你能把它粘贴过来吗? - Nemoden
1
@Joshua Davis:只要您继续使用PDO,就不必担心SQL注入问题。 - Shef
1
@alex:这就是我的意思。更明确地说,只要您继续使用PDO来准备带有绑定参数的语句,就不必担心SQL注入! :) - Shef
我的当前PDO语句是否容易受到攻击?就是上面代码中的那些。 - Joshua Davis
它们不易受攻击(不是venerable,那个词不存在)。您还可以通过尝试使用经典的SQL注入攻击来黑客自己的脚本来检查是否存在任何漏洞(维基百科和SO上有许多示例)。 - N.B.
显示剩余2条评论
2个回答

2

-1
创建一个良好的身份验证系统并不简单,我的朋友。以下是一些'第一步'
如果您不确定,就不应该自己动手。这是一种反模式,称为'重新发明轮子'

“检查登录和密码”是一个非常简单的功能,每个程序员都可以轻松编写。当然,使用现有的解决方案也是好的,但这并不是编程的唯一可能部分。 - OZ_

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接