Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Captcha i MVC
kicaj
post 26.07.2008, 16:20:20
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Zgodnie z MVC zabezpieczenie typu Captcha powinno byc sprawdzane w Modelu czy Kontrolerze?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
ddiceman
post 26.07.2008, 16:43:34
Post #2





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


W kontrolerze. Captcha odpowiada za sterowanie: autoryzowanie dostepu lub jego brak. Nie ma specjalnie duzo wspolngo z danymi.
Go to the top of the page
+Quote Post
kejk
post 26.07.2008, 23:23:22
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 20.07.2008

Ostrzeżenie: (0%)
-----


Cytat(ddiceman @ 26.07.2008, 17:43:34 ) *
W kontrolerze. Captcha odpowiada za sterowanie: autoryzowanie dostepu lub jego brak. Nie ma specjalnie duzo wspolngo z danymi.


Jak to nie ma wiele wspólnego z danymi? Captha powinna być sprawdzana przy walidacji danych przesłanych z formularza do zapisu - czyli w modelu.
Go to the top of the page
+Quote Post
wrzasq
post 27.07.2008, 05:45:47
Post #4





Grupa: Zarejestrowani
Postów: 206
Pomógł: 18
Dołączył: 6.03.2006
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


moze to troche przerost formy nad trescia, ale jesli masz dosc rozbudowany system i chcesz w jakis dosc elastyczny sposob zeimplementowac CAPTCHA, to ja bym to w "ostatecznej formie ewolucji" widzial tak, ze masz klase kontrolera do captchy, zupelnie odseparowana od samego przetwarzania danych i w modelu masz najpierw odwolanie do metody kontrolera CAPTCHA i w zaleznosci o jego rezultatow podejmujesz kolejne kroki innych klas, ale to jest tak jak juz powiedzialem wersja dosc rozbudowana, takze w mniejszych ujeciach moze stanowic wspomniany "przerost formy nad trescia".


--------------------
Go to the top of the page
+Quote Post
ddiceman
post 28.07.2008, 09:15:48
Post #5





Grupa: Zarejestrowani
Postów: 326
Pomógł: 121
Dołączył: 23.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(kejk @ 27.07.2008, 00:23:22 ) *
Jak to nie ma wiele wspólnego z danymi? Captha powinna być sprawdzana przy walidacji danych przesłanych z formularza do zapisu - czyli w modelu.

Ale captchy nie skladujesz dluzej niz moment po wygenerowaniu - nie jest Twoja dana skladowana jak np. tresc artykulu czy dane uzytkownika.
Go to the top of the page
+Quote Post
Cysiaczek
post 28.07.2008, 09:41:33
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Tak na moje oko, to zależy od upodobań. Powinna być sprawdzana tam, gdzie dane użytkownika, najlepiej na samym początku. Jako, że jest to raczej zabezpieczenie, to powinno być odseparowane od pozostałych danych. Dla przykładu: Załóżmy, że mamy klasę walidującą dane
  1. <?php
  2. $modelValidator=new ModelValidator();
  3. $modelValidator->addTrueFilter($captcha); // taki twór, który wymusza, aby $captcha miała metodę validate() zwracającą booleana
  4. $modelValidator->validate($model);
  5. ?>


Captcha jest teraz dołączana do walidacji, ale nie jest związana z modelem, bo i z jakiej racji? Mogę sobie zażyczyć, aby kliknięcie w link pokazujący jakąś treść było poprzedzone sprawdzeniem użytkownika. Nie ma tu wówczas modelu danych - jest tylko żądanie, którego warunkiem wykonania jest poprawnie wpisany kod. Jest to wówczas bardziej związane z autoryzacją.
Na pewno nie powinno to zostać wmieszane w sam model danych.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
kicaj
post 29.07.2008, 21:40:31
Post #7





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


To powiem tak, ja to widze w ten sposob (na przykladzie Cake):
Stworzylem sobie komponent Captcha, ktory implementuje w Kontrolerze.
Poniewaz captcha wystepuje w tym przypadku przy formularzu (dowolnym), wiec najpierw waliduje pola z formularza, a na koncu pole typu captcha, wyglada to mniejwiecej tak w modelu:
  1. <?php
  2. class Model extends AppModel
  3. {
  4. var $validate = array(
  5.  'kod' => array(
  6.  'rule' => array( 'userDefined', 'Model', 'captcha' ), // czyt. wlasna funkcja w modelu 'Model' metody 'captcha'
  7.  'message' => 'Niepoprawny kod!' ) );
  8.  
  9.  function captcha( $check )
  10.  {
  11.  // tutaj chcialbym porownac $check (wartosc pola 'kod' z formularza)
  12.  // z zarejestrowanym w sesji kodem, chcialo by sie uzyc:
  13.  // $this -> Session -> read( 'captcha );
  14.  // dostep jest jednak z modelu zabroniony do sesji
  15.  if( $check == $wartosc_session )
  16.  {
  17.  return true;
  18.  }
  19.  else
  20.  {
  21.  return false;
  22.  }
  23.  }
  24. }
  25. ?>

Uzyc w Modelu wbudowanej obslugi sesji nie moge. Zawsze jest rozwiazanie z uzyciem tablic $_SESSION ale to chyba nie tedy droga?

Wiec jak to rozwiazac?

Wydaje mi sie ze captcha poprostu powinna byc sprawdzana jak inne dane formularza, czyli w modelu...

Ten post edytował kicaj 29.07.2008, 21:42:29


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
LBO
post 29.07.2008, 23:50:20
Post #8





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Captcha powinno być sprawdzane tam gdzie następuje walidacja. Jeżeli framework waliduje w modelu - zrób to w modelu. Jeżeli walidacja jest transparentna (np w plikach konfiguracyjnych) - zrób to tam.
Nie chodzi o upodobania, tylko o narzędzia smile.gif

Ja korzystam z Agavi. Tam walidacja jest ustawiana w pliku XML. Dopisałem sobie walidator captchy - jeżeli sie nie zgadza - rzuca błędem walidacji, jeżeli jest okay to dane z formularza trafiają do kontrolera i captchą nie przejmuje się w ogóle (nawet nieraz usuwam z danych z formularza).

Ten post edytował LBO 30.07.2008, 00:25:29
Go to the top of the page
+Quote Post
kicaj
post 30.07.2008, 17:17:43
Post #9





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Ja tez uwazam ze w Modelu, pytanie teraz jak rozwiazac dostep z modelu do sesji (w Cake oczywiscie)?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 18:38