![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 23.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Działanie mojego skryptu ma być proste, ma polegać na tym, że po zalogowaniu się danego użytkownika wyświetli mu się lista kursów ze statusami do których ma dostęp a do których nie. Mam w bazie między innymi takie tabele jak: - users (id, name, login, password) - tabela przechowuje dane użytkownika - courses (id, lp, name, url, category_id) - tabela przechowuje kursy, linki do nich i id kategorii do jakiej należy dany kurs - access_courses (id, id_user, id_course, status) - tabela przechowuje informacje który użytkownik ma dostęp do którego kursu i wyświetla odpowiedni status To mi działa w połączeniu z kodem, który sobie napisałem, ale problem jest w linii 75. Dokładnie w zapytaniu
Jeżeli to wstawię to jest problem, natomiast jeżeli wstawię na sztywno id użytkownika np. tak
to wszystko jest idealnie. Jednak tak jak wspomniałem będzie więcej użytkowników i id chcę pobierać z sesji. Poniżej umieszczam swój fragment kodu. Proszę o przeanalizowanie go i podpowiedź jak to naprawić.
Wydaje mi się że problem może być z tym że sesja nie jest globalna, ale może się mylę. Proszę o pomoc. Z góry bardzo dziękuję. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Twój kod w tym miejscu:
Jest totalnie beznadziejny. Czytałeś dokumentację? Twoje zapytanie nie jest bezpieczne i mija się z celem takie używanie prepare. Usuwanie znaków z hasła też specjalnie mądre nie jest. Ach, i jeszcze md5. Poważnie? Czasy PHP4 już dawno minęły. Teraz się używa http://php.net/manual/en/function.password-hash.php Co zwraca $_SESSION['id'] przed tym zapytaniem? Ten post edytował viking 20.09.2016, 06:48:16 -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 23.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za sugestię dotyczącą tego logowania, poczytam. Co do tego co zwraca session['id'], to zakomentowałem wszystko co znajduje się w default i wstawiłem tylko linijkę
Po uruchomieniu skryptu wystąpił komunikat błędu
Kiedy wstawię linijkę bez cudzysłowia
to strona ładuje się prawidłowo, ale w zmiennej sesji nie wyświetla się nic, tak jakby nie przyszła. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
var_dump($_SESSION['id']);
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
-------------------- Cytat There is a Bundle for that Lukas Kahwe Smith - October 31th, 2014 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 23.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tak session_start daję
![]() Skróciłem jeszcze bardziej swój kod i lekko przerobiłem, co by jeszcze bardziej zawęzić problem i żeby każdy mógł go przetestować. Teraz wygląda on tak Skrócona wersja mojego kodu
Do panelu nie da się zalogować, ponieważ nie przychodzi id. Wartość id to null. Widać to kiedy w linii 39 zamiast wstawimy Wtedy się zalogujemy a var_dump zwróci NULL. W czym problem? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zrób print_r/var_dump z $row = $stmt->fetchAll(PDO::FETCH_ASSOC)
-------------------- Cytat There is a Bundle for that Lukas Kahwe Smith - October 31th, 2014 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 23.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Wprowadziłem chwilowo taki kod pomiędzy default a break
Wynik w przeglądarce taki
PS: Oczywiście, żeby w ogóle zobaczyć jakiekolwiek wyniki pomiędzy default a break to musiałem na chwilę zmienić na bo to z nim mam cały czas problem. Ten post edytował Baku12345 21.09.2016, 04:17:04 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 294 Pomógł: 34 Dołączył: 16.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
W jakim celu dajesz tutaj średnik? Nie mam na myśli tego na końcu tylko tego przed ostatnim cudzyslowiem - >
Może to jest przyczyną błędu Ten post edytował Star 21.09.2016, 05:30:30 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
To teraz jeszcze var_dump($row).
fetchAll zwraca tablicę a nie pojedynczy rekord. -------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%) ![]() ![]() |
No rozpacz
![]()
Testowałem to na jednej ze swoich baz na localhoście, Ty musisz dostosować (pola), jak i hasła (sposób hashowania) do swojej. Ten post edytował daro0 21.09.2016, 09:29:43 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 77 Dołączył: 10.07.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
To teraz jeszcze var_dump($row). fetchAll zwraca tablicę a nie pojedynczy rekord. Pisałem o tym wyżej ![]() Autor tematu widać nie do końca złapał o co chodzi ![]() -------------------- Cytat There is a Bundle for that Lukas Kahwe Smith - October 31th, 2014 |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 23.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję Wam wszystkim za odpowiedzi, wcześniej nie miałem czasu odpisać. Udało mi się wreszcie poprawić ten kod, głównie dzięki zmianom wprowadzonym na podstawie skryptu daro0. Nie była to wina średnika na końcu zapytania, jak sugerował Star, choć faktycznie był zbędny
![]() Co do tego co zwracał var_dump($row) to zwracał wszystko co trzeba było czyli
no może bez tego notice tego nie trzeba było ![]() na i się okazywało, że jednak id przyszło ![]() Ogólnie to mógłbym już dać wszystkim pomógł i można by zamknąć temat, ale dalej nie wiem co było przyczyną tych problemów w tamtej wersji mojego uproszczonego kodu. Czy mógłby mi ktoś wyjaśnić? Stara wersja zawierała
oraz
Nowa wersja zawiera
oraz
i to
I to działa. W czym więc był problem?? Ten post edytował Baku12345 22.09.2016, 06:58:18 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Chyba czytasz co się do ciebie pisze?
Cytat array(1) { [0]=> array(4) { ["id"]=> string(1) "1" ["name"]=> string(12) "Użytkownik1" ["login"]=> string(7) "Testowy" ["password"]=> string(32) "f86bdb19deb2c5ab632734b8d884ce06" } } Masz tutaj tablicę.
Fetch zwraca już pojedynczy rekord stąd jest dobrze. Jeszcze strzelam że zapewne brakuje ci kluczy (np unikalnego na login), oraz mógłbyś dodać LIMIT w zapytaniu. -------------------- |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 23.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
A no faktycznie głupi błąd, powinienem był pobrać tylko jeden wiersz spełniający warunek czyli wstawić
zamiast
Poza tym błąd miałem w warunku pobierałem zamiast Dzięki wszystkim za podpowiedzi, teraz działają mi już obie wersje skryptu ![]() Mam jeszcze tylko jedno ostatnie pytanko odnośnie Usuwanie znaków z hasła też specjalnie mądre nie jest. Teraz mój kod w części odpowiadającej za logowanie wygląda tak Czy teraz jest już ok, w sensie bezpiecznie? Czy addslashes i strip_tags przy loginie jest uzasadnione czy może pominąć? I podobne pytanie przy haśle czy dodać addslashes? A jeśli tak to w takiej formie czy takiej Jeszcze raz dzięki za odpowiedzi, to już ostatnie moje pytanie w tym temacie ![]() Ten post edytował Baku12345 23.09.2016, 05:55:39 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%) ![]() ![]() |
No to sobie sprawdź co Ci wypluje hash_hmac, bez względu na to jakie hasło wpiszesz i bez względu na to jak je obrabiasz w PHP. W przypadku SHA-256 będzie to coś tego typu:
e9f379a548dc29a242759944decc45702cbbb000f65b163e46ca7ae210161df2 I zawsze będzie miało długość 64 znaków tylko te literki i cyferki będą inne. Będziesz kombinował to się nawet nie zalogujesz, bo to co porównujesz będzie inne. No i w tym przypadku nawet jak gdzieś tam zmienisz sól a masz hasła zapisane na poprzednią, to też już się nie zalogujesz. |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 1 Dołączył: 23.04.2011 Ostrzeżenie: (0%) ![]() ![]() |
To wiem, że zawsze po obrobieniu hasła, zmianie soli czy kodu odpowiedzialnego za hashowanie te znaki się zmienią i zmieniając to muszę potem do bazy wstawić nowe zahashwane hasło. Tutaj bardziej chodziło mi o bezpieczeństwo skryptu, bazy i formularzy, bo viking napisał w drugim poście "Usuwanie znaków z hasła też specjalnie mądre nie jest.", a ja dodałem addslashes i strip_tags żeby uniemożliwić wprowadzenie i wykonanie ewentualnego złośliwego kodu. Kiedyś się uczyłem, żeby tak robić, ale wtedy nie używałem PDO. Z tąd to pytanie czy dodawać to do loginu i hasła czy nie, a jak tak to w jakiej formie tej pierwszej czy drugiej.
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%) ![]() ![]() |
No cóż, z tego co widać to nie takie proste...
http://stackoverflow.com/questions/134099/...t-sql-injection Może się ktoś do tego odnieść? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 09:14 |