Soluzione della chiave di licenza nell'applicazione Web, qual è l'approccio migliore?

13

Sono perplesso su richiesta del mio manager. Lavoro per una piccola startup e abbiamo sviluppato un'applicazione web a tasso fisso con un contratto di manutenzione per un'azienda MOLTO più grande. Conoscendo storie dell'orrore su come le grandi aziende pagheranno solo le loro fatture all'ultimo secondo abbiamo deciso che vorremmo proteggerci essendo in grado di concedere in licenza questa applicazione web in modo che se non veniamo pagati il software non funziona più.

L'ho già visto prima per applicazioni desktop, tuttavia questa sarà un'applicazione web che ospiterà internamente e non sarà accessibile da Internet.

Qual è l'approccio migliore per farlo, vorremmo avere un ingombro ridotto e gradire la possibilità di rinnovare la chiave di licenza che hanno distribuito.

Qualcuno ha fatto qualcosa di simile? Siamo completamente fuori di testa? Qualcuno ha suggerimenti migliori?

    
posta maple_shaft 13.06.2011 - 21:59
fonte

6 risposte

9

Ci sono molti modi per implementare qualcosa di simile, ma eccone uno che non dovrebbe essere troppo difficile da fare:

Hai bisogno di un sito web pubblicamente disponibile da qualche parte che ospita un file contenente gli hash delle chiavi di licenza che sono state inserite nella lista nera. La gestione di questo file dipende da te, ma il file stesso deve avere solo un hash per riga.

Quindi, su base ricorrente, il tuo software avvia il download di questo file (la maggior parte delle lingue sul lato server lo prevede) e poi lo cerca per l'hash della chiave di licenza installata. Se viene trovato, l'applicazione sa che dovrebbe morire fino a quando la lista nera non viene rimossa.

MD5 o simili più un segreto dovrebbero essere sufficienti per questo. Potresti diventare più fan e richiedere che l'applicazione invii la richiesta al tuo sito e la cerchi in un database al volo, ma il file (per quello che presumo si spera sarebbe una breve lista) si spera che rimanga piccolo e possa essere il modo più semplice.

La parte più difficile sarà mantenere l'applicazione morta. Dopotutto, devi immagazzinarlo da qualche parte internamente, il che significa che se è troppo ovvio potrebbe essere facilmente sovvertito, e anche se non è troppo ovvio, può essere facilmente ripristinato ripristinando la / e tabella / i appropriata / File). Pertanto suggerisco anche un secondo metodo di protezione.

Questo metodo memorizzerebbe "LIVE" o "DEAD" (o qualcosa di sufficientemente simile) in una tabella o in un file, ma ancora HASH. Questo deve essere sottoposto a hash con il tuo sale E un timestamp. Ogni volta che viene eseguita una pagina dell'applicazione, controllare questo valore con una versione hash di "LIVE" + salt + timestamp e quindi consentire un intervallo valido di data e ora (ad esempio, un giorno, due giorni, una settimana, un mese, ecc. Tenete a mente che più ampia è la gamma, maggiore sarà la prestazione più dura.). Finché le cose coincidono (o viene trovata una corrispondenza), l'app è viva; in caso contrario, anche se il valore nel file o nella tabella speciale è "LIVE", sarà comunque morto se si tenta di ripristinare dal backup perché il timestamp non rientra nella soglia.

In sintesi (questo presuppone che tu abbia qualche metodo programmatico per controllare la validità di una chiave di licenza, come una sorta di checksum o altro metodo):

  • CheckBlacklist
    • Converti codice di licenza in hash con sale
    • Richiedi il file della lista nera dal server
    • Il mio hash è nel file?
    • Se SÌ, memorizza l'hash di "DEAD" + salt + timestamp (troncato in base al giorno, non è necessario memorizzare ore + giorni + minuti)
    • Se NO, memorizza l'hash di "LIVE" + sale + timestamp (trunc'd)
  • IsKeyAlive
    • Crea hash da "LIVE" + salt + trunc'd timestamp
    • Carica hash DeadAlive
    • Sono d'accordo?
    • Se SÌ, allora siamo vivi; return TRUE.
    • Se NO, forse siamo morti, ma potremmo essere ancora nella finestra del timestamp:
      • Sottrai un giorno dal timestamp e ripeti l'hash.
      • Siamo d'accordo ora?
      • SI? Ritorna TRUE
      • Aggiungi un giorno al timestamp e ripeti hash
      • Siamo d'accordo ora?
      • SI? Ritorna TRUE
    • A questo punto, siamo fuori dalla gamma data / ora senza corrispondenza. Restituire FALSE. (Kill app)

