我想知道以下用户控制逻辑的最简单但最安全的方法是什么:
问题:
提前感谢您的回答!
答案 0 :(得分:2)
以纯文本形式存储密码几乎是禁忌。你应该使用安全散列(例如md5是不安全的)散列它,并且“盐”它(也就是说,在对其进行散列之前,在密码之前添加或附加'秘密'字符串 - 否则,从散列中查找密码是还是比较容易的,特别是当密码是常见的时候)。如果您不想创建一个完整的更改密码页面,您可以创建一个小帮助脚本来散列密码,而不是将其存储在Web服务器上;当您需要新密码时,运行它并将其输出粘贴到配置文件中。
需要注意的其他事项(常见攻击):
$_POST
或$_GET
或任何其他用户输入中读取文件名或部分文件名,则插入恶意值可以将文件发送到客户端,而这些文件并非公开。include
,require
或eval
语句都是潜在的钩子,攻击者可以使用它将自己的PHP代码注入应用程序(例如,如果有的话) include $_GET['page'];
,然后有人可以使用它来包含来自其他地方的脚本)答案 1 :(得分:0)
将密码存储为哈希值总是更好。你永远不知道谁可以访问ftp。或者如果PHP服务器关闭,所有PHP文件都将以纯文本显示。储存它并不是一种努力,但它可以为你节省很多潜在的麻烦。
跟随用户的方法对我来说似乎很好。
答案 2 :(得分:0)
我希望您也确保您的配置文件在任何情况下都不会被公共用户访问。使用配置文件夹中的.htaccess文件完全拒绝对该文件的Web访问是个好主意。
另外,我建议存储哈希而不是明文密码。
答案 3 :(得分:0)
数据库存储的唯一替代方法是文件存储。将内容存储到文件中的最优雅方式是使用XML格式,可以使用XPath查询进行解析。请在此处查看示例http://www.w3schools.com/php/func_simplexml_xpath.asp。
我从来没有使用PHP上的XPath,也从未使用过raw(使用了实现它的方法和对象)。
可悲的是,我不能给你更多细节,因为我也在研究这个问题。我真的认为可能存在速度和整体安全问题(当XML文件或任何文件没有时,您的数据库受用户和密码保护)。
一行可以看起来像这样
<user username="username" password="edf53kqwolebng653fgism33grhloi76">
<name>John doe</name>
<rights>
<module name="one">0010</module>
<module name="two">1111</module>
</rights>
</user>
这些数字表示创建读取更新删除权限(1有,0没有),因此如果用户只有读取权限,则访问密钥将为0100(考虑CRUD顺序)。
主要是您所要做的就是在登录后将该信息加载到会话中。
希望它有所帮助。
希望这有帮助。
答案 4 :(得分:0)
将密码文件放在网络根目录之外(例如,在/etc
中)以防止意外提供密码文件。
如果您使用哈希use bcrypt。但请记住,具有完全访问权限的攻击者可以登录登录页面以在您下次登录时获取密码。
使用SSL保护登录页面以防止中间人。