![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
Piszę ten wątek tutaj ponieważ nie pasuje on chyba na php pro gdyż jego tematyka jest zbyt swawolna, a php to już nie to.
Ostatnio sporo myślałem nad systemem php.pl i doszłem do wniosku, że cały system (a raczej kontrola jądra nad modułami -> bezpieczeństwo) będzie w dużej częsci polegała nie na funkcjonalności jądra, ale na zauwafniu, że nikt z develeperów nie będzie umieszczał tam (w kodzie modułów) koni trojańskich ani nic takiego. Mówie tutaj, że jakiś moduł zamiast proszenia BSP o plik sam go sobie weźmie za pomocą sql-layer (tak to bede nazywał) zdobytej przez funkcje global. Może nie byłoby tak z samym systemem ale np. nieoficjalne wtyczki... Wtedy z pomocą przyszedł mi matrix 2 (sam nie wiem czy był taki nudny, że miałem czas pomyśleć spokojnie, czy wyciągnąłem wnioski z samego filmu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ). Co prawda system (matrix) dał się złamać, ale oglądając go doszłem do pewnych wniosków jak dać jądrze kontrole nad aplikacją. W sumie doszłem do takiego wniosku. Jeżeli chcemy wiedziec co robi aplikacja (mówie ogólnie, w naszym przypadku moduł), czego używa a czego nie i jeszcze na dodatek to wszystko kontrolować, to aplikacja musi działać o poziom niżej w hierarchi od jądra. Innymi słowy aplikacja nie powinna być wykonywana przez parser języka (w naszym przypadku php), ale przez naszą aplikację. W ten sposób każda czynność, każda linijka kodu mogłaby być sprawdzana pod kontem niebezpieczeństw. Teraz następny problem. Ale jak to zrobić? Ano jak w temacie trzeba napisać własny język. Myślałem o tym. Nie pisałem jeszcze własnego języka i nie mam w tym doświadczenie, ale wymyśliłem jak mógłby wyglądać taki język naprzykład stworzony w XML'u. Pokarze tutaj jak wyobrażam sobie taki "hello world" dodatkowo ze sprawdzaniem parametru z GET'a. php:[php:1:adb267e0b1]<?php if( $_GET['say']==1 ) { print "Hello World"; } else { print "I won't say hello to you"; } ?>[/php:1:adb267e0b1] Własny język w XML'u: Kod <application> Nie wiem jak tam z moją angielszczyzną, ale mam nadzieje, że założenie jest zrozumiałe. Teraz w XML'u możemy każdą instrukcję sprawdzić i dopiero potem wykonać. Można by było definiować obiekty, a nawet np. stworzyć jezyk obiektowy za pomocą znaczników typu <math:sqrt><int>9</int></math:sgrt>.
<if> <warunek> <equal> <param source="get" name="say" /> <int>1</int> </equal> </warunek> <then> <out> <text>Hello World</text> </out> </then> <else> <out> <text>I won't say hello to you</text> </out> </else> </if> </application> Teraz moja największa obawa. Wydajność... Jak by to działało pod względem szybkości. Przy moich założeniach, że każde rozszeżenie poza standart (core) byłoby includowane specjalnym znacznikiem (jak use w perlu, import w pythonie czy dl w php) pamięc nie byłaby zbytnio obciążona. Takie coś wcale nie jest trudne do wykonania a daje olbrzymie możliwości, jak całkowia kontrola aplikacji instruckja po instrukcji i np. Jeszcze można np.dodac obsługe userów (napisane w php, jako część języka, a potem sprawdzać czy user ma dostęp do wykonywania określinych instrukcji), BSP (z poziomu języka nie można byłoby mieć dostępu do normalnego systemu plików) i można byłoby zboduwać naprawdę potęrzne środowisko do pisania aplikacji w których ważne jest to, że nie mamy całkowitego zaufania do kodu źródłowego. Wow, ale tekst wyskrobałem. Bardzo proszę o komentarze (jeżeli komuś będzie się chcuało to czytać) ponieważ dużo o tym myślałem i jestem ciekwa co Wy o tym sądzicie. Jeżeli są jakieś niejasności to pytajcie (ja mam wizje i wiem o co mi chodzi ale Wy nie jesteście mną (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ). |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 195 Pomógł: 0 Dołączył: 7.07.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ale można zrobić język kompilowany przy pierwszej interpretacji do php, tak jak jest ze Smarty. Tylko jaką by miał składnię? Najlepiej podobną do php (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) I jesteśmy w punkcie wyjścia. Może PHP5 nas wybawi (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dokladnie. Kompilowalnosc jezyka lub tez jej brak nie jest zadnym rozwiazaniem. Stajemy w punkcie gdy musimy w php obsluzyc inny jezyk nie ograniczajac jego swobody poza niebezpieczne punkty. To, ze musimy ograniczac wynika z zalozenia projektu, to ze nie mozemy powoduje, ze nie mozemy tutaj wstawic innego jezyka, ktorego mozliwosci bylby znacznie mniejsze od php. Najwygodniej byloby gdybysmy mogli "wlaczyc" piaskownice (czyli tryb bez funkcji x,y,z) i wylaczyc ja po wykonaniu kodu include() (ale nie pozwalac na to w samym include!)... tego chyba jednak nie mozemy zrobic (choc... hmm... mozna sprobowac chyba) Cytat Ta "luka" na nic się nie zda, jesli trafi się ktoś sprytniejszy. W PHP4 masz metodę get_class() i pochodne, za pomocą której możesz określić jakiej klasy jest dany obiekt. Mając jeszcze dostęp do $GLOBALS nasz użytkownik może dostać się do wszystkiego co ma identyfikator.
Toz mowilem o tym, ze wowczas nalezaloby zachowac sie sprytniej - obiekt przypisac elementowi tablicy albo cus... i niech "hackerski" skrypt sobie szuka... ALe to jest zabawa w kotka i myszke, i broniacy sie zawsze przegra. Wiec odpada Cytat Nieprawda. Jeśli moduły php nadal pozostaną zbiorami funkcji bezpośrednio importowanymi z C to nadal będzie można wywołać np. mysql_query(), które działa wykorzystując domyślnie ostatnio otwarte połączenie. Drzwi otwarte.
A! A! Przyecztaj co napisalem. mysql_change_user. Przelogowujemy goscia na czas jego modulu. Jedyne czego musimy pilnowac, to jest, aby nie poznal hasla na usera o wiekszych uprawnieniach. Cytat Podobnie z klasami. Jeśli nie będzie się dało tworzyć klas lokalnych (klasa w klasie, wtedy potomne są zaprzyjaźnione z nadrzędnymi i moga mieć dostęp do jej składowych) to i tak na nic takie ograniczenia w stylu private, gdyż i tak będziesz musiał udostepnić publicznie jakiś interfejs do wymiany danych między modułami, a nie będziesz za każdym razem sprawdzał dostępu przy wywołaniu metody. Zawsze coś się znajdzie, co można wykorzystać.
Nie! Myslalem o czyms w stylu klasy nadrzednej CMS w ktorej jest wlasciwosc CMS->db_pass ktora jest dostepna dla jej potomkow (potomkami sa klasy |accounts|,|access| itp) ale niedostepna dla modulu. Natomiast zasmuciles mnie z klasami lokalnymi. O PHP5 wiem bardzo malo, ale myslalem ze to oczywiste ze bedzie... Cytat Może goście z PHP5 o tym pomyślą. Może.
Moze by im to zasugerowac? Model piaskownicy w stylu [php:1:75942c3e07]<?php $access->password='x23fe'; mysql_change_user('module','module_pass'); run_sand_box(false, false, false); // can_change_db, allowed_dir_list, allowed_object_list; include('module.inc'); stop_sand_box(); ?>[/php:1:75942c3e07] bylby piekny dla kazdego autora CMSa posaidajacego API:) ?>[/php] |
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 21:06 |