CherryPy中的用户管理
我打算用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认证系统进行交互,但看起来你的应用需要自己管理用户和密码。你可以把注册的用户和密码加密后放在数据库表里,然后根据上面博客中提到的方案进行调整。