【发布时间】:2014-04-09 18:58:30
【问题描述】:
我在 MySQL 数据库中插入了一些用户
$register_query = " INSERT INTO user ( name, password, permission_id)
VALUES ( '$username', SHA('$password_01'), '1' ) ";
我想读取用户表进行登录
require_once('initializing.php');
class DbPlus extends MySQLDatabaseConnection{
public $database;
function __construct()
{
$this->database = parent::connection();
}
public function reading_table($table, $query, $where = null, $limit = null, $order = null){
$query = "SELECT {$query} FROM {$table}";
if ( isset($where) ) {
$query .= " WHERE {$where}";
}
if ( isset($order) ){
$query .= " ORDER BY {$order}";
}
if ( isset($limit) ) {
$query .= " LIMIT {$limit}";
}
// $data = $this->database->query($query);
$data = $this->database->query($query);
$rows = array();
while ( $row = $data->fetch_object() ) {
$rows[] = $row;
}
return $rows;
}
}
$dbplus = new DbPlus;
$login_qry_slct = "id,name,password,permission_id";
$login_qry_whr = "name ='test' AND password = SHA('test')";
$result = $dbplus->reading_table('user', $login_qry_slct, $login_qry_whr );
var_dump($result);
出于测试目的,我插入了name=test 和password=test。我以两种方式做到这一点,有和没有 SHA()。当我在没有散列的情况下插入密码“测试”时,选择查询工作正常(注意:它是出于测试目的)并返回非散列测试用户。
$login_qry_whr = "name ='test' AND password = 'test'";
但是当我使用 SHA 时
$login_qry_whr = "name ='test' AND password = SHA('test')";
返回array(0) { }(注意:用户表中也保存了哈希版本)
我对 SHA() 做错了什么?
【问题讨论】:
-
尝试这样做'{SHA($password)}'。
-
你应该使用sha作为安全密码,使用salt然后加密密码并保存,PHP中的crypt也可以
-
数据库中的“密码”列长度和类型是多少?检查列长度是否足以容纳散列值并且不会发生修剪
-
-1 表示函数 read(),它使精美的 SQL 语言变得笨拙。试图节省自己输入几个关键字的时间,你正在破坏整个代码