微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

关于网站用户身份验证的PHP最佳实践?

我使用非常简单的PHP代码构建了几个站点,到目前为止一直很好,但我碰巧我现在担心主题“安全性”我想知道在PHP中创建登录/身份验证过程的最佳方法是什么

这就是我目前所做的事情:

注册期间,用户提交电子邮件和密码
密码将作为md5字符串存储在MysqL中,因此除了用户之外的任何人都知道它.

用户登录时,我这样做

SELECT * FROM usertable WHERE email = $emailsubmitted AND pass = md5($passsubmitted)

然后,如果结果数组的大小大于零,则表示用户存在

所以我订了

session_start(); 
$_SESSION['logged'] = 'true';
$_SESSION[userid] = userid;

因此,对于用户浏览的每个页面,我将执行检查以查看会话变量是否存在.

BottOM LINE:我想知道这是否足够安全以及如何改进它.

解决方法:

您的sql语句中存在一个注入漏洞. (这是假设“提交”后缀意味着变量没有对其进行任何过滤.)如果恶意用户提交’admin@example.com’并且1 = 1; – 作为电子邮件地址,他们可以使用“admin@example.com”的凭据登录,无论密码如何.我建议保护sql的输入和/或使用存储过程.我还建议只加载你绝对需要的列;它将提高查询的速度,并允许较少的状态在数据库之外暂停.

另外,在密码上实施salting.如果有人要从数据库中检索用户的数据,那么密码将成为暴力破解和字典攻击的简单目标(如彩虹表).如果你真的很偏执,可以考虑从MD5切换到SHA或其他散列函数.

确保在PHP.ini文件中设置了哪些变量,并将它们设置为您期望的值.根据这些设置,$_SESSION的数组赋值也是不安全的.一些旧的Web应用程序使用了PHP功能’,这使得查询字符串中的变量成为Web应用程序中的全局变量,这意味着当它执行$_SESSION [‘userid’] = $userid;时,如果恶意用户附加了?userid对于他们的查询字符串= 1,他们将成为用户ID为1的用户,通常是第一个用户(或管理员).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