Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zabezpieczenie przed bezpośrednim wejściem(problem)
Forum PHP.pl > Forum > PHP
FANGTA
Witam.

Ostatnio zainteresowałem sie zabezpieczeniem przed bezpośrednim wejściem do pliku, żeby np. uniknąć złego wyświetlenia, lub pokazania informacji które nie powinny być wyświetlone bezpośrednio użytkownikom, lub osobno bez wyświetlenia poprzez tzw. Plik-baze.

W moim pliku bazie jest wszystko załączane za pomocą iframów, i mam taki problem że jeśli zdefiniuje stałą na początku pliku-bazy np.:

Kod
define('IN_GMAS_PHP', true);


I użyje w każdym pliku wczytywanym np. do ramki lokalnej:

Kod
<iframe name="serwis" id="glowna_ramka" src="serwis_GMAS.html" width="901" height="1011" frameborder="0"></iframe>


Takiego kodu sprawdzającego czy stała została zdefiniowana:

Kod
<?php
    ob_start();
    if (!defined('IN_GMAS_PHP')) {
     header('HTTP/1.1 301 Moved Permanently');
     header('Location: http://'.$_SERVER['HTTP_HOST'].'/');
     exit();
    }
    ob_end_flush();
    ?>


To nawet i tak rozpoznaje że nie;/ i już nawet wiem w czym jest problem bo jeśli załącze zwykłym include lub require ten plik lub w pliku zdefiniuje stałą to to działa idealnie więc problem ejst w tym że pliki są wczytywane w pliku-bazie poprzez ramki lokalne, lecz ja z tego sposobu wczytywania przy tworzeniu pewnej strony nei moge zrezygnować;/ Wiadomo że można by też stowrzyć zmienną i posłużyć sie metodą $_GET lecz to nie gra roli bo nawet najgłupszy i najgorszy haker będzie potrafił odpowiednio przypisać wartość i zmienną po zauważeniu nazwy zmiennej i wartości jaką musi mieć.
Za pomocą sesji też odpada ponieważ sesyjna jest zapamiętywana aż do końca sesji, więc jak ktoś otworzy podstrone w nowej karcie to i tak mu sie wyświetli jeśli bedzie zabezpieczone takim sposobem.

Więc może ktoś by znał jakiś sposób ze stałą i żeby w tym przypaku działał jak należy lub znał inny równie dobry sposób zabezpieczający przed bezpośrednim wejściem i działający w takim przypadku?

PS. używając określenia "pliku-bazie" nie mam na myśli bazy danych tekstowej na ftp tylko plik zwykły w którym jest kod php i html i js itd. i w nim są różne pliki załączane funkcjami require i include a także iframe
michalkjp
Hmmm...

"W moim pliku bazie jest wszystko załączane za pomocą iframów"

Już się nie pytam dlaczego używasz iframe, chciałbym się dowiedzieć dlaczego używasz pliku zamiast normalnej bazy danych. Sorry za mało konstruktywny komentarz, ale ciekawość mnie zżera smile.gif
FANGTA
"Hmmm...

"W moim pliku bazie jest wszystko załączane za pomocą iframów"

Już się nie pytam dlaczego używasz iframe, chciałbym się dowiedzieć dlaczego używasz pliku zamiast normalnej bazy danych. Sorry za mało konstruktywny komentarz, ale ciekawość mnie zżera smile.gif "

Eh widać że źle zrozumiałeś;] używam oczywiście zewnętrznej bazy danych typu np. mysql a ten plik-baza to nie baza danych tekstowa tylko plik na ftp normalny pisany w php zawierający instrukcje z iframami itd.;] widze że niektórzy biorą to określenie jako baze danych więc dodam do swojego postu odpowiednią notke;)ps. i może dlatego tak zrozumiałeś że zapomniałęm dodać zabezpieczenie przed bezpośrednim wejściem do pliku;]
Pilsener
Cytat
np. uniknąć złego wyświetlenia, lub pokazania informacji które nie powinny być wyświetlone bezpośrednio użytkownikom
- po to jest system autoryzacji, po co się tak męczysz? Wygląda na to, że skrypt został po prostu beznadziejnie pomyślany stąd problem. Jak nie chcesz przekazywać zmiennych sesją lub GET'em, to użyj COOKIE lub pliku tymczasowego. A tak w ogóle to ciężko zrozumieć, w czym jest problem szczerze powiedziawszy...
mecenas
Pilsener ma rację. Przemyślany system autoryzacji załatwia sprawę. Dodatkowo dzięki stworzenie wielopoziomowego dostępu możesz sobie zostawić furtkę do plików, których standardowy admin nie będzie mógł ruszyć.

