Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Formularz zabezpieczenia
mrk9109
post 5.06.2019, 19:55:33
Post #1





Grupa: Zarejestrowani
Postów: 445
Pomógł: 3
Dołączył: 4.06.2010

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


Witam otóż że dalej rozwijam swoją wiedzę i każdy mnie na tym forum zna mam do was nowe pytanie mam prosty formularz POST który przesyła np: skille do bazy danych i jak pewny użytkownik daje radę podmieniać te wartości pobrane z bazy i wpisywać swoje i wysyłać je do skryptu jak to zabezpieczyć ? Przykład skryptu
  1. if (isset($_POST['kup']))
  2. {
  3. $login = $_SESSION['login'];
  4. $nazwa = $_POST['nazwa'];
  5. $wsp = $_POST['wspolczynik'];
  6. $cena = $_POST['cena'];
  7. $cenaP = $_POST['cenaP'];
  8. $wartosc = ($cena/2);
  9.  
  10. $zapytanieSpr="SELECT nazwa FROM uzytkownik_trenerzy WHERE login = '". $_SESSION['login']."';";
  11. $wynikSpr = mysqli_query($polaczenie,$zapytanieSpr);
  12. $sprawdz_tunera = mysqli_num_rows($wynikSpr);
  13.  
  14. if($sprawdz_tunera == 0)
  15. {
  16. $wspolczynik = $wsp;
  17. }
  18. else
  19. {
  20. $zapytanieTuner = $polaczenie->query("SELECT profit FROM uzytkownik_trenerzy WHERE login = '". $_SESSION['login']."';");
  21. while($db = $zapytanieTuner -> fetch_assoc() ) {
  22. $profit=$db['profit'];
  23. }
  24.  
  25. $wspolczynik = ($wsp + $profit);
  26. }
  27.  
  28. $zapytanie = $polaczenie->query("SELECT saldo, saldoP FROM uzytkownik WHERE login = '". $_SESSION['login']."';");
  29.  
  30. while($db = $zapytanie -> fetch_assoc() ) {
  31.  
  32. $saldo=$db['saldo'];
  33. $saldoP=$db['saldoP'];
  34. }
  35.  
  36. if($saldo >= $cena)
  37. {
  38. $zapytanie1 = "UPDATE uzytkownik SET saldo= saldo-$cena WHERE login = '". $_SESSION['login']."';";
  39. $start1 = mysqli_query($polaczenie,$zapytanie1);
  40.  
  41. $zapytanie = $polaczenie->query("INSERT INTO `uzytkownik_rzecz` (`login`, `nazwa`, `wspolczynik`, `zywotnosc`, `wartosc`, `aktywny`)
  42. VALUES ('".$login."',
  43. '".$nazwa."',
  44. '".$wspolczynik."',
  45. '100',
  46. '".$wartosc."',
  47. '0'
  48. );");
  49.  
  50. echo '<script language="javascript">';
  51. echo 'alert("'.$nazwa.' został zakupiony")';
  52. echo '</script>';
  53.  
  54. header('refresh: 1; url=sklep-rzeczi');
  55. }
  56. else
  57. {
  58. echo '<script language="javascript">';
  59. echo 'alert("Brak wymaganych środków")';
  60. echo '</script>';
  61. }
  62. }


podobnie jak większość formularzy

czyli on zmieni sobie cene i skrypt pobierze inna cene jak się w tym uporać

Ten post edytował mrk9109 5.06.2019, 19:56:53
Go to the top of the page
+Quote Post
nospor
post 5.06.2019, 20:08:38
Post #2





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




No bo takich rzeczy jak cena czy inne, ktorych user nie powinien edytowac, to sie nie umieszcza w formularzu i tyle. Przeciez cene znasz za ile cos tam ma byc to po grzyba dajesz to jako pole forma? Wyswietlaj tylko by user widzial jaka cena i juz. Z forma tego nie pobieraj


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 5.06.2019, 21:45:56
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nigdy nie ufaj temu co wpisze użytkownik w formularzu. Zawsze traktuj Input jak potencjalne zło
Go to the top of the page
+Quote Post
viking
post 6.06.2019, 06:13:56
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Podstawiasz dane z POST do zapytania. Najgorsze co możesz zrobić. Poczytaj https://prophp.pl/advice/show/25/jak_zabezp...ql_injection%3F


--------------------
Go to the top of the page
+Quote Post
mrk9109
post 6.06.2019, 19:11:58
Post #5





Grupa: Zarejestrowani
Postów: 445
Pomógł: 3
Dołączył: 4.06.2010

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


Dzięki czyli tylko wyświetlać ile co kosztuje a cenę znów pobrać z bazy danych a nie przesyłać przez post

Tak samo mam z nagrodami muszę wszystko przerobić

Ten post edytował mrk9109 6.06.2019, 19:12:32
Go to the top of the page
+Quote Post
emillo91
post 6.06.2019, 20:57:50
Post #6





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 29.03.2012

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


Nic nie stoi na przeszkodzie, żebyś wrzucał dane z $_POST do zapytań MySQL ale to trzeba zwalidować czyli sprawdzić czy cena to cena, w przypadku oczekiwania wartości typu string należy zastosować regex aby wyeliminować niebezpieczne znaki. PHP posiada funkcje filtrujące, o których możesz poczytać tutaj ale przetwarzając dane $_POST musisz dodatkowo sprawdzać czy indeks tablicy, którego oczekujesz w ogóle istnieje. Najbezpieczniej jest pobierać dane z sesji ale tam powinno się trzymać przydatne informacje, które zawsze będą wykorzystywane. Najlepszy sposób to pobieranie danych z bazy po id rekordu. Jest też możliwość przekazywania id metodą $_GET i to głównie umieszcza się w pasku adresu jeśli chcemy pobrać wszystkie informacje związane z danym rekordem. Odnośnie metody $_POST to proponowałbym użyć zamiast niej zmiennej $_REQUEST dlatego, że ta zmienna obejmuje jednocześnie dane tablicowe
$_GET i $_POST czyli przy sprawdzaniu co indeks istnieje robisz if(isset($_REQUEST['nazwa']) itd. Polecam poczytać o uproszczeniach w instrukcjach warunkowych co może zmniejszyć ilość kodu i ułatwić trochę życie. Warunek który wypisałem można uprościć:
  1. $jakaszmienna = $_REQUEST['nazwa'] ?? null; // wersja php7


Ten post edytował emillo91 6.06.2019, 20:59:25
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: 19.04.2024 - 13:34