Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP][AJAX] blokada bezpośredniego wywołania pliku
!*!
post 14.07.2009, 19:36:09
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


W pliku index.php odczytuję za pomocą ajaxa plik test.php, jednak chciałbym aby plik test.php był tylko dostępny z poziomu zalogowania/pliku index.php, tak aby nie można było odczytać go dając bezpośrednią ścieżkę do niego.

Po przczytaniu kilku postów myślałem o tokenie w sesji... ale to też mija sie z celem, skoro odpalę index.php który wygeneruje token, a plik test.php ma go sprawdzić to co za różnica czy sprawdzę go w index.php czy bezpośrednio się do niego odwołując, to żadne zabezpieczenie, bo sesja będzie już istnieć.

Ten post edytował !*! 14.07.2009, 19:36:59


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
kornel-php
post 14.07.2009, 21:46:54
Post #2





Grupa: Zarejestrowani
Postów: 210
Pomógł: 20
Dołączył: 7.07.2006
Skąd: Krotoszyn

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


Hmm, może pobranie do zmiennej ścieżki do otwartego pliku i sprawdzenie, czy nie jest to "test.php"...

  1. <?php
  2.  
  3. $adres = $_SERVER['PHP_SELF'];
  4.  
  5. if(eregi('test.php', $adres)) { // uczyń coś;
  6.  
  7. }
  8.  
  9. ?>


O ile dobrze zrozumiałem istotę problemu...

Ten post edytował kornel-php 14.07.2009, 21:47:34


--------------------
:)
Go to the top of the page
+Quote Post
wookieb
post 14.07.2009, 21:48:58
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Zainteresuj się
  1. <?php
  2. echo $_SERVER['HTTP_REFERRER'];
  3. ?>


--------------------
Go to the top of the page
+Quote Post
!*!
post 14.07.2009, 22:47:30
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


kornel-php - w pliku który jest wczytywany przez ajax to nie działa. Ponieważ plik wczytywany jest "bezpośrednio".

wookieb - referrer można podmienić choćby w curlu.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
erix
post 14.07.2009, 23:11:49
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




~wookieb, do tego pomyliłeś klucz. ;d

Cytat
jednak chciałbym aby plik test.php był tylko dostępny z poziomu zalogowania/pliku index.php, tak aby nie można było odczytać go dając bezpośrednią ścieżkę do niego.

Niby czemu? Sprawdzanie sesji by nie wystarczyło?


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
!*!
post 14.07.2009, 23:33:46
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


erix - sesja trwa w obrębie przeglądarki tak? Chciałbym plik test.php wczytywać tylko poprzez plik index.php i nigdzie więcej. Co z tego że ustawię sprawdzanie sesji, skoro wywołam plik test.php bezpośrednio w adresie i sesja będzie się zgadzała. Pamiętajcie że chodzi o ajax.

EDIT:

A $_SERVER['REQUEST_URI']; ? Można jakoś wysłać curlem bądź podmienić? mógłbym wtedy sprawdzić czy ... heh w zasadzie to już nie wiem...


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
erix
post 15.07.2009, 00:02:47
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No w obrębie przeglądarki. Ale tylko dla danej domeny przecież. Nadal nie rozumiem, po co tak kombinujesz...


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
!*!
post 15.07.2009, 00:10:42
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Ponieważ po zalogowaniu do profilu użytkownik pobiera swoje dane... niezbyt profesjonalnie wygląda opcja odczytu ich przez wczytanie bezpośredniego pliku który za to odpowiada.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
zegarek84
post 15.07.2009, 00:58:53
Post #9





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(wookieb @ 14.07.2009, 22:48:58 ) *
Zainteresuj się
  1. <?php
  2. echo $_SERVER['HTTP_REFERRER'];
  3. ?>

Cytat(!*! @ 14.07.2009, 23:47:30 ) *
wookieb - referrer można podmienić choćby w curlu.

tak jak każdy inny parametr więdząc uprzednio co jest wysyłane - a sprawdzić to można przy pomocy live http headers ;)
Cytat(!*! @ 15.07.2009, 01:10:42 ) *
Ponieważ po zalogowaniu do profilu użytkownik pobiera swoje dane... niezbyt profesjonalnie wygląda opcja odczytu ich przez wczytanie bezpośredniego pliku który za to odpowiada.

jeśli ktoś wpisuje adres z "palca" to nie ma wtedy referera...

