![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Witam,
Od dwóch dni główkuje jak zrobić poprawnie sprawdzenie danych przesyłanych w formularzu. Chcę aby były akceptowane tylko litery małe, duże + polski alfabet + spacje + cyfry Próbowałem :
Przegooglowałem, poczytałem, próbowałem na wiele sposobów ale nadal mi nie działa tak jak chcę. Ten post edytował Lethys 20.11.2011, 18:45:49 -------------------- |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 226 Pomógł: 61 Dołączył: 20.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Pierwszy sposób jest dobry, tylko zapomniałeś spacji w klasie znaków i błędnie zdefiniowałeś litery (zerknij na http://www.asciitable.com/ jakie znaki masz między dużą literą A a małą literą z)
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Poprawiłem znaki, żeby było A-Za-z. Chyba o to Ci chodziło.
Obecnie to wygląda tak: Obecnie nadal nie działa, jak zmienna ma w sobie np. ;" to nadal przechodzi przez moją "zaporę ochronną" smile.gif jak dodać spację, jak zrobić żeby uzyskać mój żądany efekt? Ten post edytował Lethys 21.11.2011, 11:28:48 -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Spacja to \040, zatem cały regexp powinien wygldać tak:
^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ\040]*$ Przełączniki si nie są Ci potrzebne. Powinno działać, więc jeśli nie działa, to pokaż więcej kodu. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
spacja to również \s
Kod preg_match('#^[\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$#is', $zmienna); Jeżeli dajesz flagę "i", to nie musisz pisać a-zA-Z, wystarczy że dasz a-z lub \w. Ta flaga ignoruje wielkość liter. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
spacja to również \s Kod preg_match('#^[\w\d\sąćęłńóśźżĄĆĘŁŃÓŚŹŻ]*$#is', $zmienna); Jeżeli dajesz flagę "i", to nie musisz pisać a-zA-Z, wystarczy że dasz a-z lub \w. Ta flaga ignoruje wielkość liter. \s to nie tylko spacja, a biały "pusty" znak, jak np. znak nowej linii, czy tabulator. Ten post edytował mortus 21.11.2011, 12:00:48 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Jeszcze mam 2 problemy z datą:
Pierwsza sprawa: Format daty: 2011-11-19 Preg_match :
czyli niby wszystko ok ale zmieniam w bazie danych datę na np. 2011-11-19as i mi nie wykrywa, że data nie jest poprawna. Druga sprawa: Jak zrobić preg match pod taki tekst: 941387/Jakis-cel 377871/Robienie-obiadu To będzie coś takiego?? : Ten post edytował Lethys 21.11.2011, 17:50:03 -------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
w pierwszym przypadku zakończ wyrażenie dolarem, czyli:
'/^([0-9]{4})[-\.]([0-9]{1,2})[-\.]([0-9]{1,2})$/' w drugim nawet nie patrzysz gdzie otwierasz a gdzie zamykasz nawiasy + najlepiej tak robić wyrażenie coby je zaczynać i kończyć ^$ '/^([0-9]{6})\/([a-zA-Z\-]*)$/' -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Mam jeszcze jeden przypadek.
W moim portalu user może wrzucać linki z różnego rodzaju poradnikami. Linki te są wzucane do bazy więc chciałbym odrzucić "link" powodujące sql_injection. Zrobiłem to w ten sposób: Ale przepuszcza mi link gdzie jest np. ; Jak zrobić aby te znaki nie były akceptowalne? -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
skoro chciałeś wykluczyć zestaw znaków i uzyskać jego odwrotność (wszystkie oprócz) to daszek stosuje się na początku klamry [^znaki], przy czym nie myl tego daszka z daszkiem na początku wyrażenia regularnego, gdzie on oznacza, iż wyrażenie ma się dopasowywać od początku... znak "*" znaczy tyle co {0,}, czyli 0 lub wiele, tutaj raczej chciałeś zastosować znak "+" który znaczy {1,} co najmniej 1 znak (zwróć uwagę na przecinek)... wszystko zależy, jak dokładnie chcesz sprawdzać te adresy - można by wymodzić jakieś ogólne wyrażenie ale to wcześniej ktoś musiałby podać jakieś ograniczenia....
Jeśli chodzi o SQL iniection to przede wszystkim zainteresuj się PDO i funkcjami prepare, lub chociaż mysqli i też funkcjami prepare... Zależy, jak daleko chcesz iść ze sprawdzaniem poprawności adresów - czasami ktoś się pomyli i choć adres strukturę będzie miał poprawną to nie będzie nigdzie prowadził - można to też sprawdzić ale to inny temat... ogólne wyrażenie na adres mogło by wyglądać (przy czym nie chce mi się sprawdzać jakie są najdziwniejsze znaki i bodajże znak ";" chyba też może występować, podobnie jak procenty czy polskie znaki (wszystko zależy, kto z jakiej przeglądarki skopiuje i jakie kodowanie otrzyma..) przykładowe wyrażenie mogło by wyglądać np. w ten sposób: Kod /^(?:https?\:\/\/)?(?:[wW]{3}\.)?(?!.*(?:[\-\/\.]){2,})[a-zA-Z0-9_\-\.]{2,}\.[a-zA-Z]{2,5}(?:\/[a-zA-Z0-9_!\/\|\+\%\.\-\?\=\&\#]*)?$/ (?!.*(?:[\-\/\.]){2,}) - to znaczy, że nigdzie dalej ma się nie dopasować do występujących pod rząd naraz 2 znaków "-" lub "." lub "/" jeśli jest jeszcze część poza domeną to reszta musi się zaczynać od znaku "/" tam sobie możesz pododawać jakieś dozwolone / zabronione znaki... SKORO LINKI WKLEJAJĄ Z ZEWNĄTRZ, TO ZAŁOŻYŁEM, IŻ DOMENA W LINKU TEŻ MUSI BYĆ [a-zA-Z0-9_\-\.]{2,}\.[a-zA-Z]{2,5}, choć teraz wprowadzili, że i w domenie może być nawet cyrylica ^^, więc zamiast tego można by jakiś bardziej ogólny schemat napisać... zależy co chcesz ^^ -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 642 Pomógł: 2 Dołączył: 9.03.2006 Ostrzeżenie: (30%) ![]() ![]() |
Dziękuje za tak wyczerpującą odpowiedź
![]() Tylko zrodziło mi się pytanie w głowie czy nie łatwiej po prostu wypisać zakazane znaki (które w adresie strony nie występują) i jeżeli dane adres je posiada to blokować dalszy skrypt? Druga sprawa, czy blokując wszystkie "niebezpieczne" dane w formularzu i POST przez właśnie preg_match nie bronie się przed sql_injection? -------------------- |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Druga sprawa, czy blokując wszystkie "niebezpieczne" dane w formularzu i POST przez właśnie preg_match nie bronie się przed sql_injection? A może tak zamiast się przed tym bronić to uczynić je poprawnymi i bezpiecznymi?? Wszystko zależy, jakie masz typy formularzy... Firma: Jan Kowalski "Primawera" I co - w powyższym nie pozwolisz na wprowadzanie cudzysłowów?? Odpowiednio spreparowany kod jeśli dane potem nie są odpowiednio wyświetlane pozwala na rozwalenie kodu html... gdy do wyświetlania wystarczy coś w stylu htmlspecialchars. Fakt, jeśli w bazie nie chcesz mieć śmieci to jakoś minimalnie pod kontem poprawności powinno to się kontrolować... co do SQL iniection to jak już wspomniałem najlepiej prepare w PDO... o adresie strony to wspomniałem właśnie o tym - czyli chyba prościej w drugą stronę no to np. (ale baaardzo ograniczona filtracja) Kod /^(?!.*(?:[\-\.]){2,})[^\s]{2,}\.[a-zA-Z]{2,5}(?:\/[^\s]*)?$/ dodaj sobie tam do tablicy znaków zakazanych co tam uważasz... i początek (?!.*(?:[\-\.]){2,}) jest tam nie potrzebny... -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 03:24 |