Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: $_GET i adres np. plik.php?id=artykuly
Forum PHP.pl > Forum > Przedszkole
Legro
Jak takie adresy zrobić za pomocą $_GET questionmark.gif?

Metoda $_POST już mi lepiej wychodzi. A gdy próbuję coś zrobić z $_GET to nic mi nie wychodzi :/ Pomożecie, i ew. napiszecie jakiś przykładzik..
Pigula
jak masz plik.php?id=artykuly to odbierasz $zmienna=$_GET['id']; i wartosc $zmienna jest rowna artykuly i pozniej robisz z tym co chcesz winksmiley.jpg mozesz sprawdzac casem i includowac odpowiedni pilik itp.
kyno
Czytales manuala ?


  1. <?php
  2. $_GET['id']
  3. ?>
Legro
Znalazłem tylko to w manualu.

http://pl.php.net/manual/pl/reserved.varia...d.variables.get

I tam żadnego przykładu nie ma do $_GET :/
margarina
Dajmy taki przykład(tylko go nie stosuj, bo on jest rajem dla hackerów).
Założmy masz strone, masz artkykuly itp. Dajmy na to plik artykuly.php pobiera artykuly z folderu articles . Plik artykuly.php będzie więc tak wygladal:

<?php

$id=$_get['id']
readfile('articles/'.$id.'.html');

?>

I masz jeden artykul o nazwie gole w pliku articles/gole.html . Mozesz teraz do niego wejść po przez twojastrona/articles/gole.html albo twojastrona/artykuly.php?id=gole

TO będzie tak po krótce
pyro
  1. <?php
  2.  
  3. $id=$_get['id']
  4. readfile('articles/'.$id.'.html');
  5.  
  6. ?>


I w ten sposób coraz częściej da sie widzieć napisy "hack3d by..."
margarina
Sorka pomyłka zamiast $_get powinno być $_GET . jakby jakieś pomyłki jeszcze były to poprawcie mnie bo to na szybciora pisałem
Spykaj
A jak się zrobi

  1. <?php
  2. include("./artykuly/$.php");
  3. ?>


to też jest niebezpieczne ?
matx132
ten kod moze byc bezpieczny jak sie usunie wszystkie niepotrzebne znaki z pobranej wartosci:)
i bedzie good

tylko wiadomo ma być:)

  1. <?php
  2. $id=$_GET['id'];
  3. include('./artykuly/'.$id.'.php');
  4. ?>


i przed include susuwasz wszystko np addslahs(czy jakoś tak)
itp itd:)
pyro
a najlepiej tylko przepuścić litery... jak to jest potrzebne to można też liczby, regular expressions smile.gif
Shili
Cytat
i przed include susuwasz wszystko np addslahs(czy jakoś tak)
itp itd:)

Addslashes, ale to bardziej w dodawaniu do bazy danych.

Najlepiej moim zdaniem zrobić tablicę istniejących plików i za pomocą wartości get wybierać odpowiedni indeks z tej tablicy. Zainkludowane zostaną tylko te pliki, które mogą być zainkludowane.
antyqjon
Cytat(Shili @ 2.07.2008, 12:02:31 ) *
Addslashes, ale to bardziej w dodawaniu do bazy danych.

Najlepiej moim zdaniem zrobić tablicę istniejących plików i za pomocą wartości get wybierać odpowiedni indeks z tej tablicy. Zainkludowane zostaną tylko te pliki, które mogą być zainkludowane.

Tudzież basename() + file_exists() itp. BTW, wątek z 2005 roku ;]
pyro
Cytat(Shili @ 2.07.2008, 12:02:31 ) *
Addslashes, ale to bardziej w dodawaniu do bazy danych.

Najlepiej moim zdaniem zrobić tablicę istniejących plików i za pomocą wartości get wybierać odpowiedni indeks z tej tablicy. Zainkludowane zostaną tylko te pliki, które mogą być zainkludowane.


