Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> $_GET i adres np. plik.php?id=artykuly
Legro
post
Post #1





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


Jak takie adresy zrobić za pomocą $_GET (IMG:http://forum.php.pl/style_emoticons/default/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..
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 35)
Pigula
post
Post #2





Grupa: Zarejestrowani
Postów: 446
Pomógł: 0
Dołączył: 5.03.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


jak masz plik.php?id=artykuly to odbierasz $zmienna=$_GET['id']; i wartosc $zmienna jest rowna artykuly i pozniej robisz z tym co chcesz (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) mozesz sprawdzac casem i includowac odpowiedni pilik itp.
Go to the top of the page
+Quote Post
kyno
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 121
Pomógł: 1
Dołączył: 4.01.2004
Skąd: Jawor

Ostrzeżenie: (0%)
-----


Czytales manuala ?


  1. <?php
  2. $_GET['id']
  3. ?>
Go to the top of the page
+Quote Post
Legro
post
Post #4





Grupa: Zarejestrowani
Postów: 233
Pomógł: 3
Dołączył: 18.07.2005

Ostrzeżenie: (40%)
XX---


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 :/
Go to the top of the page
+Quote Post
-margarina-
post
Post #5





Goście







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
Go to the top of the page
+Quote Post
pyro
post
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


  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..."
Go to the top of the page
+Quote Post
-margarina-
post
Post #7





Goście







Sorka pomyłka zamiast $_get powinno być $_GET . jakby jakieś pomyłki jeszcze były to poprawcie mnie bo to na szybciora pisałem
Go to the top of the page
+Quote Post
Spykaj
post
Post #8





Grupa: Zarejestrowani
Postów: 104
Pomógł: 3
Dołączył: 30.05.2008
Skąd: Białystok

Ostrzeżenie: (0%)
-----


A jak się zrobi

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


to też jest niebezpieczne ?
Go to the top of the page
+Quote Post
matx132
post
Post #9





Grupa: Zarejestrowani
Postów: 243
Pomógł: 19
Dołączył: 12.09.2005

Ostrzeżenie: (0%)
-----


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:)

Ten post edytował matx132 2.07.2008, 10:36:29
Go to the top of the page
+Quote Post
pyro
post
Post #10





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


a najlepiej tylko przepuścić litery... jak to jest potrzebne to można też liczby, regular expressions (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Shili
post
Post #11





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Shili 2.07.2008, 11:02:53
Go to the top of the page
+Quote Post
antyqjon
post
Post #12





Grupa: Zarejestrowani
Postów: 77
Pomógł: 27
Dołączył: 24.03.2002
Skąd: Tarnów

Ostrzeżenie: (0%)
-----


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 ;]
Go to the top of the page
+Quote Post
pyro
post
Post #13





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) )

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


Co to by miało niby dać?
Go to the top of the page
+Quote Post
Shili
post
Post #14





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


@edit
Tfu, automatyka z informatyką zaczyna mi się mieszać ^^

Ten post edytował Shili 2.07.2008, 14:50:43
Go to the top of the page
+Quote Post
pyro
post
Post #15





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat
Choćby to, że sprawdza się, czy plik istnieje, a nie includuje wszystko jak leci (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


yhm... czyli wd. Ciebie te basename() i file_exists() zapewniają tu bezpieczeństwo?
Go to the top of the page
+Quote Post
Shili
post
Post #16





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
pyro
post
Post #17





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat("Shilli")
Tak, nie same, ale z innymi zabezpieczeniami jak najbardziej.


hehehheh (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

No... jakimi ;p??
Go to the top of the page
+Quote Post
Shili
post
Post #18





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Shili 2.07.2008, 15:44:32
Go to the top of the page
+Quote Post
pyro
post
Post #19





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
mike
post
Post #20





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował mike 2.07.2008, 15:51:07
Go to the top of the page
+Quote Post
pyro
post
Post #21





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
Shili
post
Post #22





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Shili 2.07.2008, 15:58:48
Go to the top of the page
+Quote Post
mike
post
Post #23





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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. 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ą (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował mike 2.07.2008, 16:05:18
Go to the top of the page
+Quote Post
pyro
post
Post #24





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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. exit();
  7. }
  8.  
  9. // to teraz ja wiem z jakiego folderu, atakujący nie wie
  10. if (!file_exists('abrakadabra/' . $userFile)) {
  11. echo 'nie ma takiego pliku w moim tajnym folderze';
  12. } else {
  13. inlcude ('abrakadabra/' . $userFile);
  14. }
  15.  
  16. ?>


To teraz powiem nonszalancko i szarmancko: ~pyro przeproś Panią (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


Po pierwsze: include a nie "inlcude" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Po drugie: To ty i "Pani" mnie przeprosicie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

http://img365.imageshack.us/img365/6382/screenhacksh9.png
Go to the top of the page
+Quote Post
mike
post
Post #25





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 2.07.2008, 19:49:18 ) *
Po pierwsze: include a nie "inlcude" (IMG:http://forum.php.pl/style_emoticons/default/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 ) *
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.
Go to the top of the page
+Quote Post
pyro
post
Post #26





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (edit )(co poprawił batman) (IMG:http://forum.php.pl/style_emoticons/default/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...

Ten post edytował pyro 2.07.2008, 19:25:35
Go to the top of the page
+Quote Post
Shili
post
Post #27





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
pyro
post
Post #28





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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...
Go to the top of the page
+Quote Post
Shili
post
Post #29





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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ę.

Ten post edytował Shili 2.07.2008, 20:18:46
Go to the top of the page
+Quote Post
pyro
post
Post #30





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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!
Go to the top of the page
+Quote Post
Shili
post
Post #31





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
cbagov
post
Post #32





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
pyro
post
Post #33





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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" (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Kicok
post
Post #34





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Kicok 3.07.2008, 10:00:54
Go to the top of the page
+Quote Post
Shili
post
Post #35





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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.

Ten post edytował Shili 3.07.2008, 10:22:21
Go to the top of the page
+Quote Post
pyro
post
Post #36





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ?

// ADD

zatkało kakao (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Wygląda na to, że Shilli mi przyznała rację, czekam na przeprosiny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) A dlaczego tak sie dzieje już wyjaśniłem...
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 10:37