[PHP] Ograniczenie include

0

Witam!
Ostatnio rozmyślam nad tym, jak na nie-dedykowanym serwerze ograniczyć funkcję include() dla określonego folderu, tak aby nie odpalić jakiegoś evil-owego skrypciku ala: include('../admin/config.php');
Na razie nic mi nie przychodzi do głowy. W ogóle jest na to jakiś sposób oprócz osobnej sesji serwerowej?

0
Demonical Monk napisał(a)

na nie-dedykowanym serwerze

...

0

Trzymać wszystkie "bezpieczne" skrypty w jednym folderze i sprawdzać czy ten o podanej nazwie tam się znajduje (w sensie przeszukać go jakimś globem i porównywać nazwy plików)?

0

A może zrobić skrypt zabezpieczający który będzie wyglądał tak:
http://host.pl/zabezpieczenie.php?addr=accounts/portal2/index.php
No i skierować taki adres:
http://host.pl/accounts/portal2/index.php
Do skryptu podanego wyżej. Wtedy można ewaluować kod PHP i wycinać z niego niewygodne kawałki jak tylko się zechce.
Tylko teraz jak wydzielić to co jest w <? i ?> od plain textu? Ktoś mógłby napisać regułę preg match?

0

Aj, pisze "nie-dedykowanym", a ja przeczytałem "dedykowanym".

Ale nie rozumiem zbytnio co chcesz osiągnąć. Czy chcesz zabezpieczyć się przed użytkownikiem, który podaje coś na stronie i ty na tej podstawie włączasz plik? Jeśli tak to wystarczy odpowiednie filtrowanie danych + usuwanie "../" i tym podobnych rzeczy.

0

Na nie-dedyku chcę przykładowo udostępnić komuś innemu część konta, ale nie chcę evilowych skrypcików ala include('../config.php');

0

aaaa o to chodzi ...
to gorzej :/ chyba nie możliwe

ciężko będzie to skutecznie uniemożliwić ale można utrudnić wykorzystując mod_rewrite w taki sposób że każdy skrypt z jego udostępnionej powierzchni będzie przechodził przez twój skrypt sprawdzając czy nie ma tam czegoś złego

możesz cache'ować wyniki sprawdzania tak żeby nie sprawdzać po tysiąc razy jednego pliku który się nie zmienia

problem tylko co ten skrypt właściwie miałby robić ... jedyne co przychodzi mi do głowy to zamiana wystąpienia include na includeX, require na requireX itp.
problem że tych poleceń groźnych jest dużo więcej (np: file_get_contents, file, unlink, rmdir, mkdir, readfile i pewnie jeszcze dużo innych)

czyli teoretycznie ktoś pisze skrypt a odwołanie do niego powoduje wywołanie twojego skryptu, który:

  • zmieni wstępnie folder roboczy na ten w którym znajduje się przerabiany skrypt (chdir)
  • wczyta treść skryptu (file_get_contents)
  • zamieni każde wystąpienia groźnych poleceń na odpowiedniki (str_replace / preg_replace)
  • wykonuje skrypt (eval)

oczywiście ten skrypt musiałby też posiadać odpowiedniki funkcji czyli opakowane te polecenia w polecenia sprawdzające czy nie próbujemy się odwołać do naszego folderu

z tym że za pomocą np, eval można ten mechanizm bardzo łatwo oszukać więc eval też można opakować, jednak sprawdzanie zawartości eval może być trudne

w dodatku oczywiście musisz sprawdzić wszystkie pliki które includuje dany skrypt bo co z tego że skrypt który wywołujemy nie robi nic groźnego skoro plik includowany przez niego robi, a odwołania takie już nie zostaną przechwycone przez mod_rewrite bo to się dzieje już poza apache

czyli ogólnie chyba kupa roboty przed tobą, w dodatku nie widzę jakoś tego żeby ten system nie miał dziur bo trzeba by być chyba jasnowidzem

gdyby w php była możliwość zablokowania poleceń w określonych linijkach skryptu ...

jeśli chcesz po prostu zrobić hosting na bezpłatnym serwerze to wydaje mi się że to się nie opłaca ...

0

a oddzielenie od plain textu pewnie możliwe ale to tylko wprowadza dodatkowe dziury w tym systemie więc proponuje po prostu zamienić każde wystąpienie
nie powinno to sprawiać kłopotów dopóki to nie będzie strona o php :P

ale jeśli chcesz to przyjrzyj się po prostu dowolnemu systemowi szablonów, tam jest coś analogicznego

0

Nie chcę robić hostingu na bezpłatnym serwerze, ale po zdaniu sobie sprawy z tego ile trzeba zrobić już mi się odechciało. Poszukam innego rozwiązania...

1 użytkowników online, w tym zalogowanych: 0, gości: 1