加密其他网站的用户名和密码
我正在编写一个允许用户注册的PHP站点,并且注册和未注册的用户都可以输入他们各自的用户名和密码(例如smith8h4ft
- j9hsbnuio
)作为学校网站。
然后,我的PHP脚本发送一些$_POST
变量,下载并解析标记页面,从而创建一个名为: marksDB = Array("subject" => Array("A", "B", "A", "C"), ...)
,并将其重新格式化。
我的问题是: 我应该如何保持用户名和密码安全?
对于未注册的用户,我目前忘记了用户名和密码,并将marksDB
放入$_SESSION
。 当用户闲置30分钟时,marksDB被删除。 这些数据在$_SESSION
安全性如何? 那么用户如何登录,查看页面一次,而不再查看它,所以脚本不会从会话中删除marksDB? 会话是否自动删除(gc.maxlifetime)?
那么注册用户呢? 我希望让所有事情都安全,但我不想让用户每隔30分钟处于不活动状态就提示密码提示。 加密这里描述的凭证是否安全,但没有第三个用户设置的密码? 或者我每次都要问用户密码?
编辑:
感谢您的快速回复,
@Justinᚅᚔᚈᚄᚒᚔ:我怀疑他们有一些API,但我可以问他们,只是为了案件
@Abid Hussain:感谢您提供非常有用的链接。 (谢谢你的答案)。
我将丢弃用户的凭据,并且只有解析的markDB
,我可能会将其丢弃(注销或不活动后) - 在需要时再次检索标记很便宜。
如果学校网站没有为此公开API(例如,像使用StackExchange网站那样使用OAuth),那么您的选择是有限的。
一般来说, 保持用户的明文凭证的时间不是绝对必要的 。 对于你想象的任何可能的方式(会话劫持,被盗密钥,解密等)都存在安全隐患。
更好的方法可能是严格按照用户启动标记下载过程。 为他们提供一个说明“检索我的标记”的按钮,然后通过身份验证过程,下载标记并丢弃其凭据。 每次他们“同步”时,他们都必须认证。 除非标记经常周期性更改,否则不应该一次性下载所有需要的信息,然后将其安全地缓存在服务器上供以后使用。
查看网址
http://phpsec.org/projects/guide/4.html
http://www.sitepoint.com/blogs/2004/03/03/notes-on-php-session-security/
http://talks.php.net/show/phpworks2004-php-session-security
http://segfaultlabs.com/files/pdf/php-session-security.pdf
最安全的方式来创建会话在PHP中
另请阅读
会话比cookies更安全。 但是仍然有可能窃取一个会话,因此黑客可以完全访问该会话中的任何内容。 避免这种情况的一些方法是IP检查(它工作得很好,但是非常低,因此不可靠)和使用随机数。 通常对于随机数,您有一个每页“标记”,以便每个页面检查最后一页的随机数与它存储的内容相匹配。
在任何一项安全检查中,都会失去可用性。 如果您进行了IP检查,并且用户位于内部网防火墙(或导致此类情况的任何其他情况)后面,而该防火墙并未为该用户提供稳定的IP,则每次失去IP时都必须重新进行身份验证。 随着随机数的增加,你会得到一个非常有趣的“点击返回将导致此页面中断”的情况。
但有了cookie,黑客就可以简单地使用相当简单的XSS技术来窃取会话。 如果您将用户的会话ID存储为cookie,那么它们也很容易受到攻击。 因此,即使会话只能透露给可以执行服务器级别攻击的人(这需要更复杂的方法并且通常需要一些特权,如果您的服务器是安全的),您仍然需要一些额外的验证级别根据每个脚本请求。 您不应该一起使用cookie和AJAX,因为如果cookie被盗,这会让您更容易上街,因为您的ajax请求可能无法获得每个请求的安全检查。 例如,如果页面使用一个随机数,但该页面从不重新加载,那么该脚本可能只会检查该匹配项。 如果cookie持有认证方法,我现在可以使用被盗的cookie和AJAX洞去城里做我的邪恶。
会话文件是服务器端,因此它应该对客户端不可见。 但如果他们知道会话ID,他们仍然可以欺骗您的程序使用另一个会话。
对于已注册的用户,您可以使用只有您知道的密钥对密码进行加密(可能是随机生成并为每个用户存储的新密钥),然后将密码存储在数据库或文件中。
链接地址: http://www.djcxy.com/p/11061.html