Vai al contenuto
Home » Creiamo una stringa di caratteri casuali con Owasp ESAPI e Java

Creiamo una stringa di caratteri casuali con Owasp ESAPI e Java

Spesso si ha l’esigenza di creare una stringa di caratteri alfanumerici che sia
casuale. Ad esempio possiamo usarla come password temporanea, come salt per
offuscare una password, come chiave, …

Senza inventare un’altra volta la ruota, possiamo usare la libreria Owasp
ESAPI
1. Il progetto Owasp ESAPI nasce con lo scopo di fornire
una serie di API che realizzano controlli di sicurezza. Il codice è opensource
e viene costantemente rivisto dalla community. Io ero il maintainer di Owasp
ESAPI for ruby
anche se è un paio
d’anni che mi riprometto di riprendere in mano tutto… non è detto che un
giorno non lo faccia.

Per compilare ed eseguire il codice che poi vi mostro, avete bisogno del jar
file della libreria che potete recuperare partendo dalla pagina del progetto
sul sito Owasp

Inoltre avrete bisogno di un file, ESAPI.properties che contiene alcune
configurazioni per il fine tuning della libreria. Ecco, io me lo sono pescato
dal repository dei sorgenti, potrebbe essere una bella miglioria se questo file
venisse generato con i valori di default nel caso non fosse trovato.

Il mio lo potete trovare qui.

Il codice di per se è abbastanza banale. Create un’istanza della classe
DefaultRandomizer e le chiedete di generare per voi una stringa random di 32
caratteri alfanumerici.

Tutta la magia è nella libreria e voi avete la voltra stringa random in 2 righe
di codice.

import org.owasp.esapi.reference.DefaultRandomizer
import org.owasp.esapi.EncoderConstants

public class CreateRandomString {
  public static void main(String args[]){
    DefaultRandomizer r = (DefaultRandomizer) DefaultRandomizer.getInstance
    System.out.println("32 char string: " + r.getRandomString(32, EncoderConstants.CHAR_ALPHANUMERICS
    }
}

Compilare ed eseguire il codice è semplice. Io, come sapete, non scrivo codice
Java dai tempi di Owasp Orizon, quindi non ho un ambiente
preparato e non ho un $CLASSPATH interessante. Passo il percorso del JAR di
Owasp Esapi direttamente da linea di comando, ipotizzando si trovi nella stessa
directory dove avete creato il file CreateRandomString.java.

Lo stesso dicasi per l’esecuzione della classe, in questo caso il $CLASSPATH
dovrà avere anche la directory ‘.’ in quando il vostro bytecode si trova lì e
java non lo include automaticamente tra i path da cercare.

L’output come vedete è una stringa, in questo caso specifico di 32 caratteri,
con un encoding che ne permette la semplice memorizzazione senza dover
ricorrere alla codifica unicode. I caratteri di questa stringa sono generati
con le API SecureRandom del JDK. In questo caso le chiamate di ESAPI sono solo
dei wrapper e poco più, alla chiamata nativa e sicura offerta dal linguaggio.

$ javac -cp esapi-2.1.0.jar CreateKeys.java
$ java -cp esapi-2.1.0.jar:. CreateKeys

32 char string: nTIL3FJccrnkfbbYiJsBiRDQkovdkLjj

Off by one

Owasp ESAPI è un bel progettone ed offre agli sviluppatori delle
API che possono essere utilizzate in codice di produzione per aggiungere
controlli di security. Il codice ha un livello di maturità tale da essere usato
in portali di grosse dimensioni senza il pericolo che faccia crollare il vostro
bel castello di carte.

ESAPI è disponibile in molti linguaggi oltre a Java: PHP, Ruby, .NET tra quelli
più usati per le web application. Sarebbe interessante farne il porting anche
per Go o qualche framework javascript come NodeJs.

Sicuramente usare un’API come Owasp ESAPI non può che aiutare lo
sviluppatore ad introdurre controlli di security senza dover entrare nel
dettaglio di quali siano tutti i modi per mitigare un cross site scripting, una
sql injection o un cross site request forgery.

EDIT erano rimasti dei link non valorizzati. Ora sono tutti aggiustati e potete navigare allegri nella Internet.

  1. Cos’è Owasp? Owasp è un acronimo per Open Web Application Security
    Project. E’ una community che raccoglie specialisti del settore dell’ICT
    security con lo scopo di creare awareness, realizzare guide e documentazione,
    realizzare codice che permettano lo sviluppo di applicazioni web sicure. 

Tag:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.