Come impedire che un'app crittografata sul lato client venga utilizzata come spazio di archiviazione generale?

1

Il design dell'applicazione è semplice:

Input utente > Serializza come JSON > Encrypt sul lato client > Carica sul server

L'oggetto che si sta memorizzando è strutturato in questo modo:

type: <type1|type2|type3>
    type_specific_field1: "value1"
    type_specific_field2: "value2"
    type_specific_field3: "a_very_long_value_such_as_image_data"

Tutto ciò che il server vede è un blob crittografato. Per motivi di privacy, al server non è consentito nemmeno visualizzare type o i nomi dei campi. L'utente può creare tutti gli oggetti che desidera e ogni oggetto può essere grande (ad esempio 10 MB).

Il problema è che un utente può archiviare dati arbitrari nel blob crittografato e il server non avrebbe modo di verificare se i dati caricati sono o meno un oggetto valido. Potrebbero (ab) utilizzare il server come alternativa di archiviazione su cloud a Dropbox, S3, ecc. Anziché per lo scopo previsto.

Idee per la mitigazione che ho finora:

  • Limitazione della velocità di rete per utente / indirizzo IP.
  • Limita il numero di oggetti per utente.
  • Richiedere una prova di lavoro per ciascun oggetto.
  • Richiedi CAPTCHA inserisci ogni oggetto X.

Idee che potrebbero funzionare in casi simili ma non in questo:

  • "Prova di spazio" non funzionerà in questo caso perché il client non è tenuto a conservare una copia degli oggetti che carica.
  • Anche il pagamento per ogni oggetto o unità di archiviazione non funzionerà in questo caso perché l'applicazione è gratuita.

Le mitigazioni che ho elencato aiutano sicuramente ma non eliminano la possibilità di abusi e ognuna ha effetti dannosi per gli utenti legittimi.

C'è un modo per il client di provare, o il server per verificare, che il blob crittografato contiene un oggetto valido? O altre mitigazioni crittografiche, a livello di rete o a livello di applicazione a cui puoi pensare?

    
posta Anders 26.04.2018 - 02:35
fonte

1 risposta

1

Se stai permettendo di memorizzare oggetti sul tuo server e devi limitare la quantità di spazio di archiviazione per utente, devi introdurre una quota per utente e negare nuovi caricamenti o eliminare quelli più vecchi. Altre cose non funzioneranno in modo affidabile se la tua crittografia è abbastanza buona e gli utenti vogliono abusare delle tue risorse.

Senza conoscere il tuo caso d'uso concreto è difficile dare altri consigli.

Potresti voler aggiungere alla tua domanda perché non vuoi limitare il numero di oggetti. Ovviamente do vuoi limitarli, ma stai cercando di evitare di conteggiare gli oggetti / lo spazio di archiviazione usati dagli oggetti ma limitarli riducendo la velocità che possono essere creati.

    
risposta data 26.04.2018 - 13:51
fonte

Leggi altre domande sui tag