Tipo di stringa corrotta in Kotlin

2

Due delle prime 3 vulnerabilità di sicurezza nel OWASP Top 10 provengono dall'input dell'utente fidato (Injection e XSS). Per far fronte a questo, Ruby ti consente di "contaminare" le stringhe ricevute dall'utente come non sicure.

In un linguaggio sicuro come Kotlin puoi (in teoria) fare un ulteriore passo avanti con una classe Tainted che avvolge String , ma non è estesa da CharSequence . Quindi ovunque scrivi l'output HTML (ad esempio), devi eseguire tutti i tuoi oggetti Tainted attraverso un escapeHtml(Tainted t) , escapeSql(Tainted t) o escapeUrl(Tainted t) , oppure ottieni un errore di compilazione.

Posso creare una classe Tainted anche in Kotlin, ma i Modelli di stringhe di Kotlin supponi che ogni classe abbia un metodo toString() e non faccia alcun reclamo quando scrive questi oggetti Tainted nelle stringhe, quindi sconfigge la maggior parte degli scopi di una classe contaminata.

C'è un modo per generare un errore in fase di compilazione in Kotlin quando faccio questo:

val t = Tainted("Robert'); DROP TABLE STUDENTS; --")
return "SELECT * FROM STUDENTS WHERE NAME IN ($t);"

Se esistesse un modo per escludere una classe dal lavorare all'interno di un modello di stringhe (e StringBuilder), lo farebbe. O un'impostazione del compilatore per generare un errore quando si usano determinate classi o classi? Mi sto solo chiedendo se qualcuno ha trovato un modo per farlo efficacemente in Kotlin.

Senza questo, potrebbe comunque esserci un vantaggio nell'usare una classe Tainted in " Rendere errato l'aspetto sbagliato " , anche se l'IDE e il compilatore possono rilevare solo alcuni e non tutti gli errori di codifica.

    
posta GlenPeterson 27.05.2016 - 22:52
fonte

0 risposte

Leggi altre domande sui tag