跳转到主要内容

JavaScript Challenge-handshake认证django应用程序

项目描述

JavaScript Challenge-handshake认证django应用程序。

Build Status on travis-ci.org

travis-ci.org/jedie/django-secure-js-login

Coverage Status on coveralls.io

coveralls.io/r/jedie/django-secure-js-login

首先:Secure-JS-Login不是一个简单的“发送用户名 + PBKDF2-SHA(密码)”它更像是挑战-握手认证协议

待办事项

  • 修复示例项目中的“next_url”和所有链接

流程

保存新用户密码

客户端浏览器 / JavaScript部分

#. user input a password
  1. init_pbkdf2_salt = SHA1(随机数据)

  2. pbkdf2_hash = pbkdf2("Plain Password", salt=init_pbkdf2_salt)

  3. 客户端将 init_pbkdf2_saltpbkdf2_hash 发送到服务器

服务器部分

  1. 服务器将 pbkdf2_hash 分割为: first_pbkdf2_partsecond_pbkdf2_part

  2. encrypted_part = xor_encrypt(first_pbkdf2_part, key=second_pbkdf2_part)

  3. 只保存 encrypted_part 和来自客户端的给定 init_pbkdf2_salt

登录 - 客户端浏览器 / JavaScript部分

  1. 使用请求登录

  2. 服务器发送带有随机 server_challenge 值的HTML登录表单

  3. 用户输入他的 usernamepassword

  4. Ajax请求服务器上的 init_pbkdf2_salt,带有给定的 username

  5. 生成认证数据

    1. pbkdf2_temp_hash = pbkdf2("普通密码", init_pbkdf2_salt)

    2. pbkdf2_temp_hash 分割成 first_pbkdf2_partsecond_pbkdf2_part

    3. cnonce = SHA1(随机数据)

    4. pbkdf2_hash = pbkdf2(first_pbkdf2_part, salt=cnonce + server_challenge)

  6. pbkdf2_hashsecond_pbkdf2_partcnonce 发送到服务器

服务器上的验证

  1. 客户端 POST 数据:pbkdf2_hashsecond_pbkdf2_partcnonce

  2. 从会话中获取传输的 server_challenge

  3. 通过给定的 username 从数据库中获取 encrypted_partsalt

  4. first_pbkdf2_part = xor_decrypt(encrypted_part, key=second_pbkdf2_part)

  5. test_hash = pbkdf2(first_pbkdf2_part, key=cnonce + server_challenge)

  6. 比较 test_hash 和传输的 pbkdf2_hash

安全吗?

与 https 相比,Secure-JS-Login 并非真正安全!例如,客户端无法验证自己是否真的与服务器通信,或者遭遇了 中间人攻击

然而,所使用的程序比明文认证更安全。此外,服务器上不存储明文密码。存储在服务器上的数据不能单独使用。

如果您有 https,您可以将其与 Secure-JS-Login 结合使用,类似于将摘要认证与 https 结合。

更多信息: 为什么 Secure-JS-Login 有意义…(仅限德语,抱歉)

为什么?

许多,如果不是所有 CMS/wiki/forum,都使用了不安全的登录。用户名和密码以 明文 在互联网上发送。唯一可靠的解决方案是提供 https

问题:没有提供商提供少量金钱即可使用的安全 HTTP 连接 :(

替代方案

  • 摘要访问认证(在 django 中实现:django-digest

    • 优点

      • 浏览器已实现它,因此不需要额外的 JavaScript

    • 缺点

      • 密码哈希必须在服务器上保存,没有任何盐!由于哈希可以用于登录,因此: hash = MD5(username:realm:password)

      • 使用了旧的 MD5 哈希

尝试

例如。

~ $ virtualenv secure-js-login-env
~ $ cd secure-js-login-env
~/secure-js-login-env $ source bin/activate

# install secure-js-login as "editable" to have access to example project server and unittests:

(secure-js-login-env)~/secure-js-login-env $ pip install -e git+git://github.com/jedie/django-secure-js-login.git#egg=django-secure-js-login

run example project server:
{{{
(secure-js-login-env)~/secure-js-login-env $ cd src/django-secure-js-login/
(secure-js-login-env)~/secure-js-login-env/src/django-secure-js-login $ ./run_example_server.sh

运行 inittests

(secure-js-login-env)~/secure-js-login-env/src/django-secure-js-login $ ./runtests.py

要运行 Live-Server-Tests,安装 selenium 例如。

(secure-js-login-env)~/secure-js-login-env/src/django-secure-js-login $ pip install selenium
(secure-js-login-env)~/secure-js-login-env/src/django-secure-js-login $ ./runtests.py

版本兼容性

secure-js-login

Django

Python

>=v0.1.0

v1.7, v1.8

v2.7, v3.4

(这些是单元测试变体。也许其他版本也兼容。)

变更日志

使用的 JavaScript 实现

联系方式

加入对话,除了github的通信功能外

IRC

#pylucid 在 freenode.net (是的,PyLucid 频道…)

网络聊天

https://webchat.freenode.net/?channels=pylucid

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-secure-js-login-0.2.0.tar.gz (43.2 kB 查看散列)

上传时间:

构建分布

django_secure_js_login-0.2.0-py2.py3-none-any.whl (72.6 kB 查看散列)

上传时间: Python 2 Python 3

由以下机构支持