Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne][SQL][PHP]Regex a wyszukiwarka
Van Pytel
post 23.10.2010, 11:19:50
Post #1





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

Ostrzeżenie: (0%)
-----


Jak mozna stworzyc wyszukiwarke w ktorej mozna wpisywac jakies wyrazenie regularne, a potem wyszukac w bazie?

Przyklad:
Mam strone a na niej wyszukiwarke, ktora szuka userow. Wpisuje w wyszukiwarce .arek
W mysql wyszuka i dostane rekordy:
Marek Darek itp.

Jak to mozna wykonac? Tak aby bylo zabezpieczone przed jakimis atakami np SQL injection. I mozna bylo korzystac z normalnych slow i regex?

Niestety slabo znam sie na regex i nie mam pojecia jak to wykonac.

Dzieki za odpowiedz.
Go to the top of the page
+Quote Post
konrados
post 23.10.2010, 12:46:46
Post #2





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


A czemu nie użyć sql keyword : "LIKE" ?

http://www.htmlite.com/mysql011.php

a w ogóle to masz też słowo REGEXP, np:

  1. SELECT name FROM tableName WHERE name REGEXP '^A'


A przed sql injection się zabezpieczysz tak jak zwykle - escapując cydzysłowia

Ten post edytował konrados 23.10.2010, 16:25:19
Go to the top of the page
+Quote Post
Van Pytel
post 23.10.2010, 19:07:14
Post #3





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

Ostrzeżenie: (0%)
-----


No tak, tylko regex tez bym musial jakos zabezpieczyc. Bo mozna stworzyc regex tak aby obejsc i zaatakowac.
Go to the top of the page
+Quote Post
konrados
post 23.10.2010, 20:37:26
Post #4





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


Jeśli użyjesz go do funk. select i zamienisz wszelkie ' na \' a " na \" to nie wiem jakby można to było zaatakować.

Ale może ktoś mądrzejszy się wypowie?
Go to the top of the page
+Quote Post
Crozin
post 23.10.2010, 20:43:14
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Można by napisać takie wyrażenie, które zabije bazę danych.
Go to the top of the page
+Quote Post
konrados
post 23.10.2010, 21:21:39
Post #6





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


@Crozin
Chodzi Ci o to, że byłoby strasznie czasochłonne czy coś poważniejszego?

Ten post edytował konrados 23.10.2010, 21:27:33
Go to the top of the page
+Quote Post
Crozin
post 23.10.2010, 21:28:15
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A to nie jest wystarczająco poważne?
Go to the top of the page
+Quote Post
konrados
post 23.10.2010, 21:30:33
Post #8





Grupa: Zarejestrowani
Postów: 623
Pomógł: 79
Dołączył: 16.01.2008

Ostrzeżenie: (0%)
-----


No nie aż tak jak jakiś sql injection smile.gif

A dałoby się zapisać taki killer-expression w np. 10 znakach? Bo jak nie, to zabezpieczeniem mogłoby być ograniczenie stringa do 10. No chyba, że się da...

Ten post edytował konrados 23.10.2010, 21:40:24
Go to the top of the page
+Quote Post
bmL
post 24.10.2010, 00:45:19
Post #9





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Pewnie się da. Ale gdyby tak już nie zastanawiając się jakie znaki tak na prawdę musimy ograniczyć zrobić:
  1. $search = preg_replace('/\\\/', '', $search); // usuwamy backslashe
  2. $search = preg_replace('/[^a-zA-Z\s]/', '\\\${0}', $search); backslashujemy wszystko co nie jest literami ani spacjami

?


--------------------
Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
Go to the top of the page
+Quote Post
Van Pytel
post 24.10.2010, 11:07:45
Post #10





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

Ostrzeżenie: (0%)
-----


@bmL ale tez trzeba pamietac o polskich literach (ż ć ś itd). A tez sa czasem w nickach spacje lub podkreslenia.
Go to the top of the page
+Quote Post
bmL
post 24.10.2010, 11:55:50
Post #11





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


W sumie racja ale tak na prawdę: RAGEXP 'Wózek napędowy' == RAGEXP '(.*)W\ózek nap\ędowy(.*)' == RAGEXP '(.*)\W\ó\z\e\k \n\a\p\ę\d\o\w\y(.*)'. No i np. jak napisze sobie $search = '(.*)' to wyszukane będzie RAGEXP '(.*)\(\.\*\)(.*)\'.
Popraw mnie jeżeli się mylę, ale tak powinno być jakoś nie mam ochoty sprawdzać tongue.gif

Ten post edytował bmL 24.10.2010, 11:58:53


--------------------
Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
Go to the top of the page
+Quote Post
Van Pytel
post 24.10.2010, 15:36:39
Post #12





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

Ostrzeżenie: (0%)
-----


Ja slabo sie znam na regex wiec malo w tej kwestii moge sie wypowiedziec, dlatego zrobilem ten temat, jak to ugryzc. Najgorzej zaczac, a potem jakos leci.
Go to the top of the page
+Quote Post
tehaha
post 24.10.2010, 15:48:13
Post #13





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


ale czy na pewno takie coś byłoby przydatne, no bo ilu użytkowników zna wyrażenia regularne? wydaje mi się, że lepiej stworzyć jakiś uproszczony system np.
#Darek zostanie zamienione na WHERE user_name LIKE %Darek
#Darek# -> WHERE user_name LIKE %Darek%
(Darek|Arek) -> WHERE user_name = 'Darek' OR user_name = 'Arek'
itp.

znając życie to nawet z takim czymś połowa użytkowników już by sobie nie radziła
Go to the top of the page
+Quote Post
Van Pytel
post 24.10.2010, 16:09:00
Post #14





Grupa: Zarejestrowani
Postów: 150
Pomógł: 6
Dołączył: 3.03.2010

Ostrzeżenie: (0%)
-----


Trzeba byc innowacyjny biggrin.gif
A zawsze czegos czlowiek nauczyc sie.
Poradnik mozna userom napisac.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:32