Odpowiednik Java dla PHP mysql_real_escape_string ()

Czy istnieje odpowiednik Java dla PHP mysql_real_escape_string ()?

Ma to na celu uniknięcie prób wtrysku SQL przed przekazaniem ich do Statement.execute ().

Wiem, że zamiast tego mogę użyć PreparedStatement, ale załóżmy, że są to instrukcje jednorazowe, więc przygotowanie ich spowodujeniższa wydajność. Zmieniłem już kod do korzystania z PreparedStatement, ale biorąc pod uwagę strukturę istniejącego kodu, funkcja escape () sprawiłaby, że kod byłby znacznie prostszy do przeglądania i utrzymania; Wolę łatwy w utrzymaniu kod, chyba że istnieje nieodparty powód dla dodatkowej złożoności. Również baza danych PreparedStatements jest obsługiwana w różny sposób, więc może to narazić nas na błędy w bazie danych, na które wcześniej nie mieliśmy dostępu, wymagające więcej testów przed wydaniem do produkcji.

Apache StringEscapeUtils escapeSQL () ucieka tylko pojedyncze cytaty.

Postscript: W środowisku odziedziczyłem wiele subtelności, których celowo unikałem w moim pytaniu.

Dwa punkty do rozważenia:

1) Przygotowane oświadczenia nie są panaceum i nie zapewniają 100% ochrony przed wstrzyknięciami SQL. Niektóre sterowniki bazy danych tworzą instancje kwerend parametryzowanych przy użyciu niebezpiecznej konkatenacji ciągów, a nie wstępnej kompilacji zapytania do postaci binarnej. Ponadto, jeśli twój SQL opiera się na procedurach zapisanych w bazie, musisz upewnić się, że procedury przechowywane same nie tworzą zapytań w niebezpieczny sposób.

2) Najbardziej przygotowana implementacja instrukcji wiąże instrukcję z połączeniem bazy danych, w której instancja została utworzona. Jeśli korzystasz z puli połączeń z bazą danych, musisz być ostrożny
używaj przygotowanego odwołania do instrukcji tylko z połączeniem, na którym zostało przygotowane. Niektóre mechanizmy łączenia wdrażają to w sposób przejrzysty. W przeciwnym razie można również połączyć przygotowane instrukcje lub (najprostszy, ale bardziej szczegółowy) utworzyć nową przygotowaną instrukcję dla każdego zapytania.

questionAnswers(6)

yourAnswerToTheQuestion