Управление пользователями в CherryPy - PullRequest
2 голосов
/ 04 сентября 2011

Я собираюсь разработать веб-приложение на основе CherryPy. Это будет приложение, в котором публичные пользователи могут зарегистрироваться, а затем войдут в систему - обычные вещи. Другие фреймворки, такие как Rails и Django, содержат сложный код, касающийся безопасности: зашифрованные и соленые пароли, предотвращение перехвата сеансов, ... Есть ли что-то подобное для CherryPy? Пока я нашел только очень простые решения!?

Ответы [ 2 ]

1 голос
/ 18 января 2013

Я использовал этот пример аутентификации, включая исправления в комментариях.

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'))

Надеюсь, это поможет!

Andrew

1 голос
/ 19 сентября 2011

Это помогает? - Учебное пособие по CherryPy и базовая аутентификация (копия из Интернет-архива)

У меня есть приложение cherypy, которое использует модуль ldap для взаимодействия с системой аутентификации ldap, но, похоже, вашему приложению необходимо управлять usr / passwds внутри себя. Вероятно, вы можете поместить зарегистрированного пользователя / пароли в зашифрованном виде в таблицу базы данных и настроить схему, описанную в приведенном выше блоге.

...