![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przerobiłem troche znaleziony w internecie kod i wygląda on następująco:
index.php
rejestruj.php
1. czy jest ten skrypt bezpieczny? jeśli nie to jakie zmiany proponujecie 2. jak zabezpieczyć najlepiej w md5() hasło do bazy danych?
3. użyłem funkcji preg_match do zabezpieczenia formularza ale działa on tylko dla jednej zmiennej $login lub $haslo:
gdy próbuje napisać tak(by obydwa pola formularza zabezpieczyć, bo co mi da że pole loginu zabezpiecze tylko jeśli w polu hasła można wpisać co sie chce..):
to pojawia sie błąd. jak tego użyć by zabezpieczyć obydwa pola? PS nie mam pojęcia dlaczego nie koloruje składni :/ być może kod html to powoduje ale nie wiem... Ten post edytował predator 16.04.2008, 16:35:51 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Poczytaj o preg_match Szukałem długo jak zrobić, kombinowałem ale nic... I dlatego tu napisałem. Cytat Musisz gdzieś podać hasło "surowe", inaczej się nie połączy. Wyłącz raportowanie błędów, postaraj się uniemożliwić dostęp do podglądu źródła skryptu. Użyje require() ale gdzie dać ten plik includowany jeśli adres strony z logowaniem to www.jakas_strona.pl/index.php ? Katalog tego pliku powinien być wyżej niż index.php ale wyżej sie nie da chyba. Cytat Zamiast htmlentities w zapytaniu lepiej użyj mysql_escape_string. Dlaczego uważasz że takie rozwiązanie lepsze? PS Wstawiam na początku error_reporting(0); by nie wyświetlało błędów i nie ma reakcji na tę funkcję, errory dalej sie pojawiają. Wstawiałem na początku przed session_start(), wstawiałem też przed tą linią:
i nie działa Ten post edytował predator 16.04.2008, 16:37:39 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Szukałem długo jak zrobić, kombinowałem ale nic... I dlatego tu napisałem. preg_match" title="Zobacz w manualu PHP" target="_manual za jednym razem może sprawdzać tylko jedną zmienną. Musisz dodać kolejne ify dla kolejnych pól. Cytat Katalog tego pliku powinien być wyżej niż index.php ale wyżej sie nie da chyba. Da się, jeśli masz po zalogowaniu do ftp masz katalog public_html. Tylko najlepiej posługuj się ścieżkami bezwzględnymi. Cytat Dlaczego uważasz że takie rozwiązanie lepsze? Poczytaj o SQL Injection. Cytat errory dalej sie pojawiają. Tzn, jakie? Cytat PS nie mam pojęcia dlaczego nie koloruje składni :/ być może kod html to powoduje ale nie wiem... Zamiast tagu [ code] używaj [ php] Ten post edytował erix 16.04.2008, 15:23:00 -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Da się, jeśli masz po zalogowaniu do ftp masz katalog public_html. Tylko najlepiej posługuj się ścieżkami bezwzględnymi. Nie mam takiego katalogu ![]() Cytat Poczytaj o SQL Injection. Ale po zabezpieczeniu formularza (tak że po wprowadzeniu czego innego niż litery i cyfry zamiast przystępować do logowania pokazuje sie informacja) nie da sie chyba zastosowac SQL Injection. Bo najpierw jest sprawdzana poprawnosc: Kod if(preg_match('#^[A-Za-z0-9_-]+$#', $login)) Cytat Cytat errory dalej sie pojawiają. Tzn, jakie? Np. specjalnie wpisuje więcej znaków } i pojawia sie błąd: Kod Parse error: syntax error, unexpected '}' a nie powinien przecież po zastosowaniu error_reporting(0); Może źle coś robie? Ten post edytował predator 16.04.2008, 16:55:47 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Nie mam takiego katalogu . Jak inaczej zabezpieczyć? Jeśli masz dostęp do .htaccess, to za pomocą tego pliku możesz zabezpieczyć. Cytat Ale po zabezpieczeniu formularza (tak że po wprowadzeniu czego innego niż litery i cyfry zamiast przystępować do logowania pokazuje sie informacja) nie da sie chyba zastosowac SQL Injection. Ach, faktycznie, moje niedopatrzenie. Ale strzeżonego Pan Bóg strzeże... Poza tym, nie masz możliwości wprowadzania innych znaków niż podstawowe ASCII (i to mniej). Więc np. polskie krzaczki odpadają chyba, że to celowe. Cytat Parse error: syntax error, unexpected '}' Hmm, szczerze mówiąc, nie mam pomysłu, dlaczego tak się dzieje pomimo, że jest ustawione na zero... A innego rodzaju błędy są wypisywane? (np. notice, warning, itp) -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat A innego rodzaju błędy są wypisywane? (np. notice, warning, itp) Nie wiem jak takie błędy wywołać ale skoro tamten błąd sie pojawił to inne też zapewne sie pojawią. Tak sie zastanawiam i przecież te polecenia z formularza są najpierw wysyłane do serwera i on je analizuje. Więc w bazie danych nic nikt nie namiesza ale na serwerze chyba może. Trzeba by było po stronie użytkownika sprawdzić najpierw chyba np poprzez java script ![]() Cytat Jeśli masz dostęp do .htaccess, to za pomocą tego pliku możesz zabezpieczyć. nie mam :/ Ale pliku php nie można podejrzeć podobno, tylko jakimiś zapytaniami lub jakoś inaczej. Są też programy do ściągania stron ale one tylko w html'u ściągają? albo sie myle? Jakich błędów sie wystrzegać by nikt np w swoim skrypcie includując mój index.php nie podejrzał zakładając ze w tym index.php jest hasło? P.S. Zastosowałem mysql_escape_string razem z htmlspecialchars. Czy może to tak być?
ma ktoś jakiś pomysł? Ten post edytował predator 16.04.2008, 18:30:51 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Nie wiem jak takie błędy wywołać ale skoro tamten błąd sie pojawił to inne też zapewne sie pojawią. Błąd składni uniemożliwia działanie skryptu. Reszta (notice, warning) nie. Cytat Ale pliku php nie można podejrzeć podobno, tylko jakimiś zapytaniami lub jakoś inaczej. Są też programy do ściągania stron ale one tylko w html'u ściągają? albo sie myle? Cytat Jakich błędów sie wystrzegać by nikt np w swoim skrypcie includując mój index.php nie podejrzał zakładając ze w tym index.php jest hasło? No, w Twoim wypadku jest OK; IMHO najbezpieczniej trzymać dane autoryzacyjne właśnie w ten sposób - jako parametry funkcji, a nie jako zmienne w jakimś pliku konfiguracyjnym. Można również w taki sposób, ale dodawaj np. usuwanie danych ze zmiennej konfiguracyjnej zaraz po podłączeniu, wyłącz wyświetlanie błędów, a jeśli nie chcesz (czasem się przyda), to utwórz własnego handlera (patrz: set_error_handler" title="Zobacz w manualu PHP" target="_manual i np. loguj je do pliku. Cytat Zastosowałem mysql_escape_string razem z htmlspecialchars. Czy może to tak być? Do md5" title="Zobacz w manualu PHP" target="_manual nie musisz żadnej funkcji zabezpieczającej stosować, bo ona Ci nie zwróci żadnych znaków, które mogłbyby "popsuć" zapytanie (pomijam przypadek, w którym funkcja byłaby uszkodzona, ale dużo bardziej jest prawdopodobne, że ktoś włamie się na serwer i podejrzy interesujące go pliki). Swoją drogą, nie rozumiem, po co dodatkowo dajesz htmlspecialchars" title="Zobacz w manualu PHP" target="_manual przy zapytaniu. Bardziej kłopotliwe, bo znaki specjalne zamieni na encje (więcej miejsca w bazie; nazbiera się więcej loginów i trochę miejsca zajmie. Fakt, wartości znikome, ale grosik do grosika...). Ten post edytował erix 20.04.2008, 20:05:05 -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 2 148 Pomógł: 230 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
jezeli serwer bedzie mial wylaczone magic_quotes to nie bedzie ten skrypt(y) zbyt bezpieczny, ja bym dal na poczatku kazdego z tych skrypotow taka linijke:
-------------------- ET LINGUA EIUS LOQUETUR IUDICIUM
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
index.php:
rejestracja.php: A za każdym razem, gdy wyświetlasz login (czy jakieś dane od użytownika) już na stronie - wtedy potraktuje te dane htmlspecialchars" title="Zobacz w manualu PHP" target="_manual() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Tak sie zastanawiam i przecież te polecenia z formularza są najpierw wysyłane do serwera i on je analizuje. Więc w bazie danych nic nikt nie namiesza ale na serwerze chyba może. czy dobrze mówie? ---- właśnie do pliku błędy chciałbym by zapisywało ale co mam wpisać? (nie uczyłem sie w szkole angielskiego i z tej strony nie bardzo rozumiem tych wyjaśnień :/) Cytat Swoją drogą, nie rozumiem, po co dodatkowo dajesz htmlspecialchars przy zapytaniu. Cytat A za każdym razem, gdy wyświetlasz login (czy jakieś dane od użytownika) już na stronie - wtedy potraktuje te dane htmlspecialchars() te pola (obydwa pętlami zabezpieczyłem) mimo że zabezpieczone to gdyby komuś jakimś cudem udało sie wprowadzić inne znaki niż te dozwolone to wtedy htmlspecialchars zabezpieczy. Cytat jezeli serwer bedzie mial wylaczone magic_quotes to nie bedzie ten skrypt(y) zbyt bezpieczny a co ktoś może zrobić? --EDIT-- Kod '".md5($haslo)."' nawet gdyby ktoś wpisał coś nie dobrego to md5 itak to zakoduje więc chyba jednak nie potrzebne dodatkowo htmlspecialchars.Jeśli wpisze w polu input cyfrę: 0 to informuje mnie ze nie wypelnłem wszystkich pól. Jak zrobić by 0 było traktowane nie jako puste pole a znak? Bo zamiast "nie wypełniłeś wszystkich pól" chciałbym by informowało po wprowadzeniu cyfry 0 że nie poprawne dane Cytat }echo ShowLogin("wprowadz login i haslo"); Crozin. Nie wiem dlaczego ale zamiast echo musze wpisać tu else. Gdy jest echo to jeśli wpisze błędne dane to pojawia sie "złe hasło" a pod formularzem pojawia sie następny formularz "wprowadz login i haslo". Jeśli wpisze inne niż dozwolone znaki to zamiast "nie dozwolone znaki" pojawia sie "wprowadz login i haslo", pod spodem nie pojawia sie następny formularz wtedy. Przecież jesli sprawdza czy pola puste:
i warunek jest że gdy nie (else) są puste to wypisz "wprowadz login i haslo" To dlaczego gdy są puste, wyświetla "wprowadz login i haslo"? Przecież powinno wyświetlać tak gdy nie są puste. Z else działa ale nie rozumiem dlaczego. Ten post edytował predator 21.04.2008, 10:46:23 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat te pola (obydwa pętlami zabezpieczyłem) mimo że zabezpieczone to gdyby komuś jakimś cudem udało sie wprowadzić inne znaki niż te dozwolone to wtedy htmlspecialchars zabezpieczy. Jak zabezpieczysz przy rejestrowaniu usera (INSERT), to się tam nie dostaną więcej. ;] No chyba, że w bazie albo w plikach ktoś namiesza. Cytat właśnie do pliku błędy chciałbym by zapisywało ale co mam wpisać? (nie uczyłem sie w szkole angielskiego i z tej strony nie bardzo rozumiem tych wyjaśnień :/) http://www.google.com/search?client=opera&...-8&oe=utf-8 Cytat Jeśli wpisze w polu input cyfrę: 0 to informuje mnie ze nie wypelnłem wszystkich pól. Jak zrobić by 0 było traktowane nie jako puste pole a znak? Bo zamiast "nie wypełniłeś wszystkich pól" chciałbym by informowało po wprowadzeniu cyfry 0 że nie poprawne dane
Cytat i warunek jest że gdy nie (else) są puste to wypisz "wprowadz login i haslo" A wpisywałeś 0 (zero), pusty ciąg, itp? -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kod <?php (string)$zmienna ?> nie rozumiem, jak mam tego użyć? Napisze co chce zrobić. Chciałbym by po wprowadzeniu liczby, skrypt sprawdzał czy jest poprawna, jeśli tak to mógł być wykonywany następny warunek. Mam taki kod, ale chciałbym więcej liczb zdefiniować a nie tylko 2 i by na 0 reagowało jak na źle wprowadzony kod a nie puste pole (z tym zerem tak jak tu napisałem nie działa ale taki warunek bym chciał zrobić): Kod $asd = "0";
Cytat A wpisywałeś 0 (zero), pusty ciąg, itp? nic nie wpisywałem i nie powinno sie wyświetlać nic nawet przy uruchomieniu skryptu odrazu też nie powinno jeśli dam else zamiast echo bo przecież nic nie zostało wprowadzone a warunek sprawdza czy pola są puste Ten post edytował predator 21.04.2008, 15:24:24 |
|
|
![]()
Post
#15
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat nie rozumiem, jak mam tego użyć? Tak, jak pokazałem. empty" title="Zobacz w manualu PHP" target="_manual zwraca true, jeśli wartość jest 0 (zero/false), '' (pusty string), null. Rzutowanie na stringa zwróci 0 jako ciąg znaków, a nie liczbę, na którą wskazuje false. A używa się tego np. tak:
Cytat Mam taki kod, ale chciałbym więcej liczb zdefiniować a nie tylko 2 i by na 0 reagowało Wszystkie liczby? is_numeric" title="Zobacz w manualu PHP" target="_manual/is_int" title="Zobacz w manualu PHP" target="_manual Cytat To dlaczego gdy są puste, wyświetla "wprowadz login i haslo"? Przecież powinno wyświetlać tak gdy nie są puste. Z else działa ale nie rozumiem dlaczego. Yyyy, ale po co pole login/hasło, gdy są one podane...? Wywal wykrzykniki przed empty" title="Zobacz w manualu PHP" target="_manual, to będziesz miał, jak chcesz... Choć nie rozumiem trochę, po co... -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Choć nie rozumiem trochę, po co... nie rozumiemy sie chyba dlatego podam linka,http://www.3xori.yoyo.pl/index.php wpisz w obydwu polach np. aaaaabbbbbbbbb, później w jednej lub obu wpisz np znaki ;;;;; i zobaczysz że jeśli nie poprawne hasło lub login to pojawia sie pod spodem następny formularz no i właśnie dlaczego on sie tam pojawia (gdy jest echo) nie wiem. Gdy jest else to jest ok ale nie logiczne to troche bo else z tego co wiem wykonuje coś jeśli warunek nie został spełniony czyli jeśli pola nie są puste. Cytat Jeśli wpisze inne niż dozwolone znaki to zamiast "nie dozwolone znaki" pojawia sie "wprowadz login i haslo", pod spodem nie pojawia sie następny formularz wtedy. teraz jest ok ale tylko to że sie pojawia formularz następny mnie wkurza Cytat Wszystkie liczby? o to mi chodziło że chciałbym tam kilka liczb np 122, 3, 34 zapisać tak jak hasła ale jeśli wpisze Kod if($_POST["kod"]== ("122" or "3" or "34")) to wtedy cokolwiek nie wpisze to zawsze przechodzi do następnych warunków --EDIT-- Cytat o to mi chodziło że chciałbym tam kilka liczb np 122, 3, 34 zapisać tak jak hasła ale jeśli wpisze Kod if($_POST["kod"]== ("122" or "3" or "34")) to wtedy cokolwiek nie wpisze to zawsze przechodzi do następnych warunków z tym sobie poradziłem, zaćmienie jakieś miałem przedtem, wystarczyło napisać Kod if(($_POST["kod"]== "122") or ($_POST["kod"]== "3") or ($_POST["kod"]== "34") itd
Ten post edytował predator 21.04.2008, 16:53:19 |
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat teraz jest ok ale tylko to że sie pojawia formularz następny mnie wkurza Napisałem, wywal wykrzykniki przy empty" title="Zobacz w manualu PHP" target="_manual w tamtym warunku. Cytat o to mi chodziło że chciałbym tam kilka liczb np 122, 3, 34 zapisać tak jak hasła ale jeśli wpisze
na:
O to chodzi? Ten post edytował erix 21.04.2008, 17:00:23 -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 20.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
nie, nie już poradziłem sobie z tamtym
![]() Cytat Napisałem, wywal wykrzykniki przy empty w tamtym warunku. Po wywaleniu wykrzykników odrazu przy uruchomieniu są 2 formularze ![]() |
|
|
![]()
Post
#19
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Zakładam, że masz PHP5:
Ten post edytował erix 21.04.2008, 17:21:13 -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 910 Pomógł: 44 Dołączył: 20.02.2008 Skąd: Łódź Ostrzeżenie: (20%) ![]() ![]() |
i jeszcze jedna moja uwaga. Przy wylogowywaniu zamiast $_SESSION["zalogowany"] zmieniac na 0 to zrob session_destroy();
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 8.07.2025 - 21:11 |