2016-12-09 1 views
1

Ich habe den folgenden Code zum Implementieren eines Dropdown-Menüs. Der Benutzer wählt zwei Werte, und, basierend auf der Eingabe wählt die Abfrage, um die entsprechenden Spalten an die Benutzer angezeigt werden:Erlaubte Ansätze zum Adressieren von SQL Injection in Fortify

String sql = "SELECT :first, :second from <table>"; 
sql = sql.replace(":first", <first_user_input>); 
sql = sql.replace(":second", <second_user_input>); 

Nun Fortify fängt diese Zeilen als SQL-Injektion erlaubt. Meine Frage ist, Fortify akzeptieren eine RegEx-basierte Whitelisting-Ansatz als Lösung?

ich die Annahme des folgenden Ansatz dachte:

if(isValidSQL(<first_user_input>) && isValidSQL(<second_user_input>)) 
{ 
    sql = sql.replace(...); 
} 
else 
    throw new IllegalSQLInputException 

und

public boolean isValidSQL(String param) 
{ 
    Pattern p = Pattern.compile([[A-Z]_]+); //RegEx for matching column names like "FIRST_NAME", "LNAME" etc. but NOT "DROP<space>TABLE" 
    Matcher m = p.matcher(param); 
    return m.matches(param); 
} 

So würde dies als eine Methode gültig Whitelisting Fortify akzeptieren? Wenn Fortify auf der unten Grammatik funktioniert:

valid_sql := <immutable_string_literal> //Something like "SELECT * FROM <table> WHERE x = ?" or //SELECT * FROM <table> 
valid_sql := valid_sql + valid_sql //"SELECT * FROM <table>" + "WHERE x = ?" 

dann nehme ich nicht-RegEx basierte Whitelisting funktionieren würde. In diesem Fall würde nur this example funktionieren, da es Zeichenfolgen anfügt, die zur Laufzeit festgelegt sind. Ich würde diesen Ansatz nicht bevorzugen, da dies zu einer massiven Anzahl von Switch-Case-Anweisungen führen würde.

Danke

Antwort

1

Also, nach dem oben genannten Ansatz versucht, fand ich, dass Fortify noch die Linie als eine potentielle Bedrohung zu kontrollieren. Nachdem ich jedoch gelesen habe, wie Fortify funktioniert, bin ich nicht sicher, ob die "Strenge" von Fortify selbst oder den in der XML-Konfigurationsdatei definierten Unternehmensregeln stammt. Ich denke, wenn die Regeln des Unternehmens eine reguläre, ausdrucksbasierte Whitelist-Funktion zulassen, sollte das funktionieren.