-
Data: 2009-03-09 10:58:31
Temat: Re: Jak pokazać ścieżkę dostępu do dokumentu?
Od: "Marek" <m...@s...interia.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]> Uparcie robisz na opak :)
>
> Formularz kontaktowy _powinien_ używać POST, bo ma efekt uboczny -
> wysłanie e-maila.
Więc nie robię na opak :-) Ponadto chyba każdy submit formularza ma na celu
mieć efekt uboczny? Po to się to robi aby wysłać email, dodać do koszyka
(bazy danych) noiwą pozycję zamówienia, zaktualizować w bazie danych ilości
zamawianych produktów itp. W żadnym z tych przypadków akcja POST nie może
się powtórzyć przy np. odświeżeniu.
> Dlatego należy robić walidację danych!
Mam walidację lecz to za mało. Nie wolno np. pola nazwać "email" bo boty
spamowe wiedzą wtedy co tam wpisać. Pole powinno nazwyać się "dupa" lub coś
w tym stylu. Pozostałem pola to imię, nazwisko, treść - więc nie ma czego
walidować.
> Nie rób bezbronnych aplikacji (security by obscurity) polegając na tym jak
> bardzo komuś się (nie)chce. Zrób to porządnie tak, żeby nie było
> oczywistych dziur w użyciu danych POST, GET, cookies i innych.
Nie robię - nawet robię sporo więcej: stosuję ID transakcji a w skrajnych
przypadkach - generowanie wartości pola przez JS.
> Powiedziałem dobrym botom. Te złe i tak będą ci łaziły po wszystkich
> formularzach - GET (harvestery) i POST (spamboty).
Hmmm... założyłem, że się przejęzyczyłeś. A co to zmieni jeśli złe i tak
będą spamowały - jak sam napisałeś? Dobre przecież nie są źródłem spamu.
> Nie rozumiem o czym mówisz. Wyszukiwarka = GET. Koszyk = POST.
> Wyszukiwarka != koszyk.
Ok... może przykład. Jestem na karcie produktu. Dodaję produkt do koszyka
(np. POST), w koszyku aktualizuję ilość (POST) klikam wstecz i co dostaję? Z
pewnością nie stronę produktową lecz komunikat o próbie submitu formularza.
W "moim" podejściu te dwa POSTy nie są widoczne dla przeglądarki i wstecz
przenosi tam gdzie user oczekuje - do produktu.
> Przeglądarka wysyła POST. Obrabiasz dane, wysyłasz status 303 i nagłówek
> Location. Przeglądarka załaduje nową stronę używając GET. Wracanie działa
> tak, jak zawsze powinno.
Hmm.. ciekawe. Poeksperymentuję bo faktycznie nie pomyślałem o takim
podejściu. Mam jednakże pewną wątpliwość... a co jeśli naszą intencją jest
pozostanie na tej samej stronie? Przykładowo taki przypadek ma miejsce przy
aktualizacji ilości w koszyku albo akceptacji kryteriów w wyszukiwarce.
> To jest mniejwięcej to, co opisałeś na początku wątku. Sęk w tym, żeby to
> stosować tylko wtedy, gdy potrzeba POST (czyli nie przy wyszukiwaniu) i
> żeby URL podany w Location zawierał coś unikalnego zależnego od danych z
> POST, jeśli ma z nimi jakiś związek (jeśli wyświetlasz tylko stronę z
> "dziękujemy za wysłanie formularza", to nie musi być unikalny. Jeśli
> wyświetlasz "dodałeś czajnik do koszyka", to powinien być unikalny, żeby
> po dodaniu czegoś innego do koszyka użytkownik na pewno nie dostał strony
> o czajniku).
Tak, ja nawet dołączam ID transakcji - nie tylko jest wtedy unikalny lecz
nie pozwala na celowe powtórzenie operacji. Każdy moduł programowy CMS'a,
który przetwarza dane z formularzy bada zgodność ID transakcji z formularza
z poprzednio obowiązującym i dopiero wtedy traktuje dane jako
uwierzytelnione. Każde przeładowanie = nowy ID.
> Jeśli masz w aplikacji choć odrobinę abstrakcji, to powinno dać się używać
> GET na początku i bezboleśnie przerobić na POST, jeżeli ilość pól urośnie
> do niebezpiecznego rozmiaru.
Ja dmucham na zimne i POST stosuję wszędzie :-) Szczerze mówiąc tylko przy
wyszukiwarce widziałbym uzasadnienie stosowania GET ale to też obarczone
byłoby ryzykiem. Nie chciałem wdawać się w szczegóły lecz widzę, że
powinienem. Otóż w swoim CMSie udostępniam możliwość konfigurowania
wyszukiwarki z poziomu sekcji redakcyjnej. Właściciel sklepu / portalu /
prostej strony WWW sam decyduje jakie kryteria i w jakich wyszukiwarkach w
systemie mają być dostępne. Mało tego - sam określa jakie cechy posiada dany
dokument / produkt. Wszystkie z nich mogą stanowić kryteria wyszukiwania -
to kwestia kliknięcia tylko. Tak więc chcąc uniknąć niespodzianek związanych
z przekroczeniem długości GET - stosuję POST.
> W praktyce jednak z tym się nie spotykam. Formularz, który ma kilkaset pól
> albo opcji do zaznaczenia w <select> najczęściej jest też zbyt
> skomplikowany dla użytkowników i robi zbyt wiele rzeczy na raz. Taki
> formularz dzielę na mniejsze (coś a'la wizard) albo wybór spośród setek
> indywidualnych opcji zamieniam na coś innego - np. wybór całych
> grup/kategorii albo wg. tagów/słów kluczowych.
Takie wielopolowe formularze mają zastosowanie np. przy ręcznym
aktualizowaniu cen produktów. Wtedy dobrze jest wykorzystać listę produktów
i pól cenowych. Natomiast w wielu pozostałych przypadkach wystarczy jedno
pole aby przepełnić możliwości GET. Takim polem jest np. "treść wiadomości"
w formularzu kontaktowym lub "uwagi do zamówienia" w koszyku. Nie
ogranicznam ilości znaków bo nie powinienem.
Następne wpisy z tego wątku
- 09.03.09 11:05 Marek
- 09.03.09 11:06 Marek
- 09.03.09 14:36 Grzegorz Staniak
- 09.03.09 20:22 porneL
- 09.03.09 21:10 Marek
- 09.03.09 21:17 Marek
- 09.03.09 21:49 Konrad Kosmowski
- 09.03.09 23:29 porneL
- 10.03.09 00:42 Marek
- 10.03.09 09:06 Maciej Łebkowski
- 10.03.09 09:23 Artur Muszyński
- 10.03.09 12:38 Marek
- 10.03.09 12:38 Marek
- 10.03.09 19:52 Marek
- 10.03.09 20:25 Konrad Kosmowski
Najnowsze wątki z tej grupy
- Jakie znacie działające serwery grup dyskusyjnych?
- is it live this group at news.icm.edu.pl
- php, linki z nazwami a $_GET, SEO
- www polityka pl captcha
- dyktatura brudnego palucha
- www.znanylekarz.pl
- Czy pytanie o sczytywanie stron programami/skryptami to tu?
- Grupy webdevowe
- Jak wydrukować stronę?
- IIS, kilka witryn
- linki <a href="/strona.php"> (ze slashami)
- co rozszerza stronę??
- responsywny akapit <p>
- Czy istnieje jakiś emulator przeglądarek pod Mac'a?
- taka sama konfiguracja dla localhost i produkcji
Najnowsze wątki
- 2024-11-08 Belka
- 2024-11-09 pierdolec na punkcie psa
- 2024-11-09 Warszawa => Sales Executive <=
- 2024-11-09 Wrocław => SAP BTP Consultant (mid/senior) <=
- 2024-11-09 Warszawa => ECM Specialist / Consultant <=
- 2024-11-09 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-11-10 TVN donosi: Obywatelskie zatrzymanie policjanta (nie na służbie)
- 2024-11-08 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Szczecin => Key Account Manager (ERP) <=
- 2024-11-08 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-08 Wrocław => Senior PHP Symfony Developer <=
- 2024-11-08 Warszawa => QA Engineer <=
- 2024-11-08 Warszawa => QA Inżynier <=
- 2024-11-08 Warszawa => Key Account Manager <=