我正在尝试实现一个页面,员工可以登录并添加,修改,更新工作案例。
我有一个选择列表,其中包含从数据库加载的数据(人员名称)。在这个数据库中,我有基础知识,用户名,ID,密码,电子邮件。
选择列表/框的默认值为“ - ”;当它发生变化时,会弹出一个表格,要求输入SELECTed工作人员的密码。
使用jQuery,我将id,用户和密码(纯文本)发送到服务器。在php文件中
我转义(mysqli_real_escape_string
)所有三个变量并哈希(md5($salt.$varname)
)密码。
我用SELECT * FROM table WHERE id='".$escapedId."' AND name='".$escapedName."'
查询mysql数据库。
检查num_rows==1
后是否$hashedPasswd==$mysqlresult['passwd']
:
$serverResponse->reponses['passwdOK']=true;
echo json_encode($serverResponse);
所以,我的两个问题是:我是否应该更改查询以包含密码(... WHERE passwd=$hashedPasswd...
)以及我发送/返回JS文件的响应是否正常(确定我的意思是,如果这是安全的,安全的)。如果响应不安全/安全,那么正确的服务器响应是什么。
P.S。我不想重新加载或重定向到另一个页面,事实上,如果密码正常 我想解锁/启用已加载页面上的一些控件。
答案 0 :(得分:2)
您的方法存在一些问题:
答案 1 :(得分:0)
看起来不错,但您应该记住,浏览器和服务器之间的任何通信都应加密(https)。如果没有,服务器和浏览器之间的任何人都可以读取用户给出的所有数据(登录名,密码)。
我不认为您的查询是性能的最佳选择。如果密码与数据库中的密码不匹配,选择数据的目的是什么。查询应该是“WHERE id
= id AND password
='hash'。
如果密码正常,数据库会向您发送用户数据,否则您将无法获得任何错误。我不是专业技能的mysql专家,但据我所知它是更好的解决方案。
而且,还有更多。你不需要逃避哈希。如果你从md5()函数中得到任何东西,它就已经“转义”了。
无论如何,我会这样做:
$id = (int) $_POST['id'];
$pass = md5(SALT.$_POST['pass']);
$query = 'SELECT * FROM `user_table` WHERE `id` = $id AND `password` = $pass;