<?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'];
答案 0 :(得分:5)
代码可能是安全的,但实现并不是很好。 您永远不应将身份验证密码存储为纯文本。 您应该对其进行加密和哈希。
我可以用一个小时来解释原因,但你会做得更好just reading this。
答案 1 :(得分:4)
查询本身看起来很安全,但如果您使用支持参数绑定的数据库接口,例如PDO或Zend_Db,则不必非常紧张地仔细检查每个SQL语句。
此外,mysql- *函数几乎已被弃用;你应该看一下mysqli- *函数。
作为一个风格侧面说明,空构造函数没有意义,我建议返回布尔值true或false而不是字符串值。
最后,如其他地方所述,存储明文密码是一个坏主意。
答案 2 :(得分:2)
答案 3 :(得分:1)
没有。您不应该将原始密码存储在数据库中。将其储存(最好加盐)。此外,准备好的陈述是比逃避更好的选择。见PHP PDO documentation。作为额外的好处(除了安全性),它们可以更有效率。
答案 4 :(得分:1)
代码本身看起来不错,但我看到的主要问题是你在纯文本中传递密码。
客户端到服务器连接是否安全(即使用SSL) 服务器到数据库的连接是否安全
如果在任何一种情况下,有人可以坐在电线上观察流量,那么您就遇到了安全问题。
如果是我,我肯定会在客户端和客户端之间建立SSL连接。服务器
我确保你在数据库中存储密码的哈希值。
我会将您的代码更改为
//Pseduo Code
SELECT * FROM Table where UserName = $username
Get Row Back
if(MD5Hash($password) == DataRow[Password])
//Valid
答案 5 :(得分:-3)
我认为没关系,但是,如果我担心安全性,我会将“username”的密码存储到变量中,并在查询之外进行比较。