我正在编写一个允许用户注册的 PHP 站点,注册用户和未注册用户都可以输入各自的用户名和密码(例如 smith8h4ft
- j9hsbnuio
)学校网站。
然后,我的 PHP 脚本发送一些 $_POST
变量,下载并解析标记页面,生成一个名为:
marksDB = Array("subject"=> Array("A", "B", "A", "C"), ...)
,并重新格式化。
我的问题是: 我应该如何保证用户名和密码的安全?
对于未注册的用户,我目前忘记了用户名和密码并将marksDB
放入$_SESSION
。当用户不活动时,例如30 分钟,marksDB 被删除。 $_SESSION
中的这些数据有多安全?如果用户登录后查看页面一次,就再也不会查看它,那么脚本不会从 session 中删除 marksDB 呢? session 是否自动删除 ( gc.maxlifetime )?
那么注册用户呢?我想让一切都安全,但我不想每 30 分钟不活动就用密码提示来烦扰用户。像描述的那样加密凭据是否安全 here ,但没有第三个用户设置密码?还是我必须每次都询问用户的密码?
编辑:
感谢您的快速回复,
@Justin ᚅᚔᚈᚄᚒᚔ:我怀疑他们有一些 API,但我可以问他们,以防万一
@Abid Hussain:感谢非常有用的链接。 (也感谢两位的回答)。
我会丢弃用户的凭据,只解析 markDB
,我可能也会丢弃它(在注销或不活动后)——在需要时再次检索标记很便宜。
最佳答案
如果学校网站没有为此公开 API(例如,using OAuth like the StackExchange sites do),那么您的选择将受到限制。
一般来说,将用户的明文凭据保留超过绝对必要的时间绝不是一个好主意。您可以想象的任何可能的尝试方式( session 劫持、窃取 key 、解密等)都存在安全隐患。
更好的方法可能是使标记下载过程严格由用户启动。给他们一个按钮,上面写着“检索我的标记”,然后在那里完成身份验证过程,下载标记,然后丢弃他们的凭据。每次他们“同步”时,他们都应该进行身份验证。除非标记经常定期更改,否则您没有理由不能一次下载所有需要的信息,然后将其安全地缓存在服务器上供以后使用。
关于PHP - 加密其他站点的用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11847830/