php injection jak się ustrzec

php injection jak się ustrzec
WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Jak sie przed tym ustrzec. Nie chodzi mi o bazy danych. Trzymam dane w plikach. Przesylam formularze i parametry ?id=costam. Jesli chodzi o formularze to staram sie usuwac tagi html przed zapisem i trzymac nazwy i wartosci w cudzyslowach
Mam pliki .htaccess. Cos jeszcze??

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Trzymam dane w plikach.

Tak jak każda istniejąca nie-memory-only baza danych ;-)

Jesli chodzi o formularze to staram sie [...] trzymac nazwy i wartosci w cudzyslowach

Co to znaczy?

Mam pliki .htaccess.

W jaki sposób .htaccess zabezpiecza Cię przed atakami typu xxx injection?

Cos jeszcze?

Na pewno pomocne jest niewynajdywanie koła od nowa - jeśli (poprawnie!) korzystasz z mechanizmu szablonów (typu Twig czy Blade), jesteś w dużej mierze zabezpieczony.

Frameworki (jak Symfony czy Laravel) również dużo załatwiają za Ciebie i gwarantują pewien stopień bezpieczeństwa, np. dzięki wbudowanym mechanizmom CSRF czy zabezpieczeniami przed SQL Injection poprzez wykorzystanie query builderów, zamiast ręcznego sklejania SQLi.


WP
.htaccess to moze nie o injection ale zawsze ochroni katalog z plikami gdzie trzymam dane. Ktos jeszcze ma pomysły w jaki sposob zabezpieczyć sie ?
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Na temat odpisuj w postach;

ochroni katalog z plikami gdzie trzymam dane

Nie powinieneś trzymać prywatnych danych w publicznym katalogu - rzuć okiem, jak robi to np. Laravel.

Ktos jeszcze ma pomysły w jaki sposob zabezpieczyć sie ?

Przed czym?


edytowany 2x, ostatnio: Patryk27
WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

W takim razie gdzie trzymac pliki jak nie w katalogu. Skad kos wie czy bedzie wiedzial znal scuezke do katalogu
Przed czym? Przed wszystkim co może zrobić kuku

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

W takim razie gdzie trzymac pliki jak nie w katalogu.

  1. Przytoczyłeś tylko fragment mojego zdania, przez co straciło ono sens - napisałem: nie powinieneś trzymać prywatnych danych w PUBLICZNYM katalogu.

  2. Wspomniałem: rzuć okiem, jak robi to np. Laravel.

Przed wszystkim co może zrobić kuku

Web application security to bardzo szeroki temat - na początek wystarczy, abyś rzucił okiem na owasp top 10.


edytowany 1x, ostatnio: Patryk27
WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Jakbym jeszcze wiedzial na co mam patrzec to by bylo dobrze skoro sam nie znam tematu. Jak nie publiczny to jaki. Proste pytanie.

edytowany 1x, ostatnio: wesoly_pogrzeb
KL
  • Rejestracja:prawie 8 lat
  • Ostatnio:5 miesięcy
  • Postów:191
1

Prywatny...?
Jak spojrzysz na strukturę, którą buduje m.in Laravel czy Yii2, to zobaczysz, że struktura wyraźnie się rozdziela na zasoby publiczne, dostępne dla użyszkodnika - pliki html, cssy itp. oraz zasoby prywatne, do których użytkownik dostępu nie ma i nie będzie wiedział, że w ogóle istnieją w danym miejscu na dysku, bo dostanie albo 403 albo 404 przy próbie wejścia.

Staraj się też czytać to co piszesz, bo robisz to strasznie chaotycznie i niełatwo jest odgadnąć co masz na myśli patrząc na poszczególne pytania czy stwierdzenia.

WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Dobrze dobrze ale skoro nikt nie zna struktury drzewa czy zwac inaczej skryptu i nie wie gdzie sa trzymane pliki to w jaki sposob to zrobi tzn dostanie sie do katalogu. Moge go tak zakopac ze sam nie bede wiedzial gdzie jest

edytowany 1x, ostatnio: wesoly_pogrzeb
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Warszawa
  • Postów:2252
0

