Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Php wykonuje ten sam formularz dwa razy jesli nie zrobisz zadnych zabezpieczen, a uzytkownik wcisnie klawisz cofnij w przegladarce i kliknie OK.

Jak zabezpieczacie sie przed takimi podwojnym postowaniem?

Sam mam swoje sposoby, chetnie poslucham innych.

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

jesli idzie o forum dyskusyjne / komentarze generuje hash z kilku elementow i przed zapisem do bazy sprawdzam czy istnieje. jesli tak - nie dodaje danych.
Jarosław Rafa

Jarosław Rafa senior software
engineer, Motorola
Solutions Systems
Polska

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Pare razy przekonalem sie, ze zabezpieczenie po stronie serwera nie zawsze sie sprawdza, bo user jest w stanie tak szybko dwukrotnie kliknac przycisk "Wyslij", ze dane pojda dwukrotnie zanim skrypt na serwerze zablokuje mozliwosc postniecia drugi raz...
Dlatego teraz robie to javascriptem, blokujac zdarzenie onsubmit jezeli przycisk byl juz raz klikniety...

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Na stronie z formularzem:
if (isset($_SESSION['xx'])) {
unset($_SESSION['xx']);
}


Po wysłaniu wiadomości:
if (!isset($_SESSION['xx'])) {
mysql_query("INSERT INTO ....");
$_SESSION['xx'] = true;
}
Filip Górny

Filip Górny Programista,
webdeveloper.

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Kamil Brenk:
Na stronie z formularzem:
if (isset($_SESSION['xx'])) {
unset($_SESSION['xx']);
}


Po wysłaniu wiadomości:
if (!isset($_SESSION['xx'])) {
mysql_query("INSERT INTO ....");
$_SESSION['xx'] = true;
}

Tez za zwyczaj dzialam na sesji, ale zastanawiam sie czy to najprofesjonalniejsze wyjscie, wydaje mi sie ze nie. Ciekawe jak to robia programisci znanych polskich portali.

Ponizej fragment mojego kodu.


public function post_similar($codeId)
{
// tutaj inserty do bazy


$_SESSION['similar_info'] = true;
url::redirect('product/post_similar_success/'.$codeId);
}
public function post_similar_success($code_id)
{
if (isset($_SESSION['similar_info'])) $this->_info('Produkty zostały dodane.'); unset($_SESSION['similar_info']);
return $this->show($code_id);
}
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

rób tak jak robisz, albo wykorzystaj sposób używany podczas obrony przed CSRF -> http://www.beldzio.com/cross-site-request-forgery-–-csrf
Łukasz Iwanek

Łukasz Iwanek Właściciel -
internetica.pl

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

banalnym i podstawowym ale równocześnie skutecznym sposobem jest zrobienie przekierowania.

1. ankieta.php -> wprowadzamy dane

2. skrypt.php -> przyjmuje postem dane i od razu header() (przekierowanie) na:

3. dziekuje.php

Dane postem idą z 1 do 2 a użytkownik od razu ląduje na 3, więc nawet jak odświeży stronę to nie dostanie zapytania o ponowne wysłanie danych.Łukasz Iwanek edytował(a) ten post dnia 14.09.09 o godzinie 19:08
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Łukasz Iwanek podał wg mnie bezkonkurencyjne rozwiązanie. Czasami musiałem też wykorzystać submit ajaxowy i po wszystkich zablokować form lub zastąpić go prostym divem z podziękowaniem.

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Łukasz Iwanek:
banalnym i podstawowym ale równocześnie skutecznym sposobem jest zrobienie przekierowania.

Też tak robię. Praktycznie wszędzie gdzie leci POST. Na dodatek można sobie przesłać link powrotny i wracać we wskazane miejsce. A przed podwójnym wprowadzeniem takiej samej treści robię tak, jak radzi Wojtek - hasz w sesji i sprawdzam przed dodaniem.

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Łukasz Iwanek:
banalnym i podstawowym ale równocześnie skutecznym sposobem jest zrobienie przekierowania.

1. ankieta.php -> wprowadzamy dane

2. skrypt.php -> przyjmuje postem dane i od razu header() (przekierowanie) na:

3. dziekuje.php

Dane postem idą z 1 do 2 a użytkownik od razu ląduje na 3, więc nawet jak odświeży stronę to nie dostanie zapytania o

