Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]brak dostępu bezpośrednio do plików includowanych
kamilo818
post 28.01.2015, 16:11:02
Post #1





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Chciałym aby do includowanych plików nie można było dostać się bezpośrednio. Tylko i wyłacznie ze strony głównej.
Czy takie rozwiązanie nie będzie 'dziurą' w systemie? W sensie czy jest bezpieczne?

glowna.php
  1.  
  2. <html>
  3. <head></head>
  4. <body>
  5. <?php
  6. $dostep=true;
  7. ?>
  8. <div id="content_box">
  9. <?php
  10. include('users.php');
  11. ?>
  12. </div>
  13.  
  14. </body>
  15. </html>
  16.  


users.php

  1. <?php
  2. if($dostep==true || $_POST['dostep']==true){
  3. //wyswietl strone
  4. }else{
  5. echo 'Brak dostępu';
  6. }
  7. ?>
  8. <div class='users'>
  9.  
  10. </div>
  11. <script>
  12.  
  13. $('.block').click(function(e){
  14.  
  15. var login=login;
  16.  
  17. var dataString = 'login='+login + 'dostep=true';
  18.  
  19. $.ajax({
  20. type: 'post',
  21. url: ('users.php'),
  22. data: dataString,
  23. success: function (obj) {
  24. $('.users').html(obj);
  25. }
  26. });
  27. e.preventDefault();
  28. });
  29.  
  30. </script>
Go to the top of the page
+Quote Post
markuz
post 28.01.2015, 16:22:35
Post #2





Grupa: Zarejestrowani
Postów: 1 240
Pomógł: 278
Dołączył: 11.03.2008

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


Pliki które dołączasz w ten sposób umieść w katalogu np. includes a w nim umieść plik .htaccess "deny from all" - wtedy będzie bezpiecznie.


--------------------
Go to the top of the page
+Quote Post
nospor
post 28.01.2015, 16:23:48
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wrzuc poprostu pliki includowane do katalogu, który nie jest dostepny przez przeglądarke i juz.
Od biedy do katalogu wrzuc plik .htaccess, ktory zabroni dostep do tego katalogu o tresci:
Kod
order deny,allow
deny from all


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilo818
post 28.01.2015, 16:33:16
Post #4





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


robilem tak ale jeśli chce przesłać za pomocą ajaxa
  1. $.ajax({
  2. type: 'post',
  3. url: ('users.php'),
  4. data: dataString,
  5. success: function (obj) {
  6. $('.users').html(obj);
  7. }
  8. });

to odmawai mi dostępu do users.php które jest w tym katalogu. Chyba ze inaczej to zrobic?
Go to the top of the page
+Quote Post
aniolekx
post 28.01.2015, 16:44:05
Post #5





Grupa: Zarejestrowani
Postów: 340
Pomógł: 46
Dołączył: 31.07.2009
Skąd: A

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


pytanie czy plik users.php jest plikiem "includowanym" czy plikiem który ma obsłużyć request z ajaxa?
Go to the top of the page
+Quote Post
kamilo818
post 28.01.2015, 16:46:26
Post #6





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


tym i tym

dokłądnie to działa jak przykłąd w 1szym poście
Go to the top of the page
+Quote Post
nospor
post 28.01.2015, 21:19:24
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To sie zdecyduj: albo ma byc dostep do pliku z przegladarki albo nie. Bo w tej chwili raz chcesz miec dostep a za chwile nie...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilo818
post 29.01.2015, 08:18:47
Post #8





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Chce aby był dostęp przez ajaxa. Nie chce aby bezpośrednio użytkownik wszedł wpisując w pasek adresu.
Czyli
Do pliku głównego userpanel.php są includowane pliki na których wykonuje operacje przesyłając ajaxem. Includuje np users.php. I chce aby do users.php użytkownik miał dostęp z poziomu userpanel a nie bezpośrednio wchodząc na users.php

Moje rozwiazanie ze sprawdzaniem wartości zmiennej sprasza się. Ale nie wiem czy jest poprawne (bezpieczne)

Chyba ze jakoś inaczej mogę to rozwiązać ?
Go to the top of the page
+Quote Post
phpion
post 29.01.2015, 08:24:47
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(kamilo818 @ 29.01.2015, 08:18:47 ) *
Chce aby był dostęp przez ajaxa. Nie chce aby bezpośrednio użytkownik wszedł wpisując w pasek adresu.