Ora, Dio sa che c'è un milione e un modo in cui questo può fallire. Considera tutti i modi possibili e costruisci un sistema affidabile (incluso uno che presuppone che il client sia corretto se il file della lista nera non può essere scaricato). Provalo, testalo, testalo e testane altri prima di distribuirlo, perché se va male, avrai perso la fiducia del tuo cliente.

    
risposta data 14.06.2011 - 05:33
fonte
4

Le altre risposte hanno già fatto un buon lavoro nel coprire il lato tecnico. Ma considera anche il lato legale.

Hai persino il diritto di bloccare la loro app se non pagano? Se non hai menzionato questo in anticipo nel contratto, potresti non avere il diritto di farlo, anche se i pagamenti scadono (come se non avessi necessariamente il diritto di rientrare in possesso di qualcosa che hai venduto). Inoltre, molti paesi hanno leggi speciali che vietano la "manipolazione dei programmi per computer" - ciò che si fa potrebbe essere considerato come tale e potrebbe persino esporvi a responsabilità penale.

Quindi consiglierei di discuterne prima con un avvocato, per evitare di immergerti nell'acqua calda.

Alla fine, potrebbe essere meglio fare affidamento sul sistema legale. Se non pagano, negoziano, e se ciò non aiuta, basta citare in giudizio. In molti paesi, fare causa è relativamente indolore & a buon mercato se la situazione del contratto è chiara (in Germania ad esempio puoi ottenere un Mahnbescheid per meno di 20 €).

    
risposta data 14.06.2011 - 09:57
fonte
2

Se stanno ospitando internamente, come è diverso da qualsiasi altro software che potresti spedire? Scopri cosa farebbe se stessimo spedendo, ad esempio, un'applicazione di visualizzazione dell'inventario desktop e lo faccia.

    
risposta data 13.06.2011 - 22:30
fonte
1

Dipende dal sistema. Hai ampliato un framework esistente come Magneto o hai scritto un'intera applicazione da zero? Se è il più tardi, costruire un requisito di licenza non è troppo difficile. Devi solo consegnare l'applicazione con una licenza a breve termine, una che scade dopo 45 giorni dalla fatturazione e poi assegnarne una in seguito.

Questo presuppone che tu non stia invertendo la sorgente. :)

    
risposta data 13.06.2011 - 22:03
fonte
1

Dato che il sistema è ospitato internamente, molte delle soluzioni citate sopra che comportano la comunicazione con un server remoto potrebbero non funzionare.

Perché non includere invece un file di licenza all'interno del progetto che include una data di scadenza. Quando l'orologio di sistema supera la data di scadenza, il sistema smette di funzionare. Per proteggere il file, crittografare il contenuto per evitare manomissioni. Quando l'utente paga o rinnova per un anno in più, gli viene inviato un nuovo file di licenza.

Si noti che se si utilizza PHP, il codice è prontamente disponibile per l'utente da modificare, quindi indipendentemente dal tipo di sicurezza che si installa, l'utente può facilmente accedere e rimuoverlo. Se stai usando ASP.NET o qualche altro linguaggio compilato, questo non è un problema in quanto il codice non può essere modificato.

    
risposta data 14.06.2011 - 12:50
fonte
1

(Divulgazione - Lavoro per Agilis Software, un fornitore di gestore delle licenze sistemi).

La soluzione più efficace è utilizzare l' attivazione del prodotto automatizzata con un contratto di licenza. Questo ti consente di:

  • Attiva automaticamente la (e) licenza (i) del cliente. Al momento dell'attivazione ogni istanza viene automaticamente bloccata sui parametri scelti del sistema di destinazione e i limiti di licenza impostati per essi verranno applicati all'applicazione (ad esempio, configurazione delle funzionalità, impostazione di un periodo di prova o di un limite di sottoscrizione complessivo).
  • Imposta un "intervallo di affitto", che è il periodo di validità massimo di ogni evento di attivazione. Per i clienti con credito sospetto è possibile impostare questo, per esempio due settimane, il che significa che ogni due settimane la tua app automaticamente 'telefono di casa' in background per riconvalidare la licenza. Se sono in ritardo sul pagamento, puoi disabilitare la loro licenza nel server ospitato e smetterà di funzionare sul telefono successivo.
  • Se non esiste una connessione di rete dal sistema di destinazione, esiste un processo di attivazione self-service dell'utente tramite lo scambio di file crittografati su qualsiasi terminale web. Se il tuo utente si trova in questa posizione, potresti decidere di prolungare l'intervallo di affitto per bilanciare l'inconveniente con il tuo bisogno di essere pagato. Una volta pagati, puoi effettuare l'intervallo di leasing finché vuoi, fino al perpetuo.
risposta data 19.07.2011 - 19:26
fonte

Leggi altre domande sui tag