Uciekające łańcuchy SQL w Javie

Tło:

Obecnie opracowuję interfejs Java dla bazy danych Enterprise CMS (Business Objects). W tej chwili buduję funkcję, która umożliwia użytkownikowi zbudowanie niestandardowego zapytania do bazy danych. Zaimplementowałem już środki zapewniające, że użytkownik może wybrać tylko podzbiór dostępnych kolumn i operatorów, które zostały zatwierdzone do dostępu użytkowników (np. SI_EMAIL_ADDRESS może zostać wybrany, gdy bardziej wydajne pola, takie jak SI_CUID nie mogą być). Do tej pory sprawy odbywały się płynnie, ale nadszedł czas, aby zabezpieczyć tę funkcję przed potencjalnymi atakami SQL injection.

Pytanie:

Szukam metody na uniknięcie ciągów wejściowych użytkownika. Widziałem już PerparedStatement, jednak zmuszony jestem do korzystania z API innych firm, aby uzyskać dostęp do bazy danych. Te API są dla mnie niezmienne, a bezpośredni dostęp do bazy danych nie wchodzi w rachubę. Poszczególne metody pobierają ciągi znaków reprezentujące zapytania, które mają być uruchamiane, unieważniając w ten sposób PreparedStatement (który, według mojej wiedzy, musi być uruchamiany na bezpośrednim połączeniu z bazą danych).

Rozważyłem użycie String.replace (), ale nie chcę wymyślać koła, jeśli to możliwe. Poza tym jestem daleko od ekspertów ds. Bezpieczeństwa, którzy opracowali PerparedStatement.

Spojrzałem też na odwołanie do API Java dla PerparedStatement, mając nadzieję znaleźć jakąś metodę toString (). Niestety, nie mogłem znaleźć niczego podobnego.

Każda pomoc jest bardzo mile widziana. Z góry dziękuję.

Referencje:

Łańcuch ucieczki Java, aby zapobiec iniekcji SQL

Odpowiednik Java dla PHP mysql_real_escape_string ()

questionAnswers(3)

yourAnswerToTheQuestion