@wesoly_pogrzeb: wiesz co to jest document/web root (mówię w kontekście serwera www)? Tak jak @Patryk27 przejrzyj jak to robi laravel, albo inny framework). Ale możę opiszę Ci to w skrócie:

  1. Serwer www wystawia folder do którego jest dostęp z zewnątrz (czyli przez url w przegladarce) - folder np "public_html"
  2. Plik index.php w tym folderze ma dostęp do nadrzędnego folderu i tego co leży obok "public_html" czyli np "application"
  3. Aplikacja ma dostęp do tych prywatnych folderów, a użytkownik z zewnątrz tylko do tego co jest w public_html.
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Podczas konfiguracji serwera (Apache / nginx) możesz wybrać katalog, gdzie znajduje się kod Twojej aplikacji - zwyczajowo jest to np. /var/www/html/my-application (z plikiem index zlokalizowanym w /var/www/html/my-application/index.php).

Jest to katalog publiczny, gdyż każdy znajdujący się w nim plik jest potencjalnie widoczny dla użytkowników (pomijając kwestię .htaccess).

Początkujący często wrzucają cały kod swojej aplikacji (wraz z konfiguracją) do tego jednego, publicznego katalogu i "zabezpieczają się" poprzez odpowiednie reguły w .htaccess, co ma parę wad - np. .htaccess może zawierać błędy i ostatecznie nie zabezpieczać wszystkiego, co powinien.

Innym, bezpieczniejszym podejściem jest podział aplikacji na część publiczną (tam, gdzie są assety, czyli pliki .js oraz .css) oraz część prywatną (tam, gdzie znajduje się główny kod aplikacji); jeśli spojrzysz sobie na przykładową aplikację w Laraverze (https://github.com/laravel/laravel) zauważysz, że składa się na nią wiele katalogów, między innymi:

  • app,
  • config,
  • public.

Serwer skonfigurowany jest tak, że wskazuje na katalog public, w którym znajduje się tylko plik index.php oraz assety - reszta kodu aplikacji jest poza katalogiem publicznym, w app.

Dzięki takiej strukturze katalogów użytkownicy nie mają w ogóle możliwości odczytać konfiguracji bądź kodu aplikacji, ponieważ znajdują się one w całości poza katalogiem publicznym.

Aplikacja sama w sobie może za to bez problemu się do plików spoza katalogu publicznego odnosić - grunt w tym, że użytkownicy wprost nie mają takiej możliwości.


edytowany 5x, ostatnio: Patryk27
KL
  • Rejestracja:prawie 8 lat
  • Ostatnio:5 miesięcy
  • Postów:191
0

Dlatego w takich przypadkach zakładasz scenariusz pesymistyczny i zakładasz, że użytkownik wie do jakich zasobów się dostać, zamiast lecieć po linii najmniejszego oporu z uśmiechem jak małpa na widok sera.
W najprostszym przypadku odpowiednie ustawienie .htaccess już blokuje dostęp fizyczny z poziomu przeglądarki do zasobów, na które ustawisz brak dostępu, ale to nie jest wszystko, co można zrobić.
Niestety za dużo z czasów PHP nie pamiętam już na chwilę obecną, więc dokładnej pomocy nie udzielę.

Ponadto wyżej już Ci kolega Patryk podpowiedział gdzie rozpocząć poszukiwania, im więcej będziesz czytał, tym więcej odkryjesz ciekawych mechanizmów i pomysłów na dostanie się przez ludzi dokładnie tam, gdzie ich nie chcesz, toteż zachęcam do podjęcia lektury.

https://www.google.pl/search?rlz=1C1PRFI_enPL786PL786&ei=cKiDW7DZPOGDrwSqo574CA&q=securing+php+scripts+from+access&oq=securing+php+scripts+from+access&gs_l=psy-ab.3..33i22i29i30k1j33i10k1.3785.5766.0.5876.12.11.0.0.0.0.238.1494.0j5j3.8.0....0...1c.1.64.psy-ab..4.7.1354...0i22i30k1.0.iFFWeX2Z7cU

Proszę, sporo wyników będzie przydatnych.

edytowany 1x, ostatnio: Klojtex
WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Dziekuje @Patryk27 za odpowiedz ktora mnie juz naprowadzila conieco. Rozumiem ze katalog prywatny ma miec jakies chmody ? bo inaczej tego nie widze. Nie ma fizycznie mozliwosci przejscia katalog wyzej jak public_html

edytowany 1x, ostatnio: wesoly_pogrzeb
axelbest
Odpal sobie przykładowy projekt z jakiegoś frameworka to sam się przekonasz :)
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Katalog prywatny nie musi mieć żadnych specjalnych chmodów - jeśli masz następującą strukturę katalogów:

  • /var/www/my-application,
  • /var/www/my-application/app,
  • /var/www/my-application/public.

