CherryPy中的用户管理

2 投票
2 回答
1811 浏览
提问于 2025-04-17 01:24

我打算用CherryPy开发一个网页应用。这是一个让公众用户可以注册并登录的应用,基本上就是这些常见的功能。像Rails和Django这样的框架在安全性方面有很多复杂的代码,比如加密和加盐的密码、预防会话劫持等等。请问CherryPy有没有类似的现成解决方案呢?到目前为止我只找到了一些非常简单的解决办法!

2 个回答

1

我使用了这个认证的例子,还包括了评论中的修复内容。

http://tools.cherrypy.org/wiki/AuthenticationAndAccessRestrictions

下面是我加密的方式

import Crypto.Random
from Crypto.Cipher import AES
import hashlib

# salt size in bytes
SALT_SIZE = 16

# number of iterations in the key generation
NUMBER_OF_ITERATIONS = 20

# the size multiple required for AES
AES_MULTIPLE = 16


__all__ = ['Encryption']

class Encryption(object):
    def generate_key(self, password, salt, iterations):
        assert iterations > 0    
        key = password + salt    
        for i in range(iterations):
            key = hashlib.sha256(key).digest()  

    return key

    def pad_text(self, text, multiple):
        extra_bytes = len(text) % multiple    
        padding_size = multiple - extra_bytes    
        padding = chr(padding_size) * padding_size    
        padded_text = text + padding

        return padded_text

    def unpad_text(self, padded_text):
        padding_size = padded_text[-1]    
        text = padded_text[:-padding_size]

        return text


    def encrypt(self, plaintext, password):
        salt = Crypto.Random.get_random_bytes(SALT_SIZE)    
        key = Encryption.generate_key(self, password, salt, NUMBER_OF_ITERATIONS)    
        cipher = AES.new(key, AES.MODE_ECB)    
        padded_plaintext = Encryption.pad_text(self, plaintext, AES_MULTIPLE)    
        ciphertext = cipher.encrypt(padded_plaintext)    
        ciphertext_with_salt = salt + ciphertext

        return ciphertext_with_salt

然后调用加密函数

encryptedPassword = Encryption.encrypt(self, Password, bytes(cherrypy.request.app.config['Encryption']['Password'], 'UTF-8'))

希望这对你有帮助!

安德鲁

1

这有帮助吗? - CherryPy 摘要和基本认证教程(互联网档案馆复制)

我有一个使用cherrypy的应用程序,它通过ldap模块与ldap认证系统进行交互,但看起来你的应用需要自己管理用户和密码。你可以把注册的用户和密码加密后放在数据库表里,然后根据上面博客中提到的方案进行调整。

撰写回答