Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyświetlanie strony tylko dla wybranych
Forum PHP.pl > Forum > Przedszkole
szymek001
Jak zrobić by strona x.php była wyświetlona tylko dla tych:

1) których referrel (".$HTTP_REFERER." ) = moja.strona.pl
lub
2) których dane przesłane np. metodą POST = wyswietl

Prosiłbym o jakieś wskazówki jak zrobić pożądany prze zemnie efekt.
Maxik
  1. <?php
  2. if($_SERVER['HTTP_REFERER']=='moja.strona.pl' or $_POST['nazwa']=='wyswietl') {
  3. //Instrukcje jeśli referer moja.strona.pl
  4. } else {
  5. echo "Błąd, nie możesz tu wejść";
  6. }
  7. ?>
szymek001
a jak mógłbym zrobić aby było uniwersalnie: http://www.moja.strona.pl/* - dowolna podstrona i http:// z www i bez www brane tak samo pod uwage? W .htaccess można to uzyskać np. przez (.+\.)? (wyczytane z artykułu na temat hotlinkowania: RewriteCond %{HTTP_REFERER} !^http://(.+\.)?strona\.pl/ [NC] )

Gdy dodam po domenie '/\|(.*?)\|/' to nie działa (korzystam tylko z referer)
Maxik
Zamiast się męczyć daj jeszcze jedno or i sprawdzenie z www. na początku adresu, ewentualnie wyrażeniem regularnym i ereg
szymek001
Ale co zrobić, by zamiast pisać podstrony brany był dowolny ciąg który jest po moja.strona.pl ?
gox
sprawdzanie po refererze hmm, nie zapomnij wyswietlic odpowiedniego komunikatu, czesc internautow celowo nie zostawia refererow... wiec informacja ze walidacja jest przeprowadzana wlasnie na podstawie przekierowania pozwoli uniknac sytuacji, w ktorej osoba ktora dostep uzyskac powinna go nie otrzyma i nie bedzie wiedziec dlaczego smile.gif
sam prowadzac serwer www o odwiedzalnosci >3k/day okreslic odsetek niereferujacych lolkow na ok, 5-10%.

pozdro600
gox
  1. <?php
  2. $referer = $_SERVER['HTTP_REFERER'];
  3. if (!preg_match('#^www.mojastrona.pl/(.*?)$#', $referer))
  4. die('niepoprawny naglowek refere, sprawdz czy twoja przegladarka blablabla');
  5. ?>
szymek001
jeśli do skryptu napisanego w 2 poscie zamienię drugą linie na
  1. <?php
  2. if($_SERVER['HTTP_REFERER']=='#^www.mojastrona.pl/(.*?)$#')
  3. ?>
to nie działa.

-gox- - no wiem że referer nawet firewall czy antywiry mogą blokować, jednak nie potrafię wysłać danych przez POST nie tworząc formularza. Wiem, że można by zrobić ukryty formularz i w js go odpalić, ale to trochę zamieszania..
gox
juz nawet nie firewall czy antivir, po prostu normalnie wylaczam sobie ta opcje w przegladarce bo nie lubie byc szpiegowanym... tongue.gif

autopost w js to nic specjalnie trudnego, masz przyklady w sieci jak nie potrafisz z palca napisac...
te # (.*?) nie dzialaja 'od tak' musisz uzyc ich w funkcji preg_match() tongue.gif

a napisz co chcesz ukrywac i przed kim, bo jak bys sie nie staral to i tak mozna tego typu zabezpieczenia latfiutko obejsc... moze zapoponujemy cos powazeniejszego, po prostu napisz co chcesz zrobic..
szymek001
mam forum na domenie A i mam postawiony download na domenie B. Pliki z downloadu wyświetlają się tak: B/download.php?file=4, plik download.php mogę edytować dowolnie. Chcąc zabronoć hotlinkowania na innych stronach chciałbym by linki do downloadu działały tylko z domeny A.
gox
a jakie wielkosci maxymalne osiagaja te pliki?
szymek001
nie więcej niż 10mb, ale co ma wielkość plików ? smile.gif
gox
a przeanalizuj sobie ten kod i pomysl czy takie rozwiazanie ci odpowiada smile.gif


plik download.php, przykladowe wywolanie: ?file=4&$tooken=sha1_hash
  1. <?php
  2. $tooken_in = trim($_GET['tooken']);
  3. if (_check_tooken($tooken_in) == true)
  4. echo readfile('./plik4.rar') #zezwalamy na pobranie :) 
  5.  
  6. function _check_tooken($tooken_in='') {
  7. if (!empty($tooken_in)) {
  8. for($i=-30;$i<30;$i++) {
  9. if ($tooken_in == sha1($i+time()))
  10. return true;
  11. }
  12. }
  13. return false;
  14. }
  15. ?>
szymek001
hmm.. nie bardzo to rozumię..
w .htaccess mam:
Kod
<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

<Files *.mfh>
order allow,deny
deny from all
</Files>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ download.php?file=$1 [L]