I ustawisz /var/www/my-application/public jako swój katalog publiczny (inaczej: web root, directory root), to już dzięki takiemu rozmieszczeniu katalogów użytkownicy nie będą mieć dostępu do /var/www/my-application/app (ponieważ znajduje się on poza web root).

Sugeruję, abyś odpalił jakiś serwer HTTP (Apache / nginx), przygotował taki minimalistyczny zestaw katalogów u siebie i sprawdził, jak ta magia działa ;-)


edytowany 1x, ostatnio: Patryk27
WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Czyli inaczej mowiac mam public_html a w nim plik index i dwa katalogi public i app

Popraw jesli sie myle

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Warszawa
  • Postów:2252
0

Mylisz się - masz mieć taką strukturę
Folder z wszystkimi plikami/katalogami

  • application
    -- tutaj masz całą logikę appki, szablony itp itd,
  • public/public_html
    -- tutaj masz index.php i wszystko co jest możliwe do zassania przez usera (np css'y, js'y)

Po raz kolejny napiszę - ściągnij sobie jakiegoś frameworka i sprawdź jak to działa.

edytowany 2x, ostatnio: axelbest
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

Jeśli wrzucisz app do public_html, to nie będzie to żadne zabezpieczenie, bo - uwaga, uwaga - wrzuciłeś kod aplikacji do publicznego katalogu, tak jak brzmi nazwa ;-)

Naprawdę, nie baw się w zgadywanie, tylko odpal u siebie serwer HTTP, przygotuj strukturę katalogów tak, jak Ci poleciłem, i zobacz, jak to działa w praktyce.


WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

No ok ale juz wczesniej napisalem ze nie ma mozliwosci wyjscia z public_html i osadzic tam katalog z programem. Mam mozliwosc poprzez ftp wejsc tylko do public html i tyle

axelbest
Jak się wbijasz przez ftpa to jaka jest lista elementów jaką widzisz na samym początku? Widzisz folder public_html?
Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
2

W takim wypadku faktycznie jesteś w prawdopodobnie beznadziejnej sytuacji - najlepiej darować sobie ten "super" hosting za 5 zł rocznie z dostępem tylko po FTP, i wykupić zwyczajny VPS, gdzie będziesz miał dostęp SSH i możliwość konfiguracji środowiska tak, jak Ci się podoba ;-)

Tym niemniej: nikt nie broni Ci odpalić serwera na swoim komputerze, aby móc się pobawić i zobaczyć, co z czym się je.


edytowany 2x, ostatnio: Patryk27
WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Chwila bo czegos nie zauwazylem wczesniej. Podczas zalogowania sie na ftp mam taka strukture:

  1. katalog ".appdata"
  2. Katalog ".php"
  3. Katalog "spamassasin"
  4. Katalog "applications_backups"
  5. Katalog "domains"
  6. Katalog "imap"
  7. Katalog "Maildir"
    Dwa pierwsze mają przedrostek w postaci ktopki.

Kiedy otworze kat "domains" są tam dwa katalogi. Pierwszy to nazwa konta pod ktorym sie zarejestrowalem a drugi to nazwa domeny .pl i tam sa kolejne katalogi

htpasswd, avstats, logs, public_ftp, public_html, stats
Po otwarciu public_html jest wszystko czyli cala strona. Teraz pytanie. Cxy mam utworzyc katalog dodatkowy z danymi moimi i gdzie majac taka strukture?

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Warszawa
  • Postów:2252
1

Czyli masz dobrze, zaraz obok folderu public_html tworzysz np application i tyle. Będąc wewnątrz public_html możesz na pewno odwołać się do katalogów, które są wyżej.

czysteskarpety
czysteskarpety
  • Rejestracja:około 10 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Piwnica
  • Postów:7697
