用户对象和安全性


User Object and Security

我正在使用PHP编程我的第一个登录和帐户管理用户界面,我被困在这个问题上。当我想到我的设计时,我正要完成创建新用户帐户的方法。

事情是这样的。当用户尝试登录时,程序接受字符串(尚未对其进行过滤),并使用我创建的用户类检查所提供的用户名和密码是否在数据库中。如果在数据库中找到用户,则使用来自另一个类的算法对用户名进行加密,返回它们的凭据级别,并且两个值都与user对象一起存储在$_SESSION变量中。还创建了另一个会话变量,该变量模仿对象中存储的凭据级别的值。如果其中一个不相等,则会话被篡改。

现在在用户类定义(方法列表)上,有允许解码和编码加密用户名的方法;这就引出了我的问题。考虑到用户对象是由这个类定义的,这个类持有这些方法来解码和编码用户名,这会被认为是一种安全风险吗?这个类将是用于一般用户登录的同一个类,所以我不确定…

用户名通常被视为公共信息。

我见过的唯一情况是,如果/当您希望其他人限制查看您的用户(名称)列表时。

一般来说,这是你应该感到厌倦的密码。

另外,在会话中,您可能希望保存用户表行id而不是用户名(这样可以限制攻击者知道用户的实际身份)。也就是说,这又是一个小小的预先考虑。

加密密码存在安全风险,它明显违反了CWE-257。您应该对密码进行散列,sha256是一个很好的选择。此外,会话中唯一需要存储的东西是$_SESSION['logged_in']=True。在会话中存储用户名/密码是一种非常糟糕的做法。默认会话处理程序将此信息存储在/tmp/SESSION_ID中。