Zope 中受限制的 Python - 未经授权的错误

Restricted Python in Zope - Unauthorized Error

提问人:kittonian 提问时间:9/20/2023 更新时间:9/20/2023 访问量:28

问:

我在 Zope (5.8.3) ZMI 中有一个 python 脚本。当我运行 Zope 5.5.1 时,这运行良好,但由于我升级到 5.8.3 并因此更新了所有随附的 python 模块,我现在收到错误:

未经授权:在此上下文中无法访问验证

verify 是加密库的一部分,更具体地说是此 Ed25519 类中的 ED25519 模块。我已经允许了必要的模块和类,甚至方法from_public_bytes工作正常。但是,我需要允许使用 verify,以便此脚本再次工作,并且在过去两天中一直在阅读代码并尝试了一堆 allow 语句,但无济于事。

希望有人能对此有所了解,因为现在,我不得不为验证行创建一个外部方法,以使 API 恢复并运行。我宁愿能够像以前一样在 ZMI 内部执行此操作。

这是我在 init.py 中为允许语句提供的内容:

from Products.PythonScripts.Utility import allow_module, allow_class
from AccessControl import ModuleSecurityInfo, ClassSecurityInfo

allow_module("base64")
allow_module("Crypto")
allow_module("Crypto.Cipher")
allow_module("cryptography")
allow_module("cryptography.exceptions")
allow_module("cryptography.fernet")
allow_module("cryptography.hazmat")
allow_module("cryptography.hazmat.primitives")
allow_module("cryptography.hazmat.primitives.asymmetric")
allow_module("cryptography.hazmat.primitives.asymmetric.ed25519")
allow_module("cryptography.hazmat.primitives.asymmetric.x25519")
allow_module("cryptography.hazmat.primitives.kdf.hkdf")
allow_module("json")
allow_module("ZcPassword")

from Crypto.Cipher import ChaCha20_Poly1305
allow_class(ChaCha20_Poly1305)
from Crypto.Cipher.ChaCha20_Poly1305 import ChaCha20Poly1305Cipher
allow_class(ChaCha20Poly1305Cipher)

from cryptography.exceptions import InvalidSignature
allow_class(InvalidSignature)
from cryptography.fernet import Fernet
allow_class(Fernet)
from cryptography.hazmat.primitives import hashes
allow_class(hashes)
from cryptography.hazmat.primitives.asymmetric import ec
allow_class(ec)
from cryptography.hazmat.primitives.asymmetric import ed25519
allow_class(ed25519)
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PublicKey
allow_class(Ed25519PublicKey)
from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PrivateKey
allow_class(X25519PrivateKey)
from cryptography.hazmat.primitives.asymmetric.x25519 import X25519PublicKey
allow_class(X25519PublicKey)
from cryptography.hazmat.primitives.kdf.hkdf import HKDF
allow_class(HKDF)

以下是用于测试的示例脚本:

import base64
import json
from cryptography.exceptions import InvalidSignature
from cryptography.hazmat.primitives.asymmetric import ed25519

json_data = '"data":{"userID":"1234567"}'
signature_key = 'KpHjhW7uQ0N8='
signature = '5mXx/ubEK+BfbgSSq8JwAw=='

# Get the digital signature
digital_signature = base64.b64decode(signature)
pubKey = base64.b64decode(signature_key)
public_key = ed25519.Ed25519PublicKey.from_public_bytes(pubKey)

# Verify signature if the device id has been verified
try:
    public_key.verify(digital_signature, json_data.encode())
    # print("Signature verified")
except Exception as e:
    print(f"An error occurred: {e}")

return(printed)

注意:显然,示例中显示的值是用于测试的虚假值。脚本本身很好。我只需要允许访问,这样我就可以在受限制的 python 中使用来自 ZMI 的验证。

Python 安全 Zope python-cryptography ed25519

评论


答: 暂无答案