pfff.... a jesli to bylby blog, ktory tworzy każdą stronę wraz z nowym kontem? Chyba narazie dałem najlepsze rozwiązanie (dziwnie to zabrmiało tongue.gif)

Cytat("antyqjon")
Tudzież basename() + file_exists() itp. BTW, wątek z 2005 roku ;]


Co to by miało niby dać?
Shili
Cytat
pfff.... a jesli to bylby blog, ktory tworzy każdą stronę wraz z nowym kontem? Chyba narazie dałem najlepsze rozwiązanie (dziwnie to zabrmiało tongue.gif )
Objawię Ci tajemnicę ^^ Listę plików można tworzyć automatycznie, wpisywać je do tablicy równie automatycznie i dzięki temu mieć jednocześnie piękną obsługę błędów.

W blogu nie chodzi o includowanie podstron, to całkiem inna bajka, gdzie wszystko przesyłane przez get jest wyciągane z bazy danych. No chyba, że istnieje gdzieś blog operujący na plikach, ale to dziwne by było. W przypadku prywatnych, to faktycznie dość możliwe, ale wtedy dochodzą, czy też powinny dojść mechanizmy sprawdzające poprawność tych danych i przeważnie też nie polega na przesyłaniu całej nazwy pliku, a w przypadku archiwum określonego okresu.

Cytat
Co to by miało niby dać?
Choćby to, że sprawdza się, czy plik istnieje, a nie includuje wszystko jak leci tongue.gif


@edit
Tfu, automatyka z informatyką zaczyna mi się mieszać ^^
pyro
Cytat
Choćby to, że sprawdza się, czy plik istnieje, a nie includuje wszystko jak leci tongue.gif


yhm... czyli wd. Ciebie te basename() i file_exists() zapewniają tu bezpieczeństwo?
Shili
Tak, nie same, ale z innymi zabezpieczeniami jak najbardziej. Poza tym daje możliwość wyświetlenia ładnej informacji o błędzie i nie skutkuje z marszu fatal errorem.
pyro
Cytat("Shilli")
Tak, nie same, ale z innymi zabezpieczeniami jak najbardziej.


hehehheh tongue.gif

No... jakimi ;p??
Shili
Nie podałeś na razie żadnego argumentu czemu Twoje rozwiązanie jest najlepsze. Skoro chcesz dyskutować rób to merytorycznie.

Jakimi zabezpieczeniami? Jeśli istnieje lista plików, które nie powinny być includowane tą metodą, to wypadałoby jeszcze zrobić tablicę wyjątków. Wyjaśnij mi teraz zamiast zadawać kolejne pytania w jakim sensie wyrażenie regularne miałoby być lepsze od ścisłego zbioru plików możliwych do includowania?

@down
Kurcze! To próbuję Ci przetłumaczyć - wyrażenie regularne takie jak zaproponowałeś przepuści WSZYSTKIE nazwy plików jedynie ze znakami a-zA-Z0-9; dzięki temu trzeba będzie nazywać pliki do niezaincludowania za pomocą innych znaków, co jest o tyle nieciekawe, że nazewnictwo powinno być jednolite.

Poza tym jak wpiszę w get blgagagtaeg214142jjljljfsaja to też mi zaincluduje plik, czy też plunie warningiem, chociaż nikt o zdrowych zmysłach raczej nie tworzy takich plików dla użytkowników. Uważasz, że to jest plik przeznaczony do includowania?

@down jeszcze raz
Zabrakło mi słów. Nie możesz ustawić, bo to przejdzie Twoje proponowane wyrażenie regularne. Co najwyżej możesz sprawdzić za pomocą tego odrzuconego przez Ciebie file exist czy plik istnieje. Btw, congif również przejdzie.
pyro
Ponieważ robić tablicę wszystkich wyjątków to dużo roboty... poza tym nie powinno się includować jakichkolwiek innych plikow niz te ktore sa do tego przeznaczone... taka lista zajmowała by baaaardzo dużo a wyrażenie regularne ot bodajże jedna, niedługa linijka

