我正在通过PHP使用Django用户身份验证.这种基于cookie的身份验证方案是否安全?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了我正在通过PHP使用Django用户身份验证.这种基于cookie的身份验证方案是否安全?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2474字,纯文字阅读大概需要4分钟。
内容图文
![我正在通过PHP使用Django用户身份验证.这种基于cookie的身份验证方案是否安全?](/upload/InfoBanner/zyjiaocheng/653/de88aa5192454e77bb742a3ec3fa326b.jpg)
我有一个用PHP编写的网站,并且正在使用Python和Django添加新功能.其中一部分将是使用标准contribs.auth软件包的Django身份验证.
有人使用我们的Django设置登录后,当他们进入PHP端时,我需要查看他们是否已登录并使用数据库中的用户信息.
使用此Django sessionid cookie值来获取用户ID并证明PHP中Django会话ID有效的最佳方法是什么?
我的计划是在登录时对Django会话ID,我的Django密钥和用户ID进行哈希处理.该值将被设置为其他cookie.然后,在PHP中,我将提取用户ID,对其进行哈希处理,然后将密钥与Django sessionid cookie值进行比较,并比较它们是否匹配.
我扩展了auth登录视图,以在用户成功通过身份验证后设置一个额外的cookie.代替HttpResponseRedirect,它将返回HttpResponseSetAuthCookieAndRedirect.
HttpResponseSetAuthCookieAndRedirect获取request.session.session_id和user_id作为参数.
class HttpResponseSetAuthCookieAndRedirect(HttpResponse):
""" a cookie enhanced version of HttpResponseRedirect """
status_code = 302
def __init__(self, user_id, session_id, redirect_to):
HttpResponse.__init__(self)
self['Location'] = iri_to_uri(redirect_to)
my_hash=hashlib.sha512('{0}|-|{1}|-|{2}'.format(settings.SECRET_KEY,user_id,session_id)).hexdigest()
cookie_hash="{0}::{1}".format(user_id,my_hash[:64])
self.set_cookie('check', value=cookie_hash, max_age=172800, path='/', domain=None)
这将设置一个cookie,该cookie是会话ID,我的Django密钥以及与会话ID匹配的经过身份验证的用户ID的哈希.
在PHP中,
$check_cookie=$_COOKIE['check'];
$django_cookie=$_COOKIE['sessionid'];
$check_cookie=str_replace('"','',$check_cookie);
$django_cookie=str_replace('"','',$django_cookie); //they have quotes for some reason
$parts=explode('::',$check_cookie);
$sent_user_id=(int)$parts[0];
$sent_hash=$parts[1];
$cookie_hash=hash('sha512',"$secret_key|-|$sent_user_id|-|$dj_cookie_sessionid");
$reconstructed_security_hash=$sent_user_id.'::'.substr($cookie_hash,0,64);
if($reconstructed_security_hash==$cookie_hash)
{
return $sent_user_id; //cookies are valid, and user id is the one set by Django for this session id.
}
return false; //cookies do not match
到目前为止,这是可行的.
这个想法合理吗?
解决方法:
如果您可以从PHP中释放Django在会话中获取的内容,则可以直接从数据库中获取相关的会话数据(使用Cookie中的会话ID),然后您将获得直接信息,即哪个用户已登录Django网站-如果有的话.
编辑:
这是Django使用的“加密”:
在“解密”之后,您应该得到类似的信息:
{
'_auth_user_id': 123,
'_auth_user_backend': 'django.contrib.auth.backends.ModelBackend',
}
-当然还有您自己设置的其他会话数据
内容总结
以上是互联网集市为您收集整理的我正在通过PHP使用Django用户身份验证.这种基于cookie的身份验证方案是否安全?全部内容,希望文章能够帮你解决我正在通过PHP使用Django用户身份验证.这种基于cookie的身份验证方案是否安全?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。