Există o clasă sau o metodă în Java care va verifica dacă un șir este un cuvânt cheie SQL Server?

Vreau ceva care să poată verifica dacă un șir este "SELECT", "INSERT" etc. Sunt curios dacă acest lucru există.

1

4 răspunsuri

Destul de ușor de adăugat:

    HashSet  sqlKeywords    =
     new HashSet(Arrays.asList(
       new String[] { ... cut and paste a list of sql keywords here ..  }));
4
adăugat

Dacă încercați să împiedicați injectarea SQL, ar fi mai bine să utilizați caracteristicile construite în JDBC, cum ar fi declarațiile pregătite. În general, folosirea concatenării șir pentru a forma instrucțiunea SQL este periculoasă. Din Prevenirea injectării SQL în Java :

Prepared Statements:

String selectStatement = "SELECT * FROM User WHERE userId = ? ";
PreparedStatement prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, userId);
ResultSet rs = prepStmt.executeQuery();
3
adăugat

DatabaseMetaData.getSQLKeywords va returna cuvintele cheie care nu sunt în SQL-2003 (cuvântul cheie SQL-2003 poate fi găsit în standard). Există și alte metode în cadrul acestei interfețe pentru a obține diferite tipuri de nume de funcții și similare.

După cum menționează Chase Seibert, nu cred că aceasta este o modalitate eficientă de a bloca atacurile de injecție SQL.

1
adăugat

de ce să nu începeți cu acest conținut stocat procedură și modificați-o pentru a se potrivi cu nevoile dvs., eventual convertiți-o în Java folosind hashmap-ul, așa cum a sugerat Steve.

Personal, îmi place ideea unei proceduri stocate deoarece diferite baze de date pot avea cuvinte cheie diferite, astfel încât pare elegant să aibă o judecată de bază a bazei de date

1
adăugat