Cytat(Shili @ 2.07.2008, 16:02:15 ) *
Nie podałeś na razie żadnego argumentu czemu Twoje rozwiązanie jest najlepsze. Skoro chcesz dyskutować rób to merytorycznie.

Jakimi zabezpieczeniami? Jeśli istnieje lista plików, które nie powinny być includowane tą metodą, to wypadałoby jeszcze zrobić tablicę wyjątków. Wyjaśnij mi teraz zamiast zadawać kolejne pytania w jakim sensie wyrażenie regularne miałoby być lepsze od ścisłego zbioru plików możliwych do includowania?

@down
Kurcze! To próbuję Ci przetłumaczyć - wyrażenie regularne takie jak zaproponowałeś przepuści WSZYSTKIE nazwy plików jedynie ze znakami a-zA-Z0-9; dzięki temu trzeba będzie nazywać pliki do niezaincludowania za pomocą innych znaków, co jest o tyle nieciekawe, że nazewnictwo powinno być jednolite.

Poza tym jak wpiszę w get blgagagtaeg214142jjljljfsaja to też mi zaincluduje plik, czy też plunie warningiem, chociaż nikt o zdrowych zmysłach raczej nie tworzy takich plików dla użytkowników. Uważasz, że to jest plik przeznaczony do includowania?


No to Ty nie próbuj mi tłumaczyć... sam spróbuj zrozumieć. blgagagtaeg214142jjljljfsaja, jak wpisze cos takiego w GET'cie, to poprostu mogę ustawić komunikat, który ładnie wygląda, >> 404 <<. Jak zrobić to twoim sposobem, czy to z basename, czy to z file_exists, to nadal moge sobie includowac, czy tez odczytywac pliki typu:
- etc/passwd
- conf.php
- inne tajne pliki...
mike
Cytat(pyro @ 2.07.2008, 16:39:39 ) *
Jak zrobić to twoim sposobem, czy to z basename, czy to z file_exists, to nadal moge sobie includowac, czy tez odczytywac pliki typu:
- etc/passwd
- conf.php
- inne tajne pliki...
Bzdura. Za pomocą samej funkcji basename() jestem w stanie stwierdzić czy podajesz plik czy ścieżkę. Dokładając do tego file_exists() sprawię że pliki będą z lokalizacji, którą ja wybieram a nie atakujący.

Napisz po prostu że nie wiesz a nie że sie nie da tongue.gif
pyro
Cytat(Shili @ 2.07.2008, 16:02:15 ) *
@down jeszcze raz
Zabrakło mi słów. Nie możesz ustawić, bo to przejdzie Twoje proponowane wyrażenie regularne. Co najwyżej możesz sprawdzić za pomocą tego odrzuconego przez Ciebie file exist czy plik istnieje. Btw, congif również przejdzie.


No widać że ci słów zabrakło...

config.php przez odpowiednie filtrowanie wyrażeniem regularnym nie przejdzie, bo przykład wyżej mówi:

  1. <?php
  2.  
  3. $id=$_GET['id']
  4. readfile('articles/'.$id.'.html');
  5.  
  6. ?>


jak będa same litery i cyfry to sobie takiego config.php czy etc/passwd nie zaincudujesz, a jak sobie uzyjesz tego file_exists, czy tam basename, to dalej bede mogl sobie oidczytac te pliki...
Shili
Lol, wierz sobie w co chcesz, ale przykro mi to mówić, Twój system się zepsuje jeśli plik będzie musiał był przeparsowany przez parser php, a przeważnie takie się includuje.
Przypominam, że dalej są serwery bez obsługi htaccessa i tym bardziej zmiany ustawień apacha.