jednak aby dane były dostępne tylko dla konkretnego zalogowanego urzytkownika (mniejsza z tym czy on umie też z curla kożystać jeśli do tego się posłuży swoimi danymi - pozatym nie da się schować coś co chcesz pokazać - jedynie możesz tylko utrudnić - nic więcej...) - gdyż wysyłać możesz też w zależności ktury to urzytkownik to wysylaj też sesję jego zalogowania w przeglądarce - nie twórz dodatkowych bo szkoda zabawy... dane najlepiej wysyłaj metodą post... przy okazji w tablicy $_SERVER sprawdź jeszcze jaką metodą przyszło zapytanie ('REQUEST_METHOD')... jak już pisałem wysyłając postem sesję to jeśli ktoś ręcznie wpisze adres to już jakieś zabezpieczenie...

dodatkowo możesz sprawdzać jeśli nie chcesz aby jakichś danych nie hotlinkowali np. obrazków i nie otwierali w nowych kartach to czy zawsze jest referer i czy:
Kod
(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST)==$_SERVER['SERVER_NAME'])

ale to tez może posłużyć jako dodatkowe zabezpieczenie do skryptu ajax...
co do 'REQUEST_URI' o które się pytałeś to w zasadzie masz to też w refererze ;)

ogólnie możesz pododawac tych argumentów ale dla kogoś wprawnego nie będzie problemu z przejrzeniem tego w curl'u - jednak przejrzy tylko swoje dane - a przy wpisaniu adresu z palca to mu już nie wyjdzie ;)

ps. są też inne funkcji niż curl gdzie można wysłać nagłówki rządania ;)

Ten post edytował zegarek84 15.07.2009, 01:05:31


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
kipero
post 15.07.2009, 06:27:00
Post #10





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

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


Niektóre firewalle blokują wysyłanie REFERERa. Co w takim wypadku?


--------------------
Go to the top of the page
+Quote Post
wookieb
post 15.07.2009, 08:18:46
Post #11





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A czy powiedziałem, że jest to zabezpieczenie w 100% bezpieczne? ŻADNE ale to ŻADNE zabezpieczenie nigdy nie bedzie w 100% zapewniało bezpieczeństwa i zawsze plik będzie mozna wywołac bezpośrednio stosując odpowiednie techniki.

A jeżeli chodzi o sprawdzenie zalogowania to tylko sesje i to byłby koniec tematu.


--------------------
Go to the top of the page
+Quote Post
!*!
post 15.07.2009, 10:41:33
Post #12





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Masz racje wookieb, ale w samym php był choćby prosty myk że w pliku index dawałeś zmienną [token], w includowanym pliku sprawdzałeś czy istnieje, jeśli nie exit. Z ajaxem nie ma tego zastsosowania bo każdy plik jest wczytywany na nowo a nie "we wewnątrz"

Ten post edytował !*! 15.07.2009, 10:41:54


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
zegarek84
post 15.07.2009, 13:23:06
Post #13





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


Cytat(kipero @ 15.07.2009, 07:27:00 ) *
Niektóre firewalle blokują wysyłanie REFERERa. Co w takim wypadku?

podaj przykład - aż sprawdzę - by6łem pewien że całe zapytanie było wysyłąne na tym samym porcie ;p - a na fiirewall'u można blokować porty i kierunek wyjścia - oraz gdzie tongue.gif - jednak nie przypominam sobie, żeby filtrowało treść ;p
Cytat(!*! @ 15.07.2009, 11:41:33 ) *
Masz racje wookieb, ale w samym php był choćby prosty myk że w pliku index dawałeś zmienną [token], w includowanym pliku sprawdzałeś czy istnieje, jeśli nie exit. Z ajaxem nie ma tego zastsosowania bo każdy plik jest wczytywany na nowo a nie "we wewnątrz"

co z tego - ten takzwany token nie pamiętam czy np. cookies są wysyłąne automatycznie z ajaxem - podałem narzędzie do sprawdzenia - to samą sesję możesz traktować jako Twój token ;p - nie przesadzaj z zabezpieczeniami a skup sie na krytycznych błedach ;p... i tu właśnie w pliku który wywołujesz ajaxem tez treśc możesz zmienać w zqależności od zmiennych post i zmiennych get - lub nagłówków przeglądarki - więc czemu piszesz, że nie da się sprawdzić Twojego tokena?? - inna sprawa, że nie wiem jak to dokłądnie rozwiązałeś ;p

