Le linee guida Security and Design descrivono in modo approfondito vari metodi per rendere più difficile per un utente malintenzionato compromettere l'implementazione della fatturazione in-app.Buona ingegneria del software rispetto alla sicurezza
Particolarmente indicato è la facilità con cui si può decodificare un file .apk
, anche se occultato tramite Proguard. Quindi raccomandano persino di modificare tutto il codice di applicazione di esempio, in particolare "punti di ingresso noti e punti di uscita".
Quello che trovo manca è alcun riferimento al confezionamento certi metodi di verifica in un unico metodo, come la statica Security.verify()
che restituisce boolean
: Una buona pratica di progettazione (codice ridurre la duplicazione, riutilizzabile, più facile da eseguire il debug, auto-documentazione, ecc .) ma tutto ciò che un utente malintenzionato deve fare ora è identificare quel metodo e farlo sempre restituire true
... Quindi indipendentemente da quante volte l'ho usato, ritardato o non ritardato, a caso o no, semplicemente non importa.
D'altra parte, Java non ha macro come in C/C++, che consente di ridurre la duplicazione del codice sorgente, ma non ha un singolo punto di uscita per una funzione verify()
.
Così le mie domande:
Esiste un conflitto intrinseco tra i ben noti di ingegneria del software/codifica pratiche e di design per la cosiddetta sicurezza? (nel contesto di Java/Android/transazioni sicure almeno)
Cosa si può fare per mitigare gli effetti collaterali del "design per la sicurezza" che sembra "spararsi nel piede" in termini di complicazioni eccessive software che avrebbe potuto essere più semplice, più gestibile e più facile da eseguire il debug?
Potete raccomandare buone fonti per approfondire questo argomento?
Maday! Penso che abbiamo un hacker! –
Per In-app, credo che la classe di sicurezza debba essere il tuo server applicazioni. –
Il valore dell'offuscamento del codice è molto dibattuto, che è * non * per cosa è lo stackoverflow. –