=?UTF-8?B?YmV6cGllY3plxYRzdHdv?= formularza
kmmdg - 31-10-2007 00:01
=?UTF-8?B?YmV6cGllY3plxYRzdHdv?= formularza
Witam!
Szukam dobrego sposobu na sprawdzenie, czy dane zostały na pewno wysłane z formularza na mojej stronie, a nie z zewnętrznego hosta.
Pozdrawiam Jakub
PS. Inne kwestie związane z bezpieczeństwem wysyłania danych z formularzy, też chętnie poczytam.
=?UTF-8?B?QXJ0dXIgTXVzennFhHNraQ==?= - 31-10-2007 00:01
kmmdg pisze: > Szukam dobrego sposobu na sprawdzenie, czy dane zostały na pewno wysłane z > formularza na mojej stronie, a nie z zewnętrznego hosta.
Nie ma takiego sposobu.
> PS. Inne kwestie związane z bezpieczeństwem wysyłania danych z formularzy, > też chętnie poczytam.
Dane z formularzy nie są bezpieczne.
artur
kmmdg - 31-10-2007 00:01
> Nie ma takiego sposobu.
> Dane z formularzy nie są bezpieczne.
To się dowiedziałem...
Szymon - 31-10-2007 00:01
kmmdg pisze: >> Nie ma takiego sposobu. > >> Dane z formularzy nie są bezpieczne. > > To się dowiedziałem...
Czyżbyś był niezadowolony z odpowiedzi???
Any User - 31-10-2007 00:01
>> Szukam dobrego sposobu na sprawdzenie, czy dane zostały na pewno >> wysłane z >> formularza na mojej stronie, a nie z zewnętrznego hosta. > > Nie ma takiego sposobu.
Przy czym oczywiście można kombinować z kryptografią i captchą.
-- Czy każdy powinien mieć prawo głosu w wyborach? http://pracownik.blogspot.com
Colin - 31-10-2007 00:01
kmmdg wrote: > Szukam dobrego sposobu na sprawdzenie, czy dane zostały na pewno wysłane z > formularza na mojej stronie, a nie z zewnętrznego hosta.
function mksecret($len = 7) { $znaki = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCV BNM0123456789'; $ilosc = strlen($znaki); for ($i=0; $i<$len; $i++) { $znak = mt_rand(0,$ilosc-1); $ret .= $znaki[$znak]; } return $ret; } session_start(); if (!$_SESSION['token']) $_SESSION['token'] = mksecret();
W kodzie formularza: <input type="hidden" name="token" value="'.$_SESSION['token'].'">
Przy odczytywaniu danych z formularza sprawdź ($_SESSION['token'] == $_POST['token']).
Any User - 31-10-2007 00:01
>> Szukam dobrego sposobu na sprawdzenie, czy dane zostały na pewno >> wysłane z >> formularza na mojej stronie, a nie z zewnętrznego hosta. > > function mksecret($len = 7) { > > Przy odczytywaniu danych z formularza sprawdź ($_SESSION['token'] == > $_POST['token']).
Przy czym oczywiście to jest bardzo mało skuteczne - weryfikuje jedynie, czy zewnętrzny automat umie obsługiwać sesje, a nie tylko robić pojedyncze requesty.
Oprócz sugerowanej już kryptografii i captchy, można jeszcze próbować weryfikować właściwości przeglądarki:
a) wywalić na stronie jakiś javascript i oczekiwać efektu jego wykonania przez przeglądarkę - przy czym to ma wadę: niektórzy mają wyłączony javascript
b) zrobić pełną walidację treści requesta (w tym głównie pola useragent) i sprawdzić, czy to, co przeglądarka deklaruje w useragent, pokrywa się z wyglądem requesta - ale z kolei to ma taką wadę, że trzeba mieć jakąś wiedzę nt. odchyłek poszczególnych przeglądarek - demo tej techniki jest w skrypcie o nazwie Big Brother (niestety nie mogę odnaleźć do niego linka)
-- Czy każdy powinien mieć prawo głosu w wyborach? http://pracownik.blogspot.com
zdzisio - 31-10-2007 00:01
Any User pisze: >>> Szukam dobrego sposobu na sprawdzenie, czy dane zostały na pewno >>> wysłane z >>> formularza na mojej stronie, a nie z zewnętrznego hosta. >> >> function mksecret($len = 7) { >> >> Przy odczytywaniu danych z formularza sprawdź ($_SESSION['token'] == >> $_POST['token']). > > Przy czym oczywiście to jest bardzo mało skuteczne - weryfikuje jedynie, > czy zewnętrzny automat umie obsługiwać sesje, a nie tylko robić > pojedyncze requesty. >
mozna też zapisać w sesji datę wygenerowania tokenu i sprawdzić jak szybko po wygenerowaniu formulaża nastapił POST
a wtedy mój ulubiony komunikat "aplikacja podejrzewa że nie jesteś człowiekiem. jezeli sie myli - poczekaj chwilę i wyślij formularz ponownie".
z
Any User - 31-10-2007 00:01
>> Przy czym oczywiście to jest bardzo mało skuteczne - weryfikuje >> jedynie, czy zewnętrzny automat umie obsługiwać sesje, a nie tylko >> robić pojedyncze requesty. > > mozna też zapisać w sesji datę wygenerowania tokenu i sprawdzić jak > szybko po wygenerowaniu formulaża nastapił POST > > a wtedy mój ulubiony komunikat "aplikacja podejrzewa że nie jesteś > człowiekiem. jezeli sie myli - poczekaj chwilę i wyślij formularz > ponownie".
No tak, ale pytanie, jak bardzo chcemy podnieść poziom trudności. To, o czym piszesz, można konkretnie obejść w ten sposób:
http://www.idg.pl/news/129180.html
I o pomyśle na dokładnie takie coś, ja osobiście słyszałem w 2003.
-- Czy każdy powinien mieć prawo głosu w wyborach? http://pracownik.blogspot.com
zdzisio - 31-10-2007 00:01
Any User pisze:
> pytanie, jak bardzo chcemy podnieść poziom trudności.
no zgoda, bo przeciez juz ustaliliśmy że w gruncie rzeczy całkowicie zabezpieczyć sie przed tym nie da.
ale ten watek rozpoczęło pytanie jak sprawdzać skad przychodzi POST a nie czy ktoś jest, lub nie, automatem spamujacym.
sposób z zapisywaniem tokena do pola hidden formularza i do sesji jest jak najbardziej poprawnym rozwiazaniem zadanego problemu
> > http://www.idg.pl/news/129180.html >
autorowi pomysłu zazdroszcze toku myslenia. bo to kolejny dowód na to ze aby rozwiazać problem trzeba go najpierw poprawnie zidentyfikować.
bo problemem bylo rozpoznanie napisu i wpisanie go w pole formularza a nie *automatyczne* rozpoznanie napisu i *automatyczne* wysłanie go postem.
bardzo błyskotliwe.
z.
porneL - 31-10-2007 00:01
On Tue, 30 Oct 2007 22:32:52 -0000, zdzisio <zdzisio@poczta.xz.pl> wrote:
> mozna też zapisać w sesji datę wygenerowania tokenu i sprawdzić jak > szybko po wygenerowaniu formulaża nastapił POST
A co za trudność dla komputera wykonać sleep()? No i nawet takie coś nie zabezpiecza przed masowym wysyłaniem, bo można żądać wielu tokenów równolegle.
Tak naprawdę jakikolwiek jednorazowy token *jest* gwarancją, że formularz został wysłany "ze strony". Wymaga pobrania strony i wysłania formularza -- dokładnie to robi przeglądarka. Taki token przy okazji broni przed atakiem CSRF, ale nie jest żadnym zabezpieczeniem przeciw automatycznemu wysyłaniu formularza przez boty. Jeśli przeglądarka może wysłać formularz, to każdy przeglądarkopodobny wynalazek też. HTTP nie ma mechanizmu do sprawdzania czy ktoś siedzi przed komputerem...
-- http://sblam.com <-- jeśli chodzi o blokowanie spambotów, to oczywiście autoreklamuję się :)
this.author = new Geek("porneL");
zdzisio - 31-10-2007 00:01
porneL pisze: > On Tue, 30 Oct 2007 22:32:52 -0000, zdzisio <zdzisio@poczta.xz.pl> wrote: > >> mozna też zapisać w sesji datę wygenerowania tokenu i sprawdzić jak >> szybko po wygenerowaniu formulaża nastapił POST > > A co za trudność dla komputera wykonać sleep()?
no zadna.
> > Tak naprawdę jakikolwiek jednorazowy token *jest* gwarancją, że > formularz został wysłany "ze strony". Wymaga pobrania strony i wysłania > formularza -- dokładnie to robi przeglądarka. Taki token przy okazji > broni przed atakiem CSRF, ale nie jest żadnym zabezpieczeniem przeciw > automatycznemu wysyłaniu formularza przez boty. Jeśli przeglądarka może > wysłać formularz, to każdy przeglądarkopodobny wynalazek też. HTTP nie > ma mechanizmu do sprawdzania czy ktoś siedzi przed komputerem... >
wszystko prawda i wcale nie twierdze, że jest inaczej. zupełnie nie rozumiem dlaczego postanowiles napisac to akurat pod moim postem, ale "tak, masz racje, zgadza sie" :)
z.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] (4.1 lub nowszy) pobieranie =?UTF-8?Q?rekord=C3=B3w?="minimalnych"
problem z kodowaniem UTF-8 przy robieniu kopii zapasowej
mysqldump i kodowanie utf-8 (brak polskich znakow)
Poziome, pionowe paski lub siatka - jak =?UTF-8?B?enJvYmnEhz8g?=
=?iso-8859-2?q?utf-8_i_problem_z_z=B3?=
[postgresql] jdbc i =?UTF-8?B?d3lqxIV0a2k=?= z bazy
mysql, utf-8 i blednie wyciagane znaki
[MSSQL2000] Jak wyeksportować .txt w formacie UTF-8??
phpSolutions - szewc bez =?UTF-8?B?YnV0w7N3?=
[MySQL] REGEXP =?UTF-8?B?ZG9rxYJhZG5pZSBkd2Egem5ha2k=?=
zanotowane.pldoc.pisz.plpdf.pisz.pltejsza.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|