Poza tym przypominam również, że przykład powyżej nie był Twój pierwotnie, Twoim pomysłem zaprezentowanym w tym temacie były wyrażenia regularne.
mike
Cytat(pyro @ 2.07.2008, 16:52:16 ) *
jak będa same litery i cyfry to sobie takiego config.php czy etc/passwd nie zaincudujesz, a jak sobie uzyjesz tego file_exists, czy tam basename, to dalej bede mogl sobie oidczytac te pliki...
Bzdura, bzdura i jeszcze raz bzdura.

Na przyszłość pisz, że nie wiesz a nie że się nie da.

Patrz:
  1. <?php
  2.  
  3. $userFile = '....'; // zakładamy, że to dane od użytkownika, tak?
  4.  
  5. // prosty filtr, który wywala wszystkie pliki, które składają się ze ścieżki
  6. if ($userFile !== basename($userFile)) {
  7. echo 'nie hackuj biggrin.gif';
  8. exit();
  9. }
  10.  
  11. // to teraz ja wiem z jakiego folderu, atakujący nie wie
  12. if (!file_exists('abrakadabra/' . $userFile)) {
  13. echo 'nie ma takiego pliku w moim tajnym folderze';
  14. } else {
  15. inlcude ('abrakadabra/' . $userFile);
  16. }
  17.  
  18. ?>


To teraz powiem nonszalancko i szarmancko: ~pyro przeproś Panią tongue.gif
pyro
Cytat(mike @ 2.07.2008, 16:58:20 ) *
Bzdura, bzdura i jeszcze raz bzdura.

Na przyszłość pisz, że nie wiesz a nie że się nie da.

Patrz:
  1. <?php
  2. $userFile = '....'; // zakładamy, że to dane od użytkownika, tak?
  3.  
  4. // prosty filtr, który wywala wszystkie pliki, które składają się ze ścieżki
  5. if ($userFile !== basename($userFile)) {
  6. echo 'nie hackuj biggrin.gif';
  7. exit();
  8. }
  9.  
  10. // to teraz ja wiem z jakiego folderu, atakujący nie wie
  11. if (!file_exists('abrakadabra/' . $userFile)) {
  12. echo 'nie ma takiego pliku w moim tajnym folderze';
  13. } else {
  14. inlcude ('abrakadabra/' . $userFile);
  15. }
  16.  
  17. ?>


To teraz powiem nonszalancko i szarmancko: ~pyro przeproś Panią tongue.gif


Po pierwsze: include a nie "inlcude" winksmiley.jpg

Po drugie: To ty i "Pani" mnie przeprosicie tongue.gif

http://img365.imageshack.us/img365/6382/screenhacksh9.png
mike
Cytat(pyro @ 2.07.2008, 19:49:18 ) *
Po pierwsze: include a nie "inlcude" winksmiley.jpg
Rozumiem, że nigdy nie zrobiłes literówki pisząc na forum? Przecież doskonale wiesz o co mi chodziło.

Cytat(pyro @ 2.07.2008, 19:49:18 ) *
Po drugie: To ty i "Pani" mnie przeprosicie tongue.gif

http://img365.imageshack.us/img365/6382/screenhacksh9.png
A co Ty mi tu dajesz? Ja Ci tylku udowodniłem, że za pomocą tych dwóch fukkcji można rzeczy, o których mówileś, że nie można. Głośno krzyczałeś to Ci pokazuję, że można.
Można zabezpieczyć się przed podawaniem ścieżek, których się nie spodziewasz i można kontrolować, z którego folderu zasysane są pliki.
Nie odwracaj teraz kota ogonem i ustosunkuj się do tego co napisałeś:
Cytat
Jak zrobić to twoim sposobem, czy to z basename, czy to z file_exists, to nadal moge sobie includowac, czy tez odczytywac pliki typu:
- etc/passwd
- conf.php
- inne tajne pliki...


Poza tym Twój przykład zakłada, że w plikach coś wyświetlasz. Rzadko tak jest w plikach konfiguracyjnych.
Rzadko zresztą includuje się takie rzeczy.
pyro
Cytat(mike @ 2.07.2008, 20:01:54 ) *
Rozumiem, że nigdy nie zrobiłes literówki pisząc na forum? Przecież doskonale wiesz o co mi chodziło.