Ten post edytował zegarek84 15.07.2009, 13:29:05


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
erix
post 15.07.2009, 13:29:42
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Filtruje nagłówki. Firewalle najczęściej są dołączone do pakietów "Internet Security", produkty Symanteca chyba wycinają, Steganos też.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
!*!
post 16.07.2009, 13:34:32
Post #15





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


zegarek84 - może i będę upierdliwy ale wolę to obgadać, w końcu co dwie głowy to nie jedna.

Wykorzystuję bibliotekę mintajax, przykładowo odwołuję się do pliku który dałem jako RR:

Kod
...
var tabs = mint.gui.CreateTabWidget("wyswietltu");
tabs.AddItem("start", "start", "text", "[b]start20[/b]");
...


gdzie start20 to RR wiodący do pliku test.php a sam RR wygląda tak:

Kod
RewriteRule ^(start20)$ /katalog/start.php [L]


w pliku index.php klikam w link który odwołuje się do start20 tymsamym zawartość pliku test.php jest wczytywana do diva wyswietltu i to mi odpowiada. Ale, pogubiłem się bo nie wiem czy i jak to zabezpieczyć, bo jeśli wpiszę httpL//domena/start20 to plik zostanie wyświetlony bezpośrednio. Wyświetlając go sprawdzam sesję, więc ktoś kto nie jest zalogowany, bądź ma inną nie zobaczy nic innego, ale nie jestem przekonany czy takie wyświetlanie danych... No nie wyglada to zbyt dobrze. Dlatego zastanawiam się jak to zapezpieczyć?

Przy wersji z samym PHP robiłem na zasadzie zmiennej która była odczytywana getem po kliknięciu na linkt, od zawartości geta zmieniała się zawartość wczytywanego pliku. A jak to zrobić przy pomocy ajaxa? Chyba za bardzo nie rozumiem działania jego mechanizmu jeszcze.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
erix
post 16.07.2009, 13:36:30
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Przy wersji z samym PHP robiłem na zasadzie zmiennej która była odczytywana getem po kliknięciu na linkt, od zawartości geta zmieniała się zawartość wczytywanego pliku. A jak to zrobić przy pomocy ajaxa?

Przecież AJAX, to to samo, jak poprzednie wywołanie... Tylko jakby innym klientem. [;


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
!*!
post 16.07.2009, 13:42:55
Post #17





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


W wersji PHP było to na takiej zasadzie
  1. <?php
  2.  
  3. if(zabezpieczgetpost($_GET["cos"]) == 'start') { include('go/startmenu.php');}
  4. else if(zabezpieczgetpost($_GET["cos"]) == 'mail') { include('go/mail.php');}
  5.  
  6. else if(!isset($_GET["cos"])) { include("go/startmenu.php");}
  7. else {  header('Location: http://'.$_SERVER['SERVER_NAME']./}
  8. ?>


Wtedy link wyglądałm mniej więcej http://domena/index-start lub http://deomena/index?cos=start itp.

Ale nie mam pojęcia jak odwołać się do tego ajaxem ...


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Fifi209
post 16.07.2009, 13:45:47
Post #18





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


W wersji PHP wyglądałoby to raczej tak:

index.php

  1. <?php
  2. define('site', TRUE);
  3.  
  4. include('test.php');
  5. ?>


test.php

  1. <?php
  2. if (site === true) {
  3.  
  4. // kod strony/skryptu
  5.  
  6. }else{
  7.  
  8. // wyświetlenie błędu
  9. }
  10. ?>


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
!*!
post 16.07.2009, 13:48:22
Post #19





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

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


Można i tak, co nie zmienia faktu że przy ajaxie jeśli w index dam define to plik załadowany przez ajax już nie odczyta tego z index.php


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
Fifi209
post 16.07.2009, 13:52:21
Post #20





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(!*! @ 16.07.2009, 13:48:22 ) *
Można i tak, co nie zmienia faktu że przy ajaxie jeśli w index dam define to plik załadowany przez ajax już nie odczyta tego z index.php


A no nie, ja dałem przykład dla PHP. ;)

Generuj jakiś kod ajax'em i po stronie php go sprawdzaj. I np. kod działa przez 10 minut etc. różne są pomysły i rozwiązania.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 20.07.2025 - 02:08