1

ja od takich akcji mam codeignitera, działa wszędzie łącznie z php 5.6, wrzucasz paczkę do public_html, rozpakowujesz i działa, masz zabezpieczenia przed atakami, autoryzację, walidację, szyfrowanie itp.


WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Ok @axelbest. Sprawdze jak wejde na kompa bo teraz z telefonu pisze. Dam znac a jak na razie dziekuje wszystkim ktorzy odpowiedzieli dotychczas

WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Ok. Wiec kluczowe pytanie:

Co teraz z dostępem do plików.

  1. w ogóle ma tam nie być index.php/html ? Chodzi o publiczny czy w pliku index.php przekierowac do tego prywatnego katalogu i ta mma byc jeszcze jeden index.php. ?
  2. Przekierowac domene na katalog prywatny a w nim ma byc index.php ?
    Co nalezy teraz zrobic.
edytowany 2x, ostatnio: wesoly_pogrzeb
axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Warszawa
  • Postów:2252
0

Oj... coraz dziwniejsze te Twoje pytania. O jakim htmlu Ty piszesz? Pisz poprawnie, bo widząc index.php. nie wiem czy tam jest literówka czy piszesz na serio.
Po raz kolejny powtórzę - zobacz jak to robią frameworki - sprawdź to sobie na localhoście i tyl, bo teraz za przeproszeniem "męczysz bułę" pytając co rusz o jakieś dziwne rzeczy.

WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0

Pytanie jest konkretne. Mam przekierowac domene na ten katalog prywatny czy w pliku index.php zrobic przekierowanie do katalogu prywatnego. Tylko i tak domene bede musial przekierowac.
Prosto się mowi jak się wie. Dla mnie to jest pytanie kluczowe.

KL
  • Rejestracja:prawie 8 lat
  • Ostatnio:5 miesięcy
  • Postów:191
0

Ale otrzymałeś już odpowiedź, zaciągnij dowolny framework i zobacz jak to działa...
I jest konkretne, ale nie ma sensu z punktu widzenia osoby, która już coś robiła, bo kombinujesz jakoś naokoło i nie masz pojęcia jak temat ugryźć, co rozwiązałoby zajrzenie... Do dowolnego frameworka. Serio, mniej byś się denerwował i dawno już byś miał odpowiedź, gdybyś zrobił tak, jak Ci ludzie doradzają ;)

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Warszawa
  • Postów:2252
0

No to prosto CI napisze- nigdzie nie masz robić przekierowań. Documen root ma wskazywać na folder public_html i tyle. W tym folderze masz mieć index.php i tyle. Rzeczy które mają być niedostępne użykownikom z zewnątrz powinny znajdować się poza (tzn. nie w środku) folderem public_html.

WP
Czyli mam linki kierować do nadrzednego, prywatnego katalogu. ok
Patryk27
@wesoly_pogrzeb: nie, nie masz przekierowywać nigdzie...
WP
No jelsi mam index.php gdzie mam w normalnym ukladzie katalog o nazwie 'dane' i on jest fizycznie w katalogu publicznym i w nim mam wszystkie dane (pliki .php) to teraz jesli przeniose caly ten katalog do kat. prywatnego musze jakos zlinkowac te pliki. W pliku index.php mam odsyłacze
KL
Łojezus... @wesoly_pogrzeb, sprawdź do jasnej anielki, chłopie, Laravela albo Symfony. Tam masz to zrobione zgodnie z wolą boga PHP.
KL
https://github.com/laravel/laravel/blob/master/public/index.php - proszę, oto index.php z laravela. Jeśli wiesz, że istnieje coś takiego jak autoloder i umiesz się nim posłużyć, to właśnie na tym się opiera cała magia. Ciężko powiedzieć co masz na myśli dokładnie przez "odsyłacze", ale brzmi to jak kombinowanie jak koń pod górkę, a to ani potrzebne ani sensowne.
WP
Nosz qfa. Jesli zostawie plik index.php w katalogu publicznym a wszystko czyli cala reszte wsadze w katalog nadrzędny nie będący w katalogu publicznym to jak ma to dzialac. Mam linki kierowac do katalogu nadrzednego ? Zaraz zglupieje
axelbest
A znasz takie pojęcia jak kontroler, widok, model? Skoro linkujesz np a href=dupa.php - to znaczy ze ten plik na byc w folderze public_html. Ty natomiast cały czas pytałeś o to jak ukryć Twoje "dane w plikach".
KL
  • Rejestracja:prawie 8 lat
  • Ostatnio:5 miesięcy
  • Postów:191
