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

我怀疑这个生成的PHP代码是否容易受到攻击?

我对PHP或Web安全性的教育程度不高,但我强烈怀疑我正在使用的公司使用的某些软件生成代码是不安全的.

以下是我所关注的一些片段:

一个问题:

$sql = "SELECT password, fullname FROM ".$MysqL_table." 
WHERE username = '".MysqLi_real_escape_string($db,$_POST['username'])."'";

检索给定用户名的密码然后在PHP中比较它们是不是很糟糕,或者在查询本身中使用密码是更好的做法,如下所示:

... WHERE username = $username AND password = $hashed_password

第二个问题:

$crypt_pass = md5($_POST['password']);
if ($crypt_pass == $data['password'])
{
    //LOGIN SUCCESS
}

使用md5-hashing而不使用salt,够了吗?

第三个问题:

 setcookie('username', $_POST['username'], time() + 3600*24*30);
 setcookie('password', $_POST['password'], time() + 3600*24*30);

将简单/文本用户名密码存储在cookie中是一个好主意吗?

这些代码是否不安全?如果是这样,应该做些什么?

解决方法:

实际上还有一个问题是你缺少的:

问题:此代码使用“==”检查哈希值是否相等. PHP可以快乐地决定将这些字符串的第一部分强制转换为数字,然后比较这些数字的“有效”部分.例如,PHP将决定“0e”启动科学记数,其值始终为零.因此,任何两个以0e开头且仅包含后面的数字的哈希值将相互匹配.

“0e111111”==“0e123456”;在PHP世界中,#true.

还有很多方法可能会出错.始终在PHP中使用“===”来比较哈希.

可能不是问题:从数据库向Web服务器发送密码哈希不太可能成为问题,如果攻击者可以收听该流量,那么您已经陷入了深深的麻烦.另一种方法是将查询中的散列值包含在数据库服务器中 – 无论哪种方式,都会通过链接.如果您需要安全性,则可能需要一个数据库无关的专用身份验证系统.

主要问题:是的,你必须每个用户,长,盐.如果没有长盐,您的用户密码将以粗略的文本形式存储.攻击者只需在彩虹表中查找MD5哈希值即可查看相应的密码.例如,482c811da5d5b4bc6d497ffa98491e38看起来很安全,但您可以查找它,找出它是“password123”.

主要问题:在密码中存储密码非常糟糕.它将通过网络传输每个请求,在用户计算机上以未加密的方式存储,并随每个请求一起发送到您域上的任何内容(图像,任何已上传的邪恶文件).此外,这些cookie没有设置HttpOnly,这意味着页面上的任何javascript(来自任何人)将能够读取用户的密码.

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

相关推荐