A co Ty mi tu dajesz? Ja Ci tylku udowodniłem, że za pomocą tych dwóch fukkcji można rzeczy, o których mówileś, że nie można. Głośno krzyczałeś to Ci pokazuję, że można.
Można zabezpieczyć się przed podawaniem ścieżek, których się nie spodziewasz i można kontrolować, z którego folderu zasysane są pliki.
Nie odwracaj teraz kota ogonem i ustosunkuj się do tego co napisałeś:

Poza tym Twój przykład zakłada, że w plikach coś wyświetlasz. Żadko tak jest w plikach konfiguracyjnych.
Żadko zresztą includuje się takie rzeczy.


Nie musisz się do mnie uprzedzać, tylko dlatego, że Cię poprawiam... tak samo pisze się rzadko, a nie "żadko" co napisałeś 2 razy tongue.gif (edit )(co poprawił batman) haha.gif

Cały czas chodziło mi o bezpieczeństwo skryptu, twój nie jest, co pokazałem na screenie, poza tym odnosiłem się do przykładu z readfile(), co napisałem wyżej... A wcale nie tak rzadko jest taka sytuacja w plikach konfiguracyjnych, rzeczywiście rzadziej, ale jest, poza tym to nie muszą być pliki konfiguracyjne a mogą być też inne poufne dane...
Shili
To podaj przykład kodu includującego plik php (jakie includuje się najczęściej) przetrawionego wyrażeniem regularnym. Z chęcią się pośmieję tak samo szeroko jak Ty to robisz ^^

Poza tym pliki do includowania w przypadku podanym przez mike'a spokojnie można trzymać w jednym stworzonym do tego celu folderze, a wszystkie inne gdzie indziej. I za nic w świecie się do tego nie dokopiesz.

Nadal uważam, że określanie Twojego sposobu jako najlepszego w tym temacie z takimi brakami wiedzy jest niedopuszczalne. Trzeba było zostać przy "najlepszy pomysł na jaki jestem w stanie wpaść", tak jak ja tongue.gif
pyro
Cytat(Shili @ 2.07.2008, 20:34:19 ) *
To podaj przykład kodu includującego plik php (jakie includuje się najczęściej) przetrawionego wyrażeniem regularnym. Z chęcią się pośmieję tak samo szeroko jak Ty to robisz ^^

Poza tym pliki do includowania w przypadku podanym przez mike'a spokojnie można trzymać w jednym stworzonym do tego celu folderze, a wszystkie inne gdzie indziej. I za nic w świecie się do tego nie dokopiesz.

Nadal uważam, że określanie Twojego sposobu jako najlepszego w tym temacie z takimi brakami wiedzy jest niedopuszczalne. Trzeba było zostać przy "najlepszy pomysł na jaki jestem w stanie wpaść", tak jak ja tongue.gif


Shilli, zaznaczyłem, przy tym poście "że to dziwnie zabrzmiało", bardziej mi chodziło o to, że to był lepszy pomysł AŻ do tamtejszego momentu...

chcesz przykład? proszę:

  1. <?php
  2. $plik = $_GET['file'];
  3.  
  4. if(!preg_match('|[a-zA-Z0-9]+|', $plik)) // można też ustalić długość łancucha nazwy pliku
  5. {
  6. die('Niepoprawna nazwa pliku');
  7. }
  8. if(!include('tajnasciezka/'.$plik.'.inc'))
  9. {
  10. die('Błąd podczas includowania pliku...'); // mozna se wstawic dowolny komunikat
  11. }
  12. ?>

Cytat("Shilli")
To podaj przykład kodu includującego plik php (jakie includuje się najczęściej) przetrawionego wyrażeniem regularnym. Z chęcią się pośmieję tak samo szeroko jak Ty to robisz ^^