Nie do końca to zadziała poprawnie.
Zawsze możesz cofnąc przeglądarkę "alt <-" i POST znów zostanie wysłany.

Dobrą metoda jest kontrolowanie tego, co robi osoba wysyłająca dane w sesji. Nie e tak prosty sposób jak pokazał Filip ale mniej więcej o to chodzi. Generalnie zabezpieczyć przed wysłaniem tego samego nie da się skutecznie zabezpieczyć. Można jedynie kontrolować co wysyła user i w przypadku tych samych danych zablokowac przetwarzanie. Wymaga to jednak małej gimnastyki z przeładowaniem skryptów i wykorzystaniem sesji.
Piotr Baranowski

Piotr Baranowski Rozwiązuje problemy,
poprawiam świat,
chłonę wiedzę i
prz...

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Ja robie kombinacje JavaScipt + Sesja.

Nie lubie tych redirectow, bo musze wtedy po jednym submicie serwowac dwie strony zamiast jednej.

Zazwyczaj po submicie user jest u mnie przekierowany juz do strony z tym co dodal.

A przed back, back, send again trudno sie ochronic tak czy siak. Mozna sprobowac sprawdzic tego hasha, albo w sesji sprawdzac kiedy user ostatnio cos submitowal - jezeli minelo za malo czasu, to nie pozwolic.

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Robert Kozakiewicz:

1. ankieta.php -> wprowadzamy dane

2. skrypt.php -> przyjmuje postem dane i od razu header() (przekierowanie) na:

3. dziekuje.php

Dane postem idą z 1 do 2 a użytkownik od razu ląduje na 3, więc nawet jak odświeży stronę to nie dostanie zapytania o

Nie do końca to zadziała poprawnie.
Zawsze możesz cofnąc przeglądarkę "alt <-" i POST znów
> zostanie wysłany.

Jeżeli user będzie w 'dziekuje.php' i wciśnie 'back', to nie wróci do 'skrypt.php', tylko do 'ankieta.php'. Nie wyskoczy mu okienko z prośbą o ponowne wysłanie posta, tylko wyświetli mu się formularz ankiety.

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Robert Kozakiewicz:
Nie do końca to zadziała poprawnie.
Zawsze możesz cofnąc przeglądarkę i POST znów zostanie wysłany.

jak zastosujesz przekierowanie 301, to nie będzie tego problemu.

Przed podwójnym naciśnięciem "submita" zabezpieczam się, dodając na nim onclick= lub w formie onsubmit
disabled=true
Paweł Pysznik edytował(a) ten post dnia 16.09.09 o godzinie 08:30

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Łukasz Iwanek:
banalnym i podstawowym ale równocześnie skutecznym sposobem jest zrobienie przekierowania.

to jest tzw. pattern PRG

Post Redirect Get

ale to raczej nie zabezpieczy nas przed podwojnym kliknieciem

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Piotr Baranowski:
Ja robie kombinacje JavaScipt + Sesja.
Nie lubie tych redirectow, bo musze wtedy po jednym submicie serwowac dwie strony zamiast jednej.

a jednak je lubisz tylko inaczej ponizej
Zazwyczaj po submicie user jest u mnie przekierowany juz do strony z tym co dodal.

PRG
A przed back, back, send again trudno sie ochronic tak czy siak. Mozna sprobowac sprawdzic tego hasha, albo w sesji sprawdzac kiedy user ostatnio cos submitowal - jezeli minelo za malo czasu, to nie pozwolic.

nie ma sensu

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

no wlasnie, a czemu ludzie 2-3-4 razy klikaja?

:>

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Tomasz Grzechowski:
no wlasnie, a czemu ludzie 2-3-4 razy klikaja?

bo maja "wolny internet" chocby..
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

captcha, validator w kontrolerze akcji i po problemie :P

konto usunięte

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Wojciech Zbigniew Piotrowicz:
Tomasz Grzechowski:
no wlasnie, a czemu ludzie 2-3-4 razy klikaja?

bo maja "wolny internet" chocby..

:-)

to nie jest powod :D

Temat: Jak sie zabezpieczasz przed podwojnym $_POSTowaniem?

Owszem. Jak im się nic nie dzieje, to klikają kilka razy, bo myślą, że coś się zwiesiło. Czasami to skuktuje. Ale w przypadku $POSTÓW często kończy się podwójnym wysłaniem.

Następna dyskusja:

Hmm Jak to się zaczeło




Wyślij zaproszenie do