She*_*kan 4 python security authentication login web-applications
我在python中创建一个Web应用程序,我希望有一个安全的登录系统.
我之前通过让用户登录多次登录系统,然后将一个随机字符串保存在一个cookie中,该cookie也保存在该用户旁边的数据库中工作正常,但不是很安全.
我相信理解像这样的先进系统的原则,但不是具体细节:
但除了那些我不知道如何可靠地检查登录的人是否真的是用户,或者如何安全地保持页面请求和多个打开页面之间的会话等.
我可以有一些指示(最好是具体的指示,因为我是这个高级安全编程的新手.
我只是尝试使用安全性完成基本用户登录注销到一个域,没有太复杂.
这个答案主要解决密码哈希问题,而不是你的其他子问题.对于那些人,我的主要建议是不要重新发明轮子:使用与GAE配合良好的现有框架.它提供的Django的内置部署,而且还具有内置安装的WebOb的,所以各种基于的WebOb的框架(金字塔,TurboGears中,等)也应予以考虑.所有这些都有预先制作的库来为您处理大量这些(例如:许多WebOb框架使用Beaker进行基于cookie的会话处理)
关于密码哈希...由于您在其他一些评论中指出您使用的是Google App Engine,因此您希望使用SHA512-Crypt密码哈希.
尽可能安全地存储密码哈希的其他主要选择是BCrypt,PBKDF2和SCrypt.但是,GAE不为这些算法提供C加速支持,因此部署它们的唯一方法是通过纯python实现.不幸的是,他们的算法为纯python实现做了太多的小工作,以便做足够快的工作以保证安全和响应.鉴于GAE的Python crypt
模块实现提供了C加速的SHA512-Crypt支持(至少,每次我测试它),因此它可以以足够的强度运行.
就编写实际代码而言,您可以crypt
直接使用该模块.将它们传递给crypt时,您需要注意生成自己的salt字符串,并在加密新密码时调用crypt.crypt(passwd, "$6$" + salt)
.该$6$
告诉它使用SHA512加密中.
或者,您可以使用Passlib库来处理大部分内容(免责声明:我是该库的作者).为了快速部署GAE:
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["sha512_crypt"],
default="sha512_crypt",
sha512_crypt__default_rounds=45000)
# encrypt password
hash = pwd_context.encrypt("toomanysecrets")
# verify password
ok = pwd_context.verify("wrongpass", hash)
Run Code Online (Sandbox Code Playgroud)
注意:如果关心密码安全性,无论你做什么,都不要使用单个HASH(盐+密码)算法(例如Django,PHPass等),因为这些算法可能非常粗暴.
在不了解您的设置的情况下很难具体说明。然而,你不应该做的一件事就是重新发明轮子。安全性很棘手,如果您的车轮缺少某些东西,您可能不知道,直到为时已晚。
如果您的 Web 框架附带用于处理用户、登录和会话的模块/库/插件,我不会感到惊讶。阅读它的文档并使用它:它希望是由对安全有所了解的人编写的。
如果您想知道它是如何完成的,请研究该模块的文档和来源。
归档时间: |
|
查看次数: |
5641 次 |
最近记录: |