<?php
class test_class {

        public function __construct() { 

        }
        public function doLogin($username,$password) {

            include("connection.php");

            $query = "SELECT *
                      FROM users
                      WHERE username = '".mysql_escape_string($username)."'
                      AND password = '".mysql_escape_string($password)."'";
            $result = mysql_fetch_array(mysql_query($query));
            if(!$result) {

            return 'no';
            }
            else 
                {
            return 'yes';
                }
            }


}
?>

在上面的代码的工作,但稍有担心是否其安全与否。

注意:我不使用POST方法,所以我必须接受其作为函数参数和我不能使用。

if (isset($_POST['username']) && isset($_POST['password']))
        {
        $username= $_POST['username'];
        $password= $_POST['password'];
有帮助吗?

解决方案

中的代码可能是安全的,但实施并不大。 你不应该存储认证密码明文。您应该盐和散列它。

我可以花一个小时来解释为什么,但你会做的更好只是阅读本

其他提示

在查询本身出现安全的,但如果你使用了支持参数绑定,比如PDO或Zend_Db的一个DB接口,你就不必审查每个SQL语句这么紧张。

此外,mysql- *函数非常过时;你应该看看mysqli- *函数来代替。

作为一个文体方面说明,有一个空的构造函数是没有意义的,我会建议返回布尔真或假,而不是字符串值。

最后,如在别处所提到的,存储明文口令是一个好主意。

呃....你存储明文密码?这肯定是不安全的。密码应使用类似SHA256盐被散列。存储明文口令是不是一个好主意。

没有。你不应该存储在数据库中的原始密码。存储它散列(优选与盐)。此外,准备的声明比逃避一个更好的选择。看到这个 PHP PDO文档。作为一个附加的好处(除了安全性),它们可以是更有效的。

在代码本身看起来不错,但主要的问题,我看到的是,你身边路过的密码以纯文本。

是客户机到服务器的连接的安全的(即,使用SSL) 是服务器对数据库连接进行安全

如果在这两种情况下有人能够坐在电线和观看交通经过,那么你已经有了一个安全问题。

如果是我的话,我肯定会在客户端和服务器之间的SSL连接。

我会确保你在数据库中存储的密码的哈希值。

和我会改变你的代码,类似

//Pseduo Code
SELECT * FROM Table where UserName = $username
Get Row Back
if(MD5Hash($password) == DataRow[Password])
   //Valid

我觉得是好的,但是,如果我是担心安全,我想“用户名”的密码存储到变量中,并查询外比较。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top