0

Nosz qfa. Jesli zostawie plik index.php w katalogu publicznym a wszystko czyli cala reszte wsadze w katalog nadrzędny nie będący w katalogu publicznym to jak ma to dzialac. Mam linki kierowac > do katalogu nadrzednego ? Zaraz zglupieje

Synu złoty... Jak Ty piszesz te skrypty?
Jest to pisane obiektowo, używająć MVC/MVVM/etc. czy działasz na kolejnych include'ach skryptów, które są pisane proceduralnie i lecisz po kolei, traktując je tak samo jak htmle?

Bo jeśli piszesz obiektowo, to żadnych linków nie przekierowujesz, tym się zajmują skrypty właśnie, a dokładniej jakiś router/front controller, który obsługuje request.
To co piszesz natomiast brzmi jakbyś miał plik .php dla każdej podstrony z jakimiś jej skryptami. W takim przypadku ta separacja niespecjalnie dobrze będzie chciała działać i najpierw musisz się zająć obiektówką, coby pisać jak cywilizowany człowiek :P

Także... Jak chcesz bardziej rozjaśnić sytuację, to pochwal się fragmentem kodu, bo naprawdę nie wiemy co Ci chodzi po głowie i zaraz wszyscy dostaniemy zajoba :)

edytowany 1x, ostatnio: Klojtex
WP
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:32
0
Klojtex napisał(a):

Nosz qfa. Jesli zostawie plik index.php w katalogu publicznym a wszystko czyli cala reszte wsadze w katalog nadrzędny nie będący w katalogu publicznym to jak ma to dzialac. Mam linki kierowac > do katalogu nadrzednego ? Zaraz zglupieje

Synu złoty... Jak Ty piszesz te skrypty?
Jest to pisane obiektowo, używająć MVC/MVVM/etc. czy działasz na kolejnych include'ach skryptów, które są pisane proceduralnie i lecisz po kolei, traktując je tak samo jak htmle?

Bo jeśli piszesz obiektowo, to żadnych linków nie przekierowujesz, tym się zajmują skrypty właśnie, a dokładniej jakiś router/front controller, który obsługuje request.
To co piszesz natomiast brzmi jakbyś miał plik .php dla każdej podstrony z jakimiś jej skryptami. W takim przypadku ta separacja niespecjalnie dobrze będzie chciała działać i najpierw musisz się zająć obiektówką, coby pisać jak cywilizowany człowiek :P

Także... Jak chcesz bardziej rozjaśnić sytuację, to pochwal się fragmentem kodu, bo naprawdę nie wiemy co Ci chodzi po głowie i zaraz wszyscy dostaniemy zajoba :)

Nie nie pisze obiektowo.

axelbest
  • Rejestracja:ponad 17 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:Warszawa
  • Postów:2252
0

To napisz dokładnie jakie konkretne dane/rzeczy chcesz ukrywać przed niepowołanym dostępem?

WP
Ogólnie to jest sens robienie czegos takiego ja kWy piszecie jesli mam "zwykłą" strone ? Jedynie co includuje to pliki gdzie mam funkcje i plik konfiguracyjny. Do tych plików też ktoś może się dostać?? Są to pliki .php w innym folderze.
axelbest
Nadal nie wiem co w takim razie chcesz ukrywać przed ludźmi? Jak masz plik super_tajne_dane.php - a w nim masz dane np dostępu do bazy - to jeśli te dane są wewnątrz znaczników php i nie są wywalane np za pomocą jakiegoś echo - to wchodząc na www.Twoja-domena.pl/super_tajne_dane.php nikt nie zobaczy przeciez zawartosci tego pliku. Skoro mowisz o danych konfiguracyjnych (np maile, baza, api) to jaki problem w przeniesieniu ich poza public_html? No chyba że nie wiesz że można includować pliki tak include ('../../moj_tajny_plik.php')

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.