Zastanawiam się, czy ktokolwiek może udzielić odpowiedzi „najlepszych praktyk” na użycie pustych działań formularza HTML w celu opublikowania z powrotem na bieżącej stronie.
Jest post z pytaniem, co robi tutaj pusta czynność formularza HTML, a niektóre strony takie jak ta sugerują, że jest w porządku, ale chciałbym wiedzieć, co ludzie myślą.
forms
web-standards
string
html
Matt Mitchell
źródło
źródło
<form name="xyz" >
). Prześle działanie samodzielnie.Odpowiedzi:
Najlepsze, co możesz zrobić, to całkowicie pominąć atrybut akcji. Jeśli go pominiesz, formularz zostanie przesłany na adres dokumentu, tj. Tę samą stronę.
Możliwe jest również pozostawienie go pustego, a każda przeglądarka implementująca algorytm przesyłania formularzy HTML będzie traktować go jako równoważny adresowi dokumentu, co dzieje się głównie dlatego, że tak właśnie działają przeglądarki:
To z pewnością działa we wszystkich obecnych przeglądarkach, ale może nie działać zgodnie z oczekiwaniami w niektórych starszych przeglądarkach ( „ przeglądarki robią dziwne rzeczy z pustym atrybutem action =” „ ) ” , dlatego specyfika zdecydowanie odradza autorom pozostawienie go pustym :
źródło
action=""
W rzeczywistości podsekcja Zgłaszanie formularzy bieżącego szkicu HTML5 nie pozwala
action=""
. Jest to niezgodne ze specyfikacją.Cytowana sekcja w odpowiedzi mercatora jest wymogiem dotyczącym implementacji , a nie autorów . Autorzy muszą przestrzegać wymagań autora. Cytując Jak czytać tę specyfikację :
Zmiana z HTML4 - która pozwoliła na pusty adres URL - została wprowadzona, ponieważ „ przeglądarki robią dziwne rzeczy z pustym
action=""
atrybutem ”. Biorąc pod uwagę powód zmiany, prawdopodobnie najlepiej nie robić tego również w HTML4.źródło
action
atrybutu, aby wskazać, że formularz powinien zostać przesłany na adres dokumentu? Wydaje się, ponieważ mówi „jeśli jest określony”.Brak atrybutu action powoduje otwarcie strony na ataki typu „ clickjacking” iframe , które obejmują kilka prostych kroków:
Bibliografia
źródło
$_POST
zamiast,$_REQUEST
aby tego uniknąć. Jeśli$_REQUEST
używasz kodu frameworka , użyj klastra iframe .Spowoduje to sprawdzenie poprawności w HTML5.
źródło
action="."
?action="."
to zły pomysł na ogólny przypadek. Adres URL podobnyexample.com/login
jest zmapowany tylko naexample.com/
.W HTML 5
action=""
NIE JEST OBSŁUGIWANE, więc NIE Rób tego. ZŁA PRAKTYKA.Jeśli zamiast tego całkowicie zignorujesz działanie, domyślnie zostanie ono przesłane na tę samą stronę, uważam, że jest to najlepsza praktyka:
Jeśli wypełniasz formularz przy użyciu php, możesz rozważyć następujące kwestie. czytaj więcej o tym tutaj.
Możesz też
#
pamiętać, że będzie to działać jak kotwica i przewiń na górę strony.źródło
htmlspecialchars()
funkcji powstrzymuje ludzi przed używaniem skryptu php przeciwko tobie.Zwykle używam akcji = "", która jest poprawna w XHTML i zachowuje dane GET w adresie URL.
źródło
Myślę, że najlepiej jest wyraźnie określić, gdzie znajduje się formularz. Jeśli chcesz być całkowicie bezpieczny, wpisz ten sam adres URL, w którym znajduje się formularz, w atrybucie akcji, jeśli chcesz, aby przesłał się z powrotem do siebie. Mimo że przeglądarki głównego nurtu oceniają
""
tę samą stronę, nie można zagwarantować, że zrobią to przeglądarki inne niż ogólne.I oczywiście cały URL, w tym dane GET, takie jak Juddling, wskazuje.
źródło
Po prostu użyj
Nie narusza standardów HTML5.
źródło
get
. Formularz podany poniżej urwałby się,example.com/update_user?user_id=1
ponieważ formularz zostanie przesłany doexample.com/update_user?
Często to robiłem, kiedy pracowałem z Classic ASP. Zwykle używałem go, gdy potrzebna była jakaś weryfikacja po stronie serwera dla danych wejściowych (przed dniami AJAX). Główną wadą, którą widzę, jest to, że nie oddziela logiki programowania od prezentacji na poziomie plików.
źródło
Używam, aby w ogóle nie określać atrybutu akcji. Tak naprawdę jest zaprojektowany mój framework, wszystkie strony są przesyłane z powrotem dokładnie pod ten sam adres. Ale dzisiaj odkryłem problem. Czasami pożyczam wartość atrybutu akcji, aby wykonać jakieś wywołanie w tle (chyba niektórzy nazywają je AJAX). Stwierdziłem więc, że IE zachowuje wartość atrybutu akcji jako pustą, jeśli atrybut akcji nie został określony. W moim rozumieniu jest to trochę dziwne, ponieważ jeśli nie określono atrybutu akcji, odpowiednik JavaScript musi być co najmniej niezdefiniowany. W każdym razie, moim celem jest, zanim wybierzesz najlepszą praktykę, musisz zrozumieć więcej kontekstu, na przykład czy użyjesz atrybutu w JavaScript, czy nie.
źródło