Re: [Python] Encryption at rest

2018-04-05 Per discussione Manlio Perillo
2018-04-05 10:35 GMT+02:00 Lorenzo Mainardi :
> Buongiorno a tutti,
> ho una webapp che usa Flask + SQLAlchemy. Mi devo mettere in regola con il
> GDPR usando un prodotto esterno che cifra/decifra al volo alcuni campi del
> DB.
> Ad esempio: supponiamo che io abbia il numero di carta di credito
> 1234-5678-8765-4321.
> Quando lo voglio scrivere nel db passo il numero della carta di credito al
> servizio (tramite una API REST) e lui mi ritorna il dato cifrato
> --- che poi vado a salvare nel db.
>
> Quando voglio leggere un dato dal DB, devo fare il contrario.
>
> Come posso integrare questa roba con SQLAlchemy?
> Avevo pensato di usare un decoratore, ma poi mi sono un po' arenato.
>

Puoi utilizzare un tipo personalizzato:
http://docs.sqlalchemy.org/en/latest/core/custom_types.html#augmenting-existing-types


Il problema รจ passare i parametri per l'API esterna che usi, ma li
puoi salvare come variabili globali o salvarli nell'instanza di
dialect che viene passato ai metodi del tipo personalizzato.

Ad esempio:


class SecureString(types.TypeDecorator):
'''Encrypt Unicode values using some API.
'''

impl = types.Unicode

def process_bind_param(self, value, dialect):
return api.encrypt(value, dialect.encrypt_api_params)

def process_result_value(self, value, dialect):
return api.decrypt(value, dialect.encrypt_api_params)

def copy(self, **kw):
return MyType(self.impl.length)


engine = create_engine('postgresql://scott:tiger@localhost:5432/mydatabase')
engine.dialect.encrypt_api_params = {
'a': 1,
'b': 2
}


Manlio
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Encryption at rest

2018-04-05 Per discussione Pietro Brunetti
A questo punto un contesto sarebbe carino. With decoder:.Ti ricordo che un
decoratore cambia irrimediabilmente una funzione.

Il gio 5 apr 2018, 12:04 Lorenzo Mainardi  ha scritto:

> Un decoratore di cosa? Se proprio vuoi fare una chiamata ad api esterne
>> dall'ORM
>> fatti un tipo http://docs.sqlalchemy.org/en/latest/core/custom_types.html
>
>
> Ad esempio io ho due funzioni: insert_on_db(dato_in_chiaro)  e
> retrieve_from_db(). Ovviamente ambedue lavorano con i dati in chiaro.
>
> I decoratori che volevo fare erano due:
>
> @encrypt
> insert_on_db(dato_in_chiaro)
>
> e
>
> @decrypt
> retrieve_from_db()
>
> In questo modo ridurrei al minimo l'impatto sul db e sul codice.
> Che ne pensate?
>
> --
> LORENZO MAINARDI
>
> ___
> Python mailing list
> Python@lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Encryption at rest

2018-04-05 Per discussione Lorenzo Mainardi
>
> Un decoratore di cosa? Se proprio vuoi fare una chiamata ad api esterne
> dall'ORM
> fatti un tipo http://docs.sqlalchemy.org/en/latest/core/custom_types.html


Ad esempio io ho due funzioni: insert_on_db(dato_in_chiaro)  e
retrieve_from_db(). Ovviamente ambedue lavorano con i dati in chiaro.

I decoratori che volevo fare erano due:

@encrypt
insert_on_db(dato_in_chiaro)

e

@decrypt
retrieve_from_db()

In questo modo ridurrei al minimo l'impatto sul db e sul codice.
Che ne pensate?

-- 
LORENZO MAINARDI
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Encryption at rest

2018-04-05 Per discussione Riccardo Magliocchetti

Il 05/04/2018 10:35, Lorenzo Mainardi ha scritto:

Buongiorno a tutti,
ho una webapp che usa Flask + SQLAlchemy. Mi devo mettere in regola con il
GDPR usando un prodotto esterno che cifra/decifra al volo alcuni campi del
DB.
Ad esempio: supponiamo che io abbia il numero di carta di credito
1234-5678-8765-4321.
Quando lo voglio scrivere nel db passo il numero della carta di credito al
servizio (tramite una API REST) e lui mi ritorna il dato cifrato
--- che poi vado a salvare nel db.

Quando voglio leggere un dato dal DB, devo fare il contrario.

Come posso integrare questa roba con SQLAlchemy?
Avevo pensato di usare un decoratore, ma poi mi sono un po' arenato.


Un decoratore di cosa? Se proprio vuoi fare una chiamata ad api esterne dall'ORM 
fatti un tipo http://docs.sqlalchemy.org/en/latest/core/custom_types.html


--
Riccardo Magliocchetti
@rmistaken

http://menodizero.it
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


[Python] Encryption at rest

2018-04-05 Per discussione Lorenzo Mainardi
Buongiorno a tutti,
ho una webapp che usa Flask + SQLAlchemy. Mi devo mettere in regola con il
GDPR usando un prodotto esterno che cifra/decifra al volo alcuni campi del
DB.
Ad esempio: supponiamo che io abbia il numero di carta di credito
1234-5678-8765-4321.
Quando lo voglio scrivere nel db passo il numero della carta di credito al
servizio (tramite una API REST) e lui mi ritorna il dato cifrato
--- che poi vado a salvare nel db.

Quando voglio leggere un dato dal DB, devo fare il contrario.

Come posso integrare questa roba con SQLAlchemy?
Avevo pensato di usare un decoratore, ma poi mi sono un po' arenato.

Avete qualche suggerimento?
Grazie

-- 
LORENZO MAINARDI
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python