ale nie wiem jak do tego wrzucić
Kod
RewriteCond %{HTTP_REFERER} !^http://(.+.)?moja.strona.pl/ [NC]
RewriteRule .*.(jpe?g|gif|bmp|png|zip|rar)$ /images/nohotlink.png [L]


by download.php?file=$1 wyświetlało się tylko tym którzy mają referel = moja.strona.pl
gox
Generalnie chodzi o to, ze link generowany na domenie A jest wazny przez 30 sekund wstecz i 30 sekund na przod... oczywiscie mozesz sobie ten czas dowolnie zmienic, chodzi o to, ze aby sciagnac plik trzeba wygenerowac link w domenie A i w niedlugim czasnie na niego kliknac...
wada tego rozwiazania jest to, ze w takiej postaci jest to latwo obejsc, ratujesz sie tym ze nikt nie zna twojego kodu, mozesz tez do tego sha1($i+time()) dolozyc jakis strasznie dlugi tajemny ciag znakow, wtedy jest to praktycznie nie do przeskoczenia smile.gif oczywiscie skrypt generujacy link musi taki ciag znakow rowniez znac...
szymek001
Cytat(gox @ 4.08.2008, 18:54:26 ) *
  1. <?php
  2. $referer = $_SERVER['HTTP_REFERER'];
  3. if (!preg_match('#^www.mojastrona.pl/(.*?)$#', $referer))
  4. die('niepoprawny naglowek refere, sprawdz czy twoja przegladarka blablabla');
  5. ?>


to było by ok, tylko nie wiedzieć czemu nie działa. Tzn. zawsze mam zwracany komunikat o niepoprawnym nagłównku, a strone zamieniłem na swoją domenę.
gox
Bosh, zostaw to unreliable referer, to sie nadaje to sprawdzenia kto cie linkuje i z jakich fraz z G przylaza, a nie do takich rzeczy!, co ci sie nie podoba w tej koncepcji tookena czasowego?...
gox
patrz, robisz takie cos:

skrypt generujacy link na forum w domenie A:
  1. <?php
  2. $garb = 'superTajnyINieosiagalnyCiagZnakowWCeluUtrudnieniaZbrutalforcowaniaHashuSha1:)';
  3. $tooken = sha1(time().$garb);
  4. echo './download.php?file=4&t='.$tooken;
  5. ?>



skrypt w domenie B sprawdzajacy tooken i pozwalajacy (lub nie) sciagnac plik:
  1. <?php
  2. $tooken = trim($_GET['t']);
  3. if (_check_tooken($tooken) == true) {
  4. $mime = mime_content_type('./plik4.rar');
  5. $rozmiar = filesize('./plik4.rar');
  6. header('Hmmm, to juz sobie zrob sam :)');
  7. echo readfile('./plik4.rar');
  8. }
  9. die('No niestety tooken jest zly...');
  10.  
  11. function _check_tooken($tooken='') {
  12. $garb = 'superTajnyINieosiagalnyCiagZnakowWCeluUtrudnieniaZbrutalforcowaniaHashuSha1:)';
  13. if (!empty($tooken)) {
  14. for($i='-30';$i<1200;$i++) { # 1200 sek. = 20 minut, przez tyle czasu tooken jest aktywny...
  15. if ($tooken == sha1($i+time().$garb))
  16. return true;
  17. }
  18. }
  19. return false;
  20. }
  21. ?>
szymek001
Nie pasuje mi to, ze korzystam z gotowego skryptu downloadu (http://www.galaxyscripts.com/) i nie mogę ot tak sobie tego dodać żeby wszystko było ok.. sad.gif
gox
Jak nie moge to przez noge, napisz ze nie potrafisz, a nie ze nie mozesz... chociaz w sumie na jedno wychodzi smile.gif
bezpieczenstwo tego typu skryptow jest zerowe, zerknij sobie co zwraca milw0rm po wpisaniu mini file host... po prostu zal, przylookam sie tej wersji jak znajde chwile...
lyknij manie pisania wszystkiego samodzielnie przynajmniej jak ktos Ci sie wbije bedziesz winic tylko sam siebie, no i zawsze black-box to black-box smile.gif

wlasnie tak sobie przegladam kod no i... jego jakosc jest bardzo niska, szczerze odradzam korzystanie z tej... nazwijmy to aplikacji...

skad wy do jasnej ciasnej wykopujecie takie 'skrypty'!?!

posmiejmy sie razem:
http://www.galaxyscripts.com/MFH%201.2.1%2...y%20Fix%202.zip
szymek001
jak by nie było 1.2 to pierwsza dostępna wersja, aktualna to MFH 1.3 Original
gox
fiu fiu, nie ma zartow...
troche wiecej enterow dali w kodzie, zeby profesjonalniej wygladalo, zal zal zal.
gox
pfff, mam dla ciebie zla wiadomosc, wersja 1.3.0 w dalszym ciagu podatna jest na to:
http://milw0rm.com/exploits/4940
o ile masz register_globals=on
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.