金字塔的加密签名查询参数

pyramid-signed-params的Python项目详细描述


Latest VersionSupported Python versionsLicensebuild status

说明

这个包为pyramid应用程序提供了一个签名参数的方法 在查询字符串(或post主体)中传递的。

最初的动机是能够通过return_url 不将应用程序转换为打开的重定向程序。

其他用例包括能够生成url(例如包括在 电子邮件)可用于绕过正常的身份验证/授权 机制。

安装

Pyramid-signed-params可以使用pipPyPI安装,或者 easy_install(或buildout)您可能应该在虚拟机中安装它 环境。

配置

必须在应用程序设置中配置至少一个签名密钥。 秘密应该是一个随机的,不可加密的字符串。例如,在你的应用程序中 .ini文件:

pyramid_signed_params.secret = RGWO7nZ6W6AiPIUcXQN2iahJIThwH9BbpyZ7Lc1XfaOkPGt1GY

提示

您可以指定多个签名密钥(每行一个)。 是的,第一个密钥将用于签名,而所有密钥将 验证签名时尝试。这在滚动时很有用 拿出一个新的签名密钥。

通过将包包含在金字塔应用程序中来激活它。

config.include('pyramid-signed-params')

这将向金字塔的request添加两个新属性。

  • request.sign_query(query, max_age=None, kid=None)

    用于签署查询参数,例如

    # Pass the current URL as a signed *return_url* parameter to another viewquery={'return_url':request.url}other_url=request.route_url('other',_query=request.sign_query(query))

    参数max_age可用于生成在某个 时间量。

    传递kid="csrf"将创建 每当会话的csrf令牌更改时无效。

  • request.signed_params

    这个reified属性将包含一个用all填充的multidict 传递给请求的参数已使用有效的 签名。

基本用法示例

构造一个可以通过电子邮件发送的url,以允许更改 给定用户的密码:

# Construct a URL with some signed parameters
params = {'userid': 'fred', 'action': 'change-pw'}
signed_params = request.sign_query(params, max_age=3600)
url = request.route_url('change-pw', _query=signed_params)

然后,在“更改pw”视图中:

if request.signed_params['action'] != 'change-pw':
    raise HTTPForbidden()
userid = request.signed_params['userid']

# Do whatever needs to be done to change the given users password

注意,因为我们将max_age=3600传递给了sign_query,所以 url只能工作一个小时。

小心

此包不提供针对重播攻击的固有保护。 如果攻击者有权访问一组签名参数,他可以通过 那些未经修改的签名参数,指向应用程序中的任何url(或 其他应用程序共享相同的签名密钥。)

更改

下一版本0.1b5(2018-03-08)

  • PyJWT1.6中使用新的更具体的InvalidSignatureError 赞成使用泛型DecodeError来检测无效签名 (如果有。)

测试

  • PyJWT1.6和1.5.3下测试。
  • 修复pytest3.4中默认日志级别的更改。
  • pytest3.3开始,pytest-catchlog已经被卷进pytest核心。

发布0.1b4(2017-12-18)

包装
  • 放下CPython 3.3分类器

发布0.1b3(2017-12-18)

兼容性

  • 放弃对Python3.3的支持。

包装
  • 在sdist中包含license.txt和pytest.ini。

发布0.1b2(2017-11-16)

  • 更改signed_params具体化请求方法,以便 访问request.params时捕获UnicodeDecodeErrors, 并返回一个空的dict。(如果参数不正确 已编码,没有有效的有符号参数。)

发布0.1b1(2017-11-16)

  • 放弃对Python2.6的支持。在Python3.6下测试。

安全性

  • 在解码jwts时显式指定允许的算法。

版本0.1a5(2016-11-13)

  • 删除(中断的)配置时间警告如果没有服务 注册为ISignedParamsService。(当autocommit是 关闭,始终会发出此警告。)

版本0.1A4(2016-11-02)

  • 配置JWT签名密钥的设置 从重命名为pyramid_signed_param.secretpyramid_signed_param.secrets。基本用法只涉及一个 秘密。(两个允许秘密轮换,任何配置的秘密都是 在验证签名时接受,但只有第一个用于 创建新签名。)
  • Pyramid_signed_params.include如果 ISignedParamsService未配置。
  • JWTSecretProviderFactory现在引发一个ConfigurationError 如果在应用程序settings中找不到机密。

版本0.1a3(2016-11-02)

初次发布。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用安卓中不同Java类中声明的变量   java Paypal重新授权失败DCC\u不允许重新授权\u   java删除Nattable中的行号   Java扫描器在循环时数据类型验证中输入错误后未读取换行符   java如何使用jsoup计算div的数量?   java嵌套这样的try/finally子句安全吗?   Java中的安卓格式浮点数(#.#.#.#.#)   java为什么maven总是指向JRE的较低版本   Java中的对象GUI网格   具有中心值和基于值的背景的java单元格   在java中,如何检查布尔值是否存在介于两个数字之间的数字?   等于Java 1.7对hashCode()的重写,其行为不符合我的预期   java使用来自Netbeans的JDBC资源和servlet