Jeśli korzystasz np. z jQuery czy innej biblioteki wysyłającej odpowiedni nagłówek, wówczasz możesz poszukac nagłówka X-Requested-With:
http://stackoverflow.com/questions/4301150...a-ajax-with-php

Cytat(kamilo818 @ 29.01.2015, 08:18:47 ) *
Do pliku głównego userpanel.php są includowane pliki na których wykonuje operacje przesyłając ajaxem. Includuje np users.php. I chce aby do users.php użytkownik miał dostęp z poziomu userpanel a nie bezpośrednio wchodząc na users.php

W pliku głównym userpanel zadeklaruj stałą np. ACCESS, a w users.php sprawdzaj czy stała jest zdefiniowana (defined). Jeśli nie - zakończ dalsze wykonywanie skryptu.
Go to the top of the page
+Quote Post
nospor
post 29.01.2015, 08:27:55
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
W pliku głównym userpanel zadeklaruj stałą np. ACCESS, a w users.php sprawdzaj czy stała jest zdefiniowana (defined). Jeśli nie - zakończ dalsze wykonywanie skryptu.
Ale wowczas nie bedzie mial dostepu z ajaxa, bo tam odwoluje sie bezposrednio do users.php.

@kamilo818 Twoje próby "zabezpieczenia" nie maja żadnego sensu... Skoro skrypt jest dostepny dla ajaxa, to jest dostepny dla całej przegladarki i juz. Co ci szkodzi, ze ktos go wywoła bezposrednio z paska przegladarki? No nic to nie szkodzi.
Od biedy mozesz patrzec na te naglowki co wspomniał o nich phpion, ale to tak czy siak niczemu nie sluzy takie "zabezpieczenie"


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Aqu
post 29.01.2015, 08:29:55
Post #11





Grupa: Zarejestrowani
Postów: 279
Pomógł: 58
Dołączył: 14.07.2012

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


Jeżeli chcesz żeby był dostęp przez AJAX, to możesz tylko utrudniać bezpośrednie wejście, tak jak to robisz przez tą zmienną. Możesz też sprawdzać referer, ale to wszystko da się ominąć. Po co właściwie chcesz to zabezpieczać?
Go to the top of the page
+Quote Post
phpion
post 29.01.2015, 08:44:24
Post #12





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(nospor @ 29.01.2015, 08:27:55 ) *
Ale wowczas nie bedzie mial dostepu z ajaxa, bo tam odwoluje sie bezposrednio do users.php.

No to OR: jeśli jest to ajax LUB zadeklarowano stałą to wpuść. W przeciwnym wypadku - zakończ działanie skryptu. Co do skuteczności zabezpieczenia patrząc na nagłówki to się zgadzam - nie jest to pewne. Jednak w większości przypadków typowych użytkowników to zadziała. Pytanie tylko, czy ci typowi użytkownicy będą tak kombinować smile.gif
Go to the top of the page
+Quote Post
nospor
post 29.01.2015, 08:59:25
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@phpion ale tu nie chodzi o "pewnosc zabezpieczenia" ale o jego zasadnosc, która jest zerowa. Co komu da, ze bedzie mozna tam wejsc tylko ajaxem? No nic.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilo818
post 29.01.2015, 09:26:45
Post #14





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Już wyjaśniam moje założenie(może błedne)

Po poprawnym zalogowaniu mam dostęp do userpanel.php
w user panel sprawdzam czy mam dostęp(czy jestem zalgoowany)
  1. if(empty($_COOKIE['islogged'])){
  2. header('Refresh: 2; url=login_form.php');
  3. die( '<div class="notlogged">Czas sesji wygasł. Proszę zalogować się ponownie.<br> Za chwilę nastąpi przepierowanie</div>');
  4. }
  5.  
  6. if(isset($_SESSION['nick']) && isset($_SESSION['ip']) && $_SESSION['ip']==$_SERVER['REMOTE_ADDR']){
  7.  
  8. }
  9.  


