Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zabezpieczenie przed WSTECZ i ODŚWIEŻ, w formularzu...
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Witam po raz kolejny. Chciałbym uzyskać pomoc w kwestii zabezpieczenia danych w formularzu przed przeładowaniem i przyciskiem wstecz (wiem, że nie da się zablokować całkowicie). Znalazłem na to 3 sposoby - cookie, sesje i nagłówek. Niestety, nie umiem tego połączyć z moim wielostopniowym formularzem... Pomoże ktoś mądry?
  1. <?php
  2. if (isset($_POST['krok']) && $_POST['krok'] == "1") {
  3.  
  4. // tu kontrola wypełnienia w js
  5.  
  6. echo "<center><form name='generator' action='".basename($_SERVER['PHP_SELF'])."' method='POST' onSubmit='return testuja(this);'>";
  7.  
  8. echo "<input type='hidden' name='krok' value='2'>\n";
  9. echo "<input type='submit' name='dalej' value='Idź dalej'></form>";
  10.  
  11. } elseif (isset($_POST['krok']) && $_POST['krok'] == "2") {
  12.  
  13. echo "<center><form name='generator' action='".basename($_SERVER['PHP_SELF'])."' method='POST' onSubmit='return checkRadios(this);'>";
  14.  
  15. // tu kontrola wypełnienia w js
  16.  
  17. echo "<input type='hidden' name='krok' value='3'>";
  18. echo "<input type='submit' name='dalej' value='Idź dalej'></form>";
  19.  
  20. } elseif (isset($_POST['krok']) && $_POST['krok'] == "3") {
  21.  
  22. echo "<center><form name='generator' action='".basename($_SERVER['PHP_SELF'])."' method='POST' onSubmit='return testujb(this);'>";
  23.  
  24. // tu kontrola wypełnienia w js
  25.  
  26. echo "<input type='hidden' name='krok' value='4'>\n";  
  27. echo "<input type='submit' name='dalej' value='Idź dalej'></form>";
  28.  
  29. } else {
  30.  
  31. echo "<hr class='hr' /><form name='generator' action='".basename($_SERVER['PHP_SELF'])."' method='POST'>";
  32.  
  33. echo "<input type='hidden' name='krok' value='1'>\n";  
  34. echo "<input type='submit' name='dalej' value='Idź dalej'></form>";
  35.  
  36. }
  37. ?>


Ten post edytował Kshyhoo 4.07.2009, 21:52:22


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A czemu nie korzystasz z sesji?


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

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!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Eh, jeżeli chodzi o pojedynczy formularz, umiem to zrobić. Ten w kilku stopniach wywala mi notice i nie robi tego, co chcę.


--------------------
Go to the top of the page
+Quote Post
bemol
post
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 29
Dołączył: 5.04.2007
Skąd: Rymanów Zdrój/Rzeszów

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


a czemu nie robisz sobie na $_GET i nie lecisz switch'em? ja tak zawsze kroki robiłem. oszczędzisz nie potrzebnych hiddenów, a adres mozesz zamaskowac modrewrite


--------------------
Tym ludziom zaufałem i dobrze na tym wyszedłem:
kresh
Darti
piotrekkr
Bez nich wiele bym nie zrobił. Dzięki im za to!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(bemol @ 5.07.2009, 10:38:19 ) *
a czemu nie robisz sobie na $_GET i nie lecisz switch'em? ja tak zawsze kroki robiłem. oszczędzisz nie potrzebnych hiddenów, a adres mozesz zamaskowac modrewrite

A możesz jakiś przykład dać, nie jestem zaawansowany w php...


--------------------
Go to the top of the page
+Quote Post
bemol
post
Post #6





Grupa: Zarejestrowani
Postów: 286
Pomógł: 29
Dołączył: 5.04.2007
Skąd: Rymanów Zdrój/Rzeszów

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


  1. <?php
  2. switch ($_GET['krok']) {
  3.  
  4. case 1: { // 1 - wartość tablicy $_GET['krok']
  5.  
  6. echo '<form action="skrypt.php?krok=2" method="post">
  7. <input />
  8. <input />
  9. <input />
  10. </form>';
  11.  
  12. break;}
  13.  
  14. case 2: { // 2 - wartość tablicy $_GET['krok']
  15.  
  16. ...
  17.  
  18. break;}
  19.  
  20. // itd...
  21.  
  22. default: { // wartość domyślna
  23.  
  24. echo '<form action="skrypt.php?krok=1" method="post">
  25. <input />
  26. <input />
  27. <input />
  28. </form>';
  29.  
  30. break;}
  31. }
  32. ?>


