Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MVC] Kontrola dostępu
Forum PHP.pl > Forum > PHP > Object-oriented programming
Jarod
Jedno krótkie pytanie.
Jak się bronicie w aplikacjach MVC przed niezalogowanym userem, który nie ma dostępu do skryptu np. user.php a próbuje odpalić skrypt ręcznie z pominięciem kontrolera?

Czy jedynym sensownym rozwiązaniem (aby w widoku nie paskudzić w kodzie) jest htaccess z deny from all?

pzdr
sobstel
Deny from all to zawsze dobry pomysl, tak samo jak trzymanie plikow powyzej głównego katalogu WWW.

Tak naprawdę do końca nie rozumiem Twojego problemu. W implementacjach MVC, frameworkach, itp. zazwyczaj wszystko przechodzi przez index.php, a wszystko to co się może wykonać, jest zamknięte w klasach, więc bez jawnego odpalenia klasy (utworzenia obiektu, itp.) nic się na stanie. Mówiąc inaczej, jak w pliku user.php mam klase User, to co mnie obchodzi, że ktoś to odpali bezpośrednio?

A jeśli chodzi o kontrole dostępu, to w MVC najlepiej użyć filtrów, a dokładnie jednego filtra bezpieczeństwa, który decyduje o tym czy ktoś ma dostęp do akcji/kontrolera czy też nie.
Jarod
Cytat(sopel @ 18.04.2008, 16:59:42 ) *
Deny from all to zawsze dobry pomysl, tak samo jak trzymanie plikow powyzej głównego katalogu WWW.

Tak naprawdę do końca nie rozumiem Twojego problemu. W implementacjach MVC, frameworkach, itp. zazwyczaj wszystko przechodzi przez index.php, a wszystko to co się może wykonać, jest zamknięte w klasach, więc bez jawnego odpalenia klasy (utworzenia obiektu, itp.) nic się na stanie. Mówiąc inaczej, jak w pliku user.php mam klase User, to co mnie obchodzi, że ktoś to odpali bezpośrednio?


Masz rację, ale jeśli nie wyłączysz wyświetlania błędów na serwerze to zobaczysz erory i warningi. Ja wyłączam ale uważam, że i tak apache nie powinien pozwolić odpalić takiego pliku.

Cytat(sopel @ 18.04.2008, 16:59:42 ) *
A jeśli chodzi o kontrole dostępu, to w MVC najlepiej użyć filtrów, a dokładnie jednego filtra bezpieczeństwa, który decyduje o tym czy ktoś ma dostęp do akcji/kontrolera czy też nie.

I tak robię.
bim2
Cytat(Jarod @ 18.04.2008, 17:45:31 ) *
Masz rację, ale jeśli nie wyłączysz wyświetlania błędów na serwerze to zobaczysz erory i warningi. Ja wyłączam ale uważam, że i tak apache nie powinien pozwolić odpalić takiego pliku.
I tak robię.

Jakie warningi, przykladowo poniższy kod jeśli go uruchomisz nic nie zrobi:
  1. <?php
  2. class User {
  3. public function __construct()
  4. {
  5. echo 'to sie i tak nie wyswietli';
  6. }
  7. }
  8. ?>

Nigdzie nie wywołujesz klasy, ona sobie jest i już. W każdym pliku akcji/modelu/widoku trzymam klasę a w index.php mam Controller->execute(); i metoda execute włącza odpowiednią klasę winksmiley.jpg
nrm
jw.

<?php defined('SYSPATH') or die('No direct script access.');

//

?>

wszystko leci przez index.
Sedziwoj
Cytat(normanos @ 18.04.2008, 22:34:26 ) *
jw.

  1. <?php
  2. defined('SYSPATH') or die('No direct script access.');
  3.  
  4. //
  5. ?>


wszystko leci przez index.


A jaki jest sens tego?
Przecież już zostało napisane, że może sobie user otwierać pliki i tak nic nie zobaczy.
Do tego jeżeli to nie są błędy składniowe, a jedynie w kodzie klas, to i tak PHP ich nie kompiluje, więc się nie wyświetlą.
nrm
nie wszystkie pliki to klasy, są różne rzeczy. jak to mówią "strzeżonego pan bóg strzeże" winksmiley.jpg krzywdy Ci to nie zrobi winksmiley.jpg
Sedziwoj
Cytat(normanos @ 19.04.2008, 09:39:17 ) *
nie wszystkie pliki to klasy, są różne rzeczy. jak to mówią "strzeżonego pan bóg strzeże" winksmiley.jpg krzywdy Ci to nie zrobi winksmiley.jpg