w userpanel.php includuje pliki. Dlatego chciałem żeby nie można wejść bezpośrednio includowanych plików, żeby użytkownik nie zalogowany nie miał do nich dostępu.
Tak teraz myślę, że moze po prostu w includowanych plikach też sprawdzać czy jest user zalogowany tak jak w userpanel.php
Go to the top of the page
+Quote Post
nospor
post 29.01.2015, 09:32:16
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Masz bledne zalozenia.
Pliki, ktore mają nie byc dostepne przez przegladarke, w tym i AJAX, mają leżec w katalogu niedostepnym dla przegladarki. Pisalem ci juz o tym.
Jesli masz akcje logowania, to ona z ajaxa ma nie byc bezposrednio dostepna jako users.php, tylko ma przechodzic nadal przez Twoj główny skrypt, który to dopiero includuje users.php.

Wowczas pilnowanie praw masz tylko w jednym pliku, a wszystkie inne są niedostepne przez przegladarke i ajax.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilo818
post 29.01.2015, 10:22:27
Post #16





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Ok.
Ale skoro users bedzie w katalogu niedostępnym, ale ajaxem bede chciał działać na tym pliku to dostep bedzie zabroniony.
Przeciez nie mogę przez nadrzędny plik userpanel działać na users bez dostepu do niego?

Aktualnie struktura moich plików wyglada tak:
root:

login_form.php
login.php
register_form.php
register.php
logout.php
page:
userpanel.php

includes

users.php
config.php
functions.php




ajax jest w pliku users.php

Ten post edytował kamilo818 29.01.2015, 10:24:07
Go to the top of the page
+Quote Post
nospor
post 29.01.2015, 10:28:43
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to ci wlasnie mowie:
ma byc jeden plik ogolny, ktory bedzie includowal pliki odpowiedzialen za daną akcje. Ty zawsze masz odpalac ten plik ogolny z parametrem bedącym nazwą akcji, ktora cie interesuje. Na podstawie tego parametru, plik ogolny zaincluduje wlasciwy plik.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilo818
post 29.01.2015, 11:59:17
Post #18





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Sprawdz czy dobrze rozumiem:

plik users.php i ajax.js w nieodstpenym katalogu

userpanel.php - głowny plik (normalnie dostpeny)

W users.php (z 'includem' ajax.js) mam listę uzytkowników. Jesli chcę wykonać na niej akcję np usunac rekord z bazy, to po kliknięciu 'usun' ajax przesyła żądanie do userplanel.php który usuwa rekord i po tym includuje jeszcze raz users.php

Czy tak?

Ten post edytował kamilo818 29.01.2015, 12:12:52
Go to the top of the page
+Quote Post
nospor
post 29.01.2015, 12:12:05
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




pliki .js mają byc w dostepnym katalogu. No niby jak je przeglądarka załaduje?
Chyba ze ajax.js jest zwykly js ktory normalnie jako tekst includujesz na strone.

Cytat
, to po kliknięciu 'usun' ajax przesyła żądanie do userplanel.php który usówa rekord i po tym includuje jeszcze raz users.php
Mniej wiecej. Ale glowy nie dam sobie uciac bo nie wiem jakie ty tam masz dokladnie te kody.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamilo818
post 29.01.2015, 20:49:37
Post #20





Grupa: Zarejestrowani
Postów: 250
Pomógł: 11
Dołączył: 20.01.2014

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


Dzięki wszytkim za pomoc.
Sam nie wiem jak ale udało mi się wszystkie pliki wrzućić do niedostępnego koatlogu oprócz index w którym mam jakby routing i w zależnści od parapetru includuje pliki.
Nawet jak wwysłam ajaxem do pliku który jest w niedostepnym katalogu to śmiga. Podaje tylko parametr do routingu i wsio.

  1. <?php
  2. $arrParams = array();
  3. $strDefaultPath = '';
  4. $_SERVER['PATH_INFO'] = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : $strDefaultPath;
  5. $arrParams = explode('/', substr($_SERVER['PATH_INFO'], 1));
  6. //print_r($arrParams);
  7.  
  8. if($arrParams[0]=='' || $arrParams[0]=='logowanie'){
  9. include_once('includes/login_form.php');
  10. }elseif($arrParams[0]=='rejestracja'){
  11. include_once('includes/register_form.php');
  12. }elseif($arrParams[0]=='logout'){
  13. include_once('includes/logout.php');
  14. }elseif($arrParams[0]=='userpanel'){
  15. include_once('includes/userpanel.php');
  16. }elseif($arrParams[0]=='login_done'){
  17. include_once('includes/login.php');
  18. }elseif($arrParams[0]=='register_done'){
  19. include_once('includes/register.php');
  20. }else{
  21. include_once('includes/login_form.php');
  22. }
  23. ?>
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 08:43