Jak wyszukac string zawierajacy cudzyslow.

Jak wyszukac string zawierajacy cudzyslow.
poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Witam!

Mam tabele z nazwami wydarze. Na frontedzie user moze wyszukac wydarzenie np po nazwie. Problem mam taki, ze coraz wiecej userow wpisuje podwojny cudzyslow w nazwie wydarzenia. Welcome SLQ Injectino :) Oczywiscie na backend usuwa te cudzyslowy. Czy jest jakas mozliwosc jednak przeszukac po cudzyslowie? Myslalem, juz zeby uzyc jakiegos znaczka i zmieniac do na poziomie zapytania.

Przyklad

Kopiuj
SELECT * 
FROM wydarzenie
WHERE title LIKE '%My name is "poniato". Ble Ble%'

W sumie to moge usunac cydzyslow z title. REGEXP_REPLACE(title, '"', '\"', 'g') ILIKE %search "bleble"%

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1

Ale z czym masz problem?

Kopiuj
with x(col1) as (select unnest(array['ala''ma kota', 'ala "ma" kota', 'a tu "nic"']))
select * from x where col1 ilike '%"ma"%'

A do takich zadań nie używaj RE, zwykłe TRANSLATE wystarczy

poniatowski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1666
0

Tzn troche nie chce uzywac "", bo moze sie to zle skonczyc. Szukany tytul podaj user przez formularz. A skad mam miec pewnosc, ze mi calej bazy nie usunie przy pomocy cudzyslowa.

woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1616
1

Takie rzeczy jak usunięcie bazy reguluje się poprzez operatora aplikacyjnego z ograniczonymi uprawnieniami np tylko do select na danej tabeli (ale to tak na marginesie) natomiast co do sqlinjection to możesz spróbować użyć parametrów po stronie GUI.
https://stackoverflow.com/questions/7389416/postgresql-how-to-pass-parameters-from-command-line
ewentualnie zrobić funkcję z parametrami wejściowymi :)

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
2

jak się skleja zapytania zamiast używać parametrów to tak może być

DKN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 128
1

Jak boisz się jako programista wpisywać rzeczy na froncie bo ci usunie bazę, to możesz pozdrowić projektanta.

Po pierwsze pokazałeś, małym szczegółem nieudolność kilku komponentów w systemie.

  1. Nie może być takiej opcji, by istniał tak prymitywny mechanizm. Czego używacie na backendzie?
  2. User wprowadza dane, które są zmienione. Innymi słowy aplikacja zmienia za niego dane. To blad.
  3. Powinno z tego tytułu istnieć zabezpieczenie które sparsuje bezpiecznie dane do sql w oryginalnej postaci. Jak macie Jave to ogarniaj Pripery stejtment.
  4. Możesz zabezpieczać bazę oddzielnie od ataków sql Inject, ale w tym przypadku to workaround.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.