Jak piszesz porządnie to masz tylko klasy, do tego zabezpieczasz .htaccess a nie w ten dziwny, obciążający wykonanie sposób.
I moim zdaniem to jedyny sensowny sposób zabezpieczania przed dostępem z zewnątrz. (oczywiście jeszcze mamy ograniczenia dostępu do pliku...)
nrm
w takim razie większość FW jest nieporządna i basta tongue.gif
sobstel
Właściwie błędy się pojawiać jeśli mamy dziedziczenie albo implmentujemy interfejsy (np. class Klasa extends Rodzic { }). Koniec końców dyrektywa Deny, albo trzymania ponad główny katalogiem WWW dla mnie załatwia sprawę - jest to zreszą logiczne, w obrębie DOC_ROOT powinno być przecież tylko to, co może być wywołane z poziomu WWW.
Sedziwoj
Cytat(normanos @ 20.04.2008, 12:17:36 ) *
w takim razie większość FW jest nieporządna i basta tongue.gif


To podaj mi łaskawie które korzystają, bo mi się nie chce przeglądać, a chyba wiesz co mówisz.
Jarod
Cytat(Sedziwoj @ 19.04.2008, 22:56:26 ) *
Jak piszesz porządnie to masz tylko klasy


Ja wszędzie stosuję klasy, oprócz kodu JS i widoku. U mnie widok to szablon, który wyświetla dane - moim zdaniem nie ma sensu robić klasy, która będzie wyświetlała htmla - a wtedy będą błędy.



Dziękuje wszystkim za odpowiedzi. Zostanę przy htaccess bo chyba najlepszy sposób.
webdice
Cytat(Jarod @ 20.04.2008, 15:12:52 ) *
(...) Zostanę przy htaccess bo chyba najlepszy sposób.


Pamiętaj że nie na wszystkich serwerach jest dostęp do plików .htaccess.
nrm
Cytat(Sedziwoj @ 20.04.2008, 12:11:57 ) *
To podaj mi łaskawie które korzystają, bo mi się nie chce przeglądać, a chyba wiesz co mówisz.

Mi też się nie chce, ale proszę:

http://dev.ellislab.com/svn/CodeIgniter/tr...ies/Session.php
http://trac.kohanaphp.com/browser/trunk/sy...ies/Session.php
http://rapideframework.googlecode.com/svn/

Tylko proszę bez argumentów, że te akurat są *, albo, że to mało winksmiley.jpg w php to jest chyba przynajmniej 50 FW a nie chce mi się tego przeglądać winksmiley.jpg Nie mówie, że tak nalezy robić ale, że też jest taka mozliwość.
Sedziwoj
Cytat(normanos @ 20.04.2008, 16:58:48 ) *
Tylko proszę bez argumentów, że te akurat są *, albo, że to mało winksmiley.jpg w php to jest chyba przynajmniej 50 FW a nie chce mi się tego przeglądać winksmiley.jpg Nie mówie, że tak nalezy robić ale, że też jest taka mozliwość.


Tia, szczególnie ten ostatni przydatny.
Przecież nie zaprzeczam, że jest taka możliwość, tylko że bezsensowna.
A skoro nie mogłeś podać od razu, to znaczy, że nie wiedziałeś, tylko powtarzałeś czyjeś zdanie (lub co gorsza, wymyśliłeś, na podstawie jednego FW), a o to mi chodziło, nie to że nie jest stosowane, ale o to że napisałeś, że jest często stosowane, skoro nie umiesz potwierdzić, to znaczy że to było gadanie aby gadać. A podważałeś moje zdanie w ten sposób, więc Twoje argumenty można wywalić do kosza, teraz nie ważne czy znajdziesz nawet 100 FW z tym, bo chodzi o to, że pisząc nie widziałeś jaki jest stan faktyczny.

No dobra, kończę temat, bo chyba nie ma co kontynuować.
nrm
tak zakręciłeś, że cholera wie o co Ci chodzi winksmiley.jpg jak nie mogłem podać od razu skoro to z pamięci zrobiłem?!? (wszystkie powyższe FW używałem więc pamiętałem, że tam coś takiego jest). Dostałeś 3 i jeszcze Ci mało winksmiley.jpg a do tego dorabiasz jakieś zakręcone teorie.
bim2
Koledzy nie kłóćcie się. Każdy ma swoje zdanie.

Moim zdaniem jednak kolega @Sedziwoj ma rację. Jest to niepotrzebne, jeśli w plikach znajdują się same klasy. To że wywali że nie ma danej klasy (przez extends) to nic się nie stanie, chyba, że boisz się, że podwiną Ci nazwę tej wspaniałej klasy snitch.gif
nrm
Nie stawiajcie mnie w roli strony "konfliktu" (strasznie nie lubię sytuacji kiedy na siłę ktoś umieszcza mnie w nieprawdziwym kontekście aby udowodnić swoje racje). Pokazałem tylko, że tak można, i że kilka FW tego używa (widziałem to też w kilku OS CMS i forach). Temat jest ciekawy - można zapytać twórców np. Kohany dlaczego stosują takie rozwiązanie - może mają coś ciekawego do powiedzenia.
Jarod
Cytat(webdicepl @ 20.04.2008, 13:29:04 ) *
Pamiętaj że nie na wszystkich serwerach jest dostęp do plików .htaccess.


Wiem, zdaje sobie sprawę. Ale pisząc aplikację wiem wcześniej na jakim serwerze będzie umieszczona.
pzdr
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.