Więcej: http://pl.wikibooks.org/wiki/PHP/Instrukcja_switch
i
http://pl.php.net/manual/en/control-structures.switch.php

Ten post edytował bemol 5.07.2009, 11:21:19


--------------------
Tym ludziom zaufałem i dobrze na tym wyszedłem:
kresh
Darti
piotrekkr
Bez nich wiele bym nie zrobił. Dzięki im za to!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #7





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Właśnie zacząłem przerabiać na switch. Na razie bez zmian. Zastosuję się do Twoich propozycji. Instrukcję switch znam dobrze, wszystkie pliki inkludowane mam na ten funkcji. Można zobaczyć efekty mojej pracy tu. Problem widoczny najbardziej w kroku 4 i 5...

EDIT: właśnie skończyłem - niestety, efekt identyczny ;(

Ten post edytował Kshyhoo 5.07.2009, 11:48:56


--------------------
Go to the top of the page
+Quote Post
bemol
post
Post #8





Grupa: Zarejestrowani
Postów: 286
Pomógł: 29
Dołączył: 5.04.2007
Skąd: Rymanów Zdrój/Rzeszów

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


dodaj w każdym 'case' :
1.
  1. <?php
  2. if (!isset($_SESSION['krok']) or empty($_SESSION['krok'])) $_SESSION['krok'] = 1; //w zależności który krok jest
  3. else $_SESSION['krok']++;
  4. ?>

2.
  1. <?php
  2. if ($_SESSION['krok'] > $_GET['krok'];) {
  3. // ktos wcisnal wstecz
  4. }
  5. else {
  6. // jest poprawnie
  7. }
  8. ?>


Ten post edytował bemol 5.07.2009, 11:52:09


--------------------
Tym ludziom zaufałem i dobrze na tym wyszedłem:
kresh
Darti
piotrekkr
Bez nich wiele bym nie zrobił. Dzięki im za to!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #9





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Zrobiłem tak:
  1. <?php
  2. case 4:{
  3.              if (!isset($_SESSION['krok']) or empty($_SESSION['krok'])) $_SESSION['krok'] = 4;
  4.              else $_SESSION['krok']++;
  5.  
  6.              echo "<center><form name='generator' action='herb1.php?krok=5' method='POST'>";
  7.  
  8.              if ($_SESSION['krok'] > $_GET['krok']) { // ktos wcisnal wstecz
  9.                      include('include/krok3.php');
  10.              }
  11.              else { // jest poprawnie
  12.                       include('include/krok4.php');
  13.                }
  14.  
  15.              echo "<input type='hidden' name='krok' value='5'>\n";
  16.              echo "<input type='submit' name='dalej' value='Idź dalej'></form>";
  17. break;}
  18. ?>

Ale efekt ten sam...


--------------------
Go to the top of the page
+Quote Post
Pawel_W
post
Post #10





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


  1. <?php
  2. case 4:
  3.             if (!isset($_SESSION['krok']) or empty($_SESSION['krok'])) $_SESSION['krok'] = 4;
  4.             else $_SESSION['krok']++;
  5.  
  6.             echo "<center><form name='generator' action='herb1.php?krok=5' method='POST'>";
  7.  
  8.             if ($_SESSION['krok'] > $_GET['krok']) { // ktos wcisnal wstecz
  9.                     include('include/krok3.php');
  10.             }
  11.             else { // jest poprawnie
  12.                      include('include/krok4.php');
  13.               }
  14.  
  15.             echo "<input type='hidden' name='krok' value='5'>\n";
  16.             echo "<input type='submit' name='dalej' value='Idź dalej'></form>";
  17. break;
  18. ?>
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #11





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Efekt dokładnie taki sam... Problem jest w tym, że po WSTECZ, również $_GET na wartość pomniejszoną o 1...

Cytat(erix @ 4.07.2009, 22:33:57 ) *
A czemu nie korzystasz z sesji?

Jakieś szczegóły?

Ten post edytował Kshyhoo 5.07.2009, 14:28:20


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Dlaczego wszystkie dane przepychasz przez użytkownika?

Poczytaj kurs PHP o sesjach.


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

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!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #13





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Jak dotąd nie znalazłem sposobu na efektywne zabezpieczenie się przed przyciskiem WSTECZ... Nagłówek, sesje i cookie nic nie dały, bo i tak przetwarza mi te same dane. Z ODŚWIEŻ jakoś sobie radzę...
Przewałkowałem Google, najwięcej wniósł ten temat. Znalazłem też takie coś. Może ktoś mi podpowiedzieć, jak to zastosować?



@erix, Ty mnie chyba naprawdę [cenzura] nie lubisz? Już przecież wiesz, że poznałem mechanizm sesji... ale do rozwiązania problemu, z którym się zgłosiłem sama znajomość sesji nie wystarczy. W miesiąc nie sposób poznać php (z przeprowadzką na głowie). Po za tym, chyba wybrałem odpowiedni dział? Może niech powstanie kolejny (proponuję "żłobek"), gdzie towarzystwo będzie bardziej przychylne.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
zgłosiłem sama znajomość sesji nie wystarczy

Owszem, wystarczy. Gdybyś poznał sesje, byś także poczytał o ataku zwanym CSRF i o metodach przed zabezpieczeniem przed nim. Jest tam coś takiego zwanego tokenem, jeśli będziesz dla każdego żądania generował unikalny, to będziesz miał zabezpieczenie także przed wtecz/dalej.

Cytat
@erix, Ty mnie chyba naprawdę [cenzura] nie lubisz?

Nie lubię lenistwa.


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

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!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #15





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(erix @ 6.07.2009, 22:23:48 ) *
Nie lubię lenistwa.

Kiedyś mieliśmy okazję na ten temat rozmawiać. Odpuść sobie te pieprzenie, bo lenistwa nie może mi nikt zarzucić.

Co co "coś takiego zwanego tokenem, jeśli będziesz dla każdego żądania generował unikalny", to robiłem:
  1. <?php
  2. <input type='hidden' name='id' value='".uniqid()."'>
  3. ?>

i:
  1. <?php
  2. if (isset($dalej) and $_POST["id"]==$_SESSION["id"]) {
  3. echo "";
  4. }
  5. if (isset($dalej) and $_POST["id"]<>$_SESSION["id"]) {
  6. $_SESSION["id"] = $_POST["id"];
  7. echo $dalej;
  8. }
  9. ?>

i ODŚWIEŻ owszem, na ale WSTECZ nie działało, bo przecież i tak był ten sam id...

Sądząc po linku, który wkleiłem wcześniej, to jest spory problem i dla profesjonalistów.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Bo przed wygenerowaniem tokena musisz go wrzucić do sesji i potem przy załadowaniu sprawdzasz, czy już w niej jest. Jeśli nie ma - wiesz co robić.

Cytat
Sądząc po linku, który wkleiłem wcześniej, to jest spory problem

Nie jest, wystarczy ruszyć głową.

Cytat
Odpuść sobie te pieprzenie

Chyba Ci się pomyliły pełnione funkcje... Nie Ty tu jesteś od pouczania i ja Cię pouczam, że z takim słownictwem daleko nie zajedziesz. To nie jest Twoje podwórko.


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

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!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #17





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Opierałem się na tym artykule,

Cytat(erix @ 6.07.2009, 22:52:35 ) *
To nie jest Twoje podwórko.

Twoje również nie. Jesteś tu tylko moderatorem a nie królem. Masz coś do powiedzenia w temacie (czyt. chcesz pomóc), zapraszam. Jeżeli nie, proszę - nie wypowiadaj się.

PS. Za niecenzuralne słowo przepraszam. Poniosło mnie - bo nie czuję się leniem.


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #18





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Opierałem się na tym artykule,

Wątpię, aby ktoś miał wykupiony abonament w tym serwisie oprócz Ciebie.

Cytat
Twoje również nie. Jesteś tu tylko moderatorem a nie królem. Masz coś do powiedzenia w temacie (czyt. chcesz pomóc), zapraszam. Jeżeli nie, proszę - nie wypowiadaj się.

Moim zadaniem jest tu pilnowanie porządku. Jeśli Ci się wydaje inaczej - zawsze możesz sprawę zgłosić do administratora. Poza tym, odpowiadam w każdym poście na temat, więc w czym problem?

Cytat
PS. Za niecenzuralne słowo przepraszam. Poniosło mnie - bo nie czuję się leniem.

Trzymaj nerwy na wodzy. To nie jest miejsce na "noszenie".

A co do tematu: zapomniałem jeszcze dodać o nagłówkach bez cache'owania.


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

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!
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #19





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Cytat(erix @ 6.07.2009, 23:15:04 ) *
A co do tematu: zapomniałem jeszcze dodać o nagłówkach bez cache'owania.

To pierwsza rzecz, którą zrobiłem. Na WSTECZ marna rada...


--------------------
Go to the top of the page
+Quote Post
erix
post
Post #20





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Bo przeglądarka wczytuje stronę z pamięci. Jeśli chcesz, aby strona była naprawdę wczytywana ponownie, to stosuj tokeny i najlepiej SSL (wówczas przeglądarki inaczej traktują zawartość - tzn. nie cache'ują tak stron).


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

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!
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: 20.08.2025 - 04:50