2011-01-13 14 views
5

Obserwuję tym przykładzie poradnikaDlaczego Zend przykład przestaje działać kiedy dodać skrót do formularza

kod projektu: http://akrabat.com/wp-content/uploads/zf-tutorial-layoutform.zip

poradnik: http://akrabat.com/zend-framework/a-form-in-your-layout/

Kod projektu przebiega zgodnie z oczekiwaniami, aż dodaję element hash do formularza. Wszystko co mogę zrobić, to dodać ten kod w formularzu pod formularzem/formularze/Signup.php

$hash = new Zend_Form_Element_Hash('hash'); 
$hash->setSalt('mysalt'); 
$this->addElement($hash); 

Ten dodatkowy kod kodu wszystko wyrzuca. Kiedy przesłać formularz teraz, daje mi błąd, że 2 tokeny nie pasują.

Niektóre rozwiązywanie problemów:

  • Problemem nie jest sam hash ponieważ działa prawidłowo w moich innych przykładów.
  • Myślę, że ma to związek z tym, jak rozpatrywane jest żądanie w tym przykładzie, ale nie mamy pewności, na czym dokładnie polega problem. Myślałem, że ma to związek z liczbą przeskoków, ale kiedy edytuję Zend_Form_Element_Hash i zmieniłem liczbę przeskoków z 1 na 100, wciąż mam ten sam błąd.

To jest zakres rozwiązywania problemów, które mogłem wymyślić na moim poziomie wiedzy z Zend. Więc pomyślałem, że nadszedł czas, aby zapytać wielkie mózgi. Mam nadzieję, że ktoś może to zrozumieć.

+0

Jako element skrótu używa zend_session, który może być problem. kolejną rzeczą do sprawdzenia może być chmiel aż do sprawdzenia poprawności, ponieważ wartość mieszania wygasa po jednym przeskoku (lub po przekroczeniu limitu czasu). – Fge

+0

Nie jest to zakodowane na stałe. Ale możesz porównać zawartość sesji i dane formularza przesłanego. ($ _SESSION vs $ _POST) i usuń wszelkie przekierowania do debugowania. – Fge

+0

Nie bezpośrednio. Ale to więcej niż jeden, jeśli pasek przeglądarki pokazuje cokolwiek innego niż cel formularza. Ale jeśli nie przekierowujesz, naprawdę powinieneś sprawdzić $ _SESSION/$ _ POST. – Fge

Odpowiedz

2

Działa dla Ciebie nawet po dodaniu elementu hasha do formularza? Jeśli tak, czy możesz przesłać projekt i opublikować jako osobną odpowiedź?

Po prostu dodałem kod, który wysłałeś, i wszystko działało dobrze. Gdzie używasz tego kodu? To brzmi jak coś związanego ze środowiskiem?

0

Od: Zend_Form_Element_Hash

Element ten zapewnia ochronę przed atakami CSRF w formach, upewniając się, że dane przedstawione przez sesji użytkownika, który wygenerował formę, a nie przez nieuczciwych skryptu. Ochrona jest osiągnięta poprzez dodanie elementu hash do formularza i weryfikację go po przesłaniu formularza.

Nazwa elementu skrótu powinna być unikalna. Zalecamy korzystanie z opcji soli do element- dwóch mieszań z samych nazwach i różnych soli nie kolidują:

$form->addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));

Można ustawić sól później używając setSalt ($ salt) metody.

Wewnętrznie element przechowuje unikalny identyfikator za pomocą Zend_Session_Namespace i sprawdza go podczas przesyłania (sprawdzając, czy TTL nie wygasł). Walidator "Identyczny" jest następnie używany do zapewnienia, że ​​przesłany skrót jest zgodny z przechowywanym hashem.

Pomocnik widoku "formHidden" służy do renderowania elementu w formularzu.

Postaram:

$form->addElement('hash', 'unique_form_name', array('salt' => 'unique_salt'));

nie widzę unikalną nazwę forma/hash w kodzie i dlatego tokeny nie macha.

+0

Czy ciąg znaków 'hash' nie jest używany do utworzenia elementu jego unikatowej nazwy? –

+0

Nazwa nie jest problemem. Działa dobrze z nazwą "hash". – user570783

Powiązane problemy