Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zabezpieczenie injection zbyt dokładne?
Dopler
post
Post #1





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


Mam bazę nazwisk z informacjami. Rekordy wywołuję przez zmienną nazwisko=xxxxx

Jednak żeby się zabezpieczyć przed zhakowaniem całej bazy przez wpisanie nazwisko=a% lub nazwisko=a_
stworzyłem ifa

if(!preg_match("/%/", $nazwisko)&&!preg_match("/_/", $nazwisko))

i działa super - tylko że jest zbyt dokładny - bo są nazwiska takie jak d'Haute (z apostrofem)
i to nazwisko jest wyłapywane jako zhakowanie

jest jakiś sposób żeby zostawić zabezpieczenie ale żeby apostrof nie był brany pod uwagę? I skąd ten apostrof skoro skryptu nie uczulałem na niego?

a może to zabezpieczenie robi się inaczej ?

podgląd bazy jest tu: http://powstanie.okiem.pl

Ten post edytował Dopler 18.06.2012, 18:07:11


--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
trafas
post
Post #2





Grupa: Zarejestrowani
Postów: 87
Pomógł: 12
Dołączył: 31.05.2006

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


może powinieneś pokombinować z funkcją addslashes questionmark.gif
Go to the top of the page
+Quote Post
Dopler
post
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


kurcze ... muszę chyba jeszcze raz opisać problem dokładniej - bo przedtem zrobił skrót i widzę że chyba problem leży gdzie indziej

wyszukiwanie mam 2 stopniowe - najpierw wg litery szuka zestawów pierwszych trzech liter
a potem wg tego zestawu szuka nazwisk

nazwisko=d'Haute - działa
ale nie działa wcześniejszy stopień

w tym wcześniejszym stopniu mam jeszcze liczenie znaków
if - wygląda więc tak

if(strlen($lettertwo)==3&&!preg_match("/%/", $lettertwo)&&!preg_match("/_/", $lettertwo)

gdy wywalam strlen - to funkcja działa - a więc to w niej jest coś co chyba nie zlicza apostrofu (a także spacji)
próbowałem z mb_strlen oraz iconv_strlen - i bez rezultatu




--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


po prostu wywal wszystkie _ i % - bo jak rozumiem korzystasz z LIKE smile.gif


--------------------
Go to the top of the page
+Quote Post
Dopler
post
Post #5





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


tak korzystam z LIKE - ale nie mogę wywalić _ i % bo wtedy można łatwo wyświetlić wszystkie pozycje bazy - zresztą to działa
problem leży w liczeniu strlen

apostrof liczy jak 2 znaki a spację omija


--------------------
Genealogia Polaków
Go to the top of the page
+Quote Post
melkorm
post
Post #6





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


1. Wywalasz % i _, robisz strlen, dodajesz swoje % i _ (w zależności co używasz)
2. Jak źle liczy? może złe kodowanie? może spróbuj mb_strlen ? nigdy nie spotkałem się by strlen mi źle liczył znaki wink.gif (chyba że chodzi o UTF-8)


--------------------
Go to the top of the page
+Quote Post
Dopler
post
Post #7





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 30.01.2008

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


sorry- ale ja po prostu nie rozumiem co znaczy "wywalasz _%" bo przecież to są trzy osobne warunki w bramce logicznej - warunek długości i nie występowania tych znaków


Rozwiązałem problem

  1. if(preg_match("/'/", $lettertwo))
  2. {$sprawdz=4;}
  3. else
  4. {$sprawdz=3;}
  5. if(strlen($lettertwo)==$sprawdz&&!preg_match("/%/", $lettertwo)&&!preg_match("/_/", $lettertwo))


działa - ale czuję że to jest strasznie dookoła - jak siekierą. To chyba powinno być zrobione jakimś kodowaniem ...
Nie jestem pewien czy to wyczerpuje wszystkie możliwości, poza tym nie wiem czy tego i tak nie można jakoś obejść

może jest lepszy sposób?

baza jest w UTF8


--------------------
Genealogia Polaków
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 Aktualny czas: 21.08.2025 - 09:20