Kod podałem. Chcesz się smiać szeroko? Bardzo proszę, przyjmę to z pokorą, proszę jednak też o podanie powodu, z którego się tak zacnie śmiejesz...
Shili
Podaję 2 (tak, wiem, że można warning zakryć małpą, ale jest to mało profesjonalne, zresztą tego nie przedstawiłeś, mimo że szczerze się spodziewałam winksmiley.jpg)

http://img257.imageshack.us/img257/1493/plikrr9.th.jpg

[img=http://img257.imageshack.us/img257/4403/errorup6.th.jpg]

Innymi słowy nie dość, że Twój skrypt ma te same błędy, które wytknąłeś mike'owi, to jeszcze parę własnych - generuje warning, w takiej formie zamyka parsowanie php. To są dwie niedogodności, które w moich oczach go dyskredytują - jeśli można coś zrobić w sposób przyjemny dla użytkownika, nawet jeśli użytkownik jest totalną świnią i próbuje nam rozwalić serwis to należy tak robić.

Oczywiście, zdaję sobie sprawę, że to przykład, być może napisałbyś to trochę inaczej, ale spodziewałam się kodu dopieszczonego pod względem możliwych komunikatów i tak dalej, przyznaję.
pyro
Cytat(Shili @ 2.07.2008, 21:15:12 ) *
Podaję 2 (tak, wiem, że można warning zakryć małpą, ale jest to mało profesjonalne, zresztą tego nie przedstawiłeś, mimo że szczerze się spodziewałam winksmiley.jpg )

http://img257.imageshack.us/img257/1493/plikrr9.th.jpg

[img=http://img257.imageshack.us/img257/4403/errorup6.th.jpg]

Innymi słowy nie dość, że Twój skrypt ma te same błędy, które wytknąłeś mike'owi, to jeszcze parę własnych - generuje warning, w takiej formie zamyka parsowanie php. To są dwie niedogodności, które w moich oczach go dyskredytują - jeśli można coś zrobić w sposób przyjemny dla użytkownika, nawet jeśli użytkownik jest totalną świnią i próbuje nam rozwalić serwis to należy tak robić.


Cały czas mowa o bezpieczeństwie, a nie parsowaniu błędów... mogę se dać te małpe jak sie tak uprzec, co się zmieni w bezpioeczeństwie strony?

Cytat("Shilli")
Twój skrypt ma te same błędy, które wytknąłeś mike'owi


Tu się mylisz... skrypt zaincluduje JEDYNIE pliki o rozszerzeniu .inc, czyli te, które SĄ DO TEGO PRZEZNACZONE!
Shili
O kurcze...

Nie zauważyłeś, że przesyłacie inne dane?!
Przecież u Mike'a trzeba tylko zamienić:
  1. <?php
  2. $userFile = '....'; // zakładamy, że to dane od użytkownika, tak?
  3. $userFile .= 'inc';
  4. ?>
i wychodzi na dokładnie to samo, tylko bez niedogodności powyżej. Tak, wyświetlanie warningów to jest błąd bezpieczeństwa. Spójrz sobie jeszcze raz - widać jaka jest ścieżka, jaki jest folder z wczytywanymi plikami a to wszystko osłabia bezpieczeństwo serwisu.
cbagov
Akurat tutaj nalezy zastosowac rozne opcje o ktorych piszecie polaczone i im wiecej tym lepiej - zaleznie od tego jak szeroko dostepny pisze sie kod.

- NIE pchac zmiennych z tablic $_GET, $_POST itd. bez sprawdzenia - np regexp/basename itp (czyli usuwac wszelkie proby ../, http:, )
- NIE inkludowac na czysto z nazw pochodzacych ze zmiennej
- NIE dawac nazwy pliku jako parametru (rany..), albo dawac lewa, kodowana, hashowana.. niby INNA nazwe, ktora potem sie dekoduje w walidatorze inkludowania, jesli taki sie napisalo.
Nikt nie powiedzial, ze include to tylko include(), moze byc my_include() albo zwykle if (test_include()) include() .

- dawac pass dla inkluda, jak go nie zna, odrzucic
- zamykac pliki konfig na dziendobry przez DENY np. w htaccess, zmiane koncowek lub exit czy die() w 1 linii (jesli *.php) by przypoadkowo sie nie odpalil, ewent. if "inklud.php"==basename( $_SERVER[ 'SCRIPT_FILENAME' ] die()

- mozna dodac wspomniana opcje z tablicowaniem nazw inkludow a zeby sie nie napisac zrobic np. "ink1"=>"ink.php", "ink2"=>"ink2.php" i pozniej w petli zainkludowac te co potrzebne zawsze a reszte przez my_include() albo zupelnie przez my_include(array())

czy tez smieszna tablica a'la switch

$userFile = $_GET["name"];

switch ($userFile)
case "":
case "inklud1.php":
include ("inklud1.php");
case "inklud2.php":
include ("inklud2.php");

itd.
pyro
Cytat(Shili @ 2.07.2008, 21:30:44 ) *
O kurcze...

Nie zauważyłeś, że przesyłacie inne dane?!
Przecież u Mike'a trzeba tylko zamienić:
  1. <?php
  2. $userFile = '....'; // zakładamy, że to dane od użytkownika, tak?
  3. $userFile .= 'inc';
  4. ?>
i wychodzi na dokładnie to samo, tylko bez niedogodności powyżej. Tak, wyświetlanie warningów to jest błąd bezpieczeństwa. Spójrz sobie jeszcze raz - widać jaka jest ścieżka, jaki jest folder z wczytywanymi plikami a to wszystko osłabia bezpieczeństwo serwisu.


A jeśli ci udowodnie, że pomimo tej linijki co dodałaś do skryptu mike'a skrypt nadal nie jest bezpieczny to dostane przeprosiny, wraz z textem "pyro miałeś rację, pszepraszam, że w Ciebie zwątpiłam, tak naprawde bardzo, ale to bardzo Cię lubię i proszę, nie sprzeczajmy się już i poznajmy się lepiej" winksmiley.jpgquestionmark.gif
Kicok
Jeżeli struktura katalogów jest dobrze zaplanowana, czyli tak jak w pierwszym poście - pliki do includowania znajdują się w katalogu "artykuly" - to do zapewnienia bezpieczeństwa wystarczy basename" title="Zobacz w manualu PHP" target="_manual ( i dodatkowo file_exists" title="Zobacz w manualu PHP" target="_manual do obsługi błędów ).

Jeśli nie chcemy, żeby użytkownik mógł uzyskać dostęp do któregoś z plików:
- umieszczamy go poza folderem dostępnym przez WWW (public_html, www, itp.) LUB
- .htaccess z blokadą dostępu do plików i/lub katalogów LUB
- define" title="Zobacz w manualu PHP" target="_manual w index.php i defined" title="Zobacz w manualu PHP" target="_manual w "tajnych plikach"

Natomiast jeśli wszystkie pliki trzymamy w jednym katalogu, a naszym głównym zabezpieczeniem przy includowaniu jest dodanie rozszerzenia, to ( tu uprzedzę pyra ;] ) oprócz użycia basename" title="Zobacz w manualu PHP" target="_manual warto się jeszcze pozbyć znaków NULL ze zmiennej.


Ogólnie to includowanie plików nie jest aż tak wielkim zagrożeniem. O ile nie pozwala na dołączanie plików typu: http://mojserwer.com/hackuj.txt (przed czym zabezpiecza nawet domyślne ustawienie allow_url_include w php.ini) to możemy sobie co najwyżej zagnieździć index.php
No ewentualnie wyświetlić pustą stronę otwierając plik z deklaracjami funkcji, lub config.php o treści:
  1. <?php
  2.  
  3. $zmienna_konfiguracyjna_1 = 'wartość';
  4. $zmienna_konfiguracyjna_2 = 'wartość';
  5. $zmienna_konfiguracyjna_3 = 'wartość';
  6. $zmienna_konfiguracyjna_4 = 'wartość';
  7.  
  8. ?>


Większym problemem jest obsługa wszystkich niepożądanych zdarzeń przy uploadzie/downloadzie plików.
Shili
Cytat
A jeśli ci udowodnie, że pomimo tej linijki co dodałaś do skryptu mike'a skrypt nadal nie jest bezpieczny to dostane przeprosiny, wraz z textem "pyro miałeś rację, pszepraszam, że w Ciebie zwątpiłam
Nie, bo Twój skrypt również nie jest bezpieczny, a jak na razie ma nawet więcej niedogodności niż ten napisany przez Mike'a, a tym bardziej w moim przekonaniu nie jest lepszy niż tablica możliwych plików do include'owania lub file_exists z basename. Udowodnisz, że jest gorszy, to rozważę takie zachowanie.

Żaden skrypt czy portal, czy strona nie będzie w 100% bezpieczna. Bo pisze je zawodny człowiek i stoją na maszynie oprogramowanej przez innych zawodnych ludzi. I taka jest prawda winksmiley.jpg Ale dalej nie uważam, żeby niektóre rozwiązania zaproponowane w tym temacie były gorsze od Twojego.
Btw, na sam koniec - plik inc, w takiej formie w jakiej podałeś jest możliwy do odczytania bez includowania go w innym. Oczywiście przy domyślnych i niezbyt wymyślnych ustawieniach apacha, innymi słowy takich, jakie panują na większości serwerów.

Co do lubienia się i nie sprzeczania, tak na sam smakowity koniec, uznaję od dawna, że takie "małe kłótnie" dodają smaczku. Może nie tak dużego, jak na zwykłym forum dyskusyjnym, ale moim zdaniem od czasu do czasu mogą być miłym rozruszaniem atmosfery.
pyro
Cytat(Shili @ 3.07.2008, 11:18:45 ) *
Nie, bo Twój skrypt również nie jest bezpieczny, a jak na razie ma nawet więcej niedogodności niż ten napisany przez Mike'a, a tym bardziej w moim przekonaniu nie jest lepszy niż tablica możliwych plików do include'owania lub file_exists z basename. Udowodnisz, że jest gorszy, to rozważę takie zachowanie.

Żaden skrypt czy portal, czy strona nie będzie w 100% bezpieczna. Bo pisze je zawodny człowiek i stoją na maszynie oprogramowanej przez innych zawodnych ludzi. I taka jest prawda winksmiley.jpg Ale dalej nie uważam, żeby niektóre rozwiązania zaproponowane w tym temacie były gorsze od Twojego.
Btw, na sam koniec - plik inc, w takiej formie w jakiej podałeś jest możliwy do odczytania bez includowania go w innym. Oczywiście przy domyślnych i niezbyt wymyślnych ustawieniach apacha, innymi słowy takich, jakie panują na większości serwerów.

Co do lubienia się i nie sprzeczania, tak na sam smakowity koniec, uznaję od dawna, że takie "małe kłótnie" dodają smaczku. Może nie tak dużego, jak na zwykłym forum dyskusyjnym, ale moim zdaniem od czasu do czasu mogą być miłym rozruszaniem atmosfery.


A JEŻELI CI UDOWODNIE, ŻE MOJ SKRYPT JEST BEZPIECZNY, A MIKE'A Z TWOJĄ DODATKOWĄ LINIJKĄ NIE JEST, to wtedy dostane wyżej wspomniane przeprosiny winksmiley.jpg?

// ADD

zatkało kakao tongue.gif

Wygląda na to, że Shilli mi przyznała rację, czekam na przeprosiny winksmiley.jpg A dlaczego tak sie dzieje już wyjaśniłem...
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.