Lepiej spędzić nawet kilka godzin nad kartką żeby wszystko przemyśleć niż potem całymi dniami modyfikować kod w celu osiągnięcia oczekiwanego efektu. Nie na tym polega RAD winksmiley.jpg
FANGTA
eh coś mi sie zdaje że źle zrozumieliście mój problem, albo ja go po prostu źle opisałem.

Więc sie postaram uzupełnić troche mój opis żeby był jaśniejszy:

oto mniej więcej schemat:

Plik główny np.o nazwie index.htm i w nim wczytywane poszczególne pliki np. s.htm,b.php, za pomocą ramek lokalnych <iframe></iframe> i o to chodzi że sie da kliknąć na ramce w np. mozilli otwórz ramke w nowej karcie i to zabezpieczenie ma powodować takie coś, żeby te ramki mogły sie poprawnie wyświetlić tylko jeśli są wczytywane z pliku index.htm, a jeśli są wczytywane oddzielnie czyli np. w taki powyższy sposób prawym i otwórz ramke w nowej karcie to wtedy sie wyświetli komunikat np. ERROR NOT FOUND i po 2 sekundach przekieruje do strony głównej. I w podobny sposób np. w phpBB służy stała tylko że tam nie używają ramek lecz funkcji require i include(i wtedy to działa) a ja tak postąpić nie moge;]
misiek172
hmm ...

Może po prostu sprawdzaj adres jaki jest wpisany, zapoznaj się z tablicą $_SERVER questionmark.gif

Rozumiem że nie chcesz aby ktoś mógł sam otworzyć okno podrzędne? Tylko index.php aby mógł wyświetlać inne pliki php i html

ja tak zrozumiałem twój problem
Pilsener
Nie da się tak zrobić - jak chcesz wymusić, czy ja otworzę sobie stronę w tym samym oknie czy w nowym? To jest całkowicie po stronie użytkownika.
FANGTA
Cytat(misiek172 @ 29.09.2008, 15:07:11 ) *
hmm ...

Może po prostu sprawdzaj adres jaki jest wpisany, zapoznaj się z tablicą $_SERVER questionmark.gif

Rozumiem że nie chcesz aby ktoś mógł sam otworzyć okno podrzędne? Tylko index.php aby mógł wyświetlać inne pliki php i html

ja tak zrozumiałem twój problem


tak dokładnie o to chodzi że w każdym pliku któy jest wczytywany do indexu jest sprawdzenie odpowiednie czy stała jest zdefiniowana(a definiowana jest tylko w index.php)

Cytat(Pilsener @ 30.09.2008, 09:15:18 ) *
Nie da się tak zrobić - jak chcesz wymusić, czy ja otworzę sobie stronę w tym samym oknie czy w nowym? To jest całkowicie po stronie użytkownika.


Tu nie chodzi o okno tylko o ramki lokalne i to co sie do nich wczytuje mogło być uruchonmione tylko w tej ramce lokalnej i nie bez niej ani sama ramka bez pliku głównego, i to nie można tylko po stronie użytkownika chociaż ciekawy pomysł i thx za podpowiedź może w tym sposobie bede mógł zastąpić sprawdzenie czy stała jest zdefiniowana jakimś działaniem po stronie użytkownika:) A co do tego w php to dam odsyłacz do tutka o tym: http://webmade.org/porady/zabezpieczenie-skryptu-php.php i ja robie coś w tym rodzaju tylko problem napotykam jeśli to sprawdzenie czy stałą zdefiniowana dodam w ramke lokalną, a stała jest zdefiniowana nie w ramce lokalnej(ponieważ nie ma sensu definiować stałej zaraz przed sprawdzeniem bo zawsze będzie że tak;])
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.