[ webjunior @ 27.04.2012. 17:44 ] @
Imam datoteku u koju smestam neke podatke iz html formi. E sad ta datoteka se zove "korisnici.txt" Kako da sprecim pristup tom fajlu iz browsera, ali da opet korisnici mogu da upisuju podatke u tu datoteku preko html formi. U ovom slucaju to mi je kao neka baza. Znaci kad neko kuca www.mojsajt.com/korisnic.txt da dobije poruku o zabranjenom pristupu ili tako nesto.
[ plus_minus @ 27.04.2012. 18:37 ] @
Jedan od jako finih načina jeste da držiš tu datoteku u posebnom folderu gde ti se nalaze samo takvi "top-secret" fajlovi, a pomoću htaccess-a taj posebni folder zatarabiš, zabraniš pristup.
Reicimo lozinka.

Jesi li razmišljao o tome da umesto txt fajla, to bude fajl sa .php ekstenzijom?
Svaki korisnik može da bude novi array sa proizvoljnim brojem stavki unutar samog niza.

Ili dodatni array u glavnom multidimenzionalnom array-u ili nizu.

A pre nego što pozoveš taj php fajl, tamo odakle ga pozivaš, definišeš nešto... bilo šta.

Code (php):


define('users',microtime());
require 'users.php';

 


A prva linija u php fajlu gde su korisnici..

Code (php):


<?php defined('users')||(header('HTTP/1.1 403 Forbidden')&die('<center> Smurfs ☺☺☺ !!! </center>'));

$var_users_array = array(.....);

?>
 


I onda ti ne treba ni lozinka ni htaccess... za taj deo.
Svako ko bude našao fajl gde su ti korisnici i bude pokušao da ga otvori kao standalone, mimo sistema ili sajta, dobiće: Smurfs ☺☺☺ !!! na ekranu umesto detalja korisnika.
[ webjunior @ 27.04.2012. 19:01 ] @
Hm, zanimljivo, nisam jos stigao do "define"...Hvala. To je nesto slicno kao joomla sto sprecava direktan pristup fajlovima. To mi je bas dobra metoda. Moram da proucim josssssss... Viva smurfs ;)

Ali ja stvarno ne znam sta da definisem. evo u ovom slucaju fajl korisnici.php ce sadrzati username, password i email. Kako to da definisem? Postoji li neki laksi nacin, jer ja vec imam array.. Koja je veza izmedju define i defined? Da li tu mogu da stavim bilo šta? i cemu sluzi microtime? Verovatno vreme za koje ce sesija biti otvorena ili sta?

I jos nesto, molimmm, ako imam folder topsecret, znaci

www.mojsajt.com/topsecret/

i sad, probao sam kreirao sam .htaccess fajl koji sadrzi samo :
deny for all




i sad mi taj folder nije uopste vidljiv preko http:// sto je dobro, ali ne znam da li cu moci da koristim te fajlove preko scripti? recimo ako pozovem

include "/topsecret/nekifajl.php";

ili fopen ('/topsecret/nekifajl.php/' , 'w');


Ok je. Sad sam probao, scripte mogu da pristupaju ovom folderu.

[Ovu poruku je menjao webjunior dana 27.04.2012. u 21:11 GMT+1]
[ Milos911 @ 28.04.2012. 00:05 ] @
Citat:
webjunior
Ali ja stvarno ne znam sta da definisem. evo u ovom slucaju fajl korisnici.php ce sadrzati username, password i email. Kako to da definisem? Postoji li neki laksi nacin, jer ja vec imam array.. Koja je veza izmedju define i defined? Da li tu mogu da stavim bilo šta? i cemu sluzi microtime? Verovatno vreme za koje ce sesija biti otvorena ili sta?

http://www.php.net/manual/en/function.define.php
http://www.php.net/defined
Uglavnom, microtime je tu cisto reda radi, proveri sta sve moze da se stavi na linkovima gore (i btw, dosta tvojih pitanja je tu vec odgovoreno). Ti na glavnoj strani definises(define()) bilo sta, a na ovoj na kojoj radis include proveravas da li je to definisano defined().
Posto kad uradis include, taj kod koji inkludujes je ubacen u glavni fajl, ono sto si definisao vraca true kad ga provuces kroz defined, i onda greska nije trigerovana. A ako se fajl pozove direktno, nista nije definisano (jer definisanje radis u prvom fajlu), i greska se pokaze...
[ plus_minus @ 28.04.2012. 00:51 ] @
Dakle, juniore.. funkcija define() ... služi za definisanje konstanti.

A konstante su suprotno od promenjivih.

Recimo...

Code (php):


define('get_id', filter_input(INPUT_GET,'id',FILTER_SANITIZE_STRING));

 


ima istu svrhu kao i ...

Code (php):


$get_id = filter_input(INPUT_GET,'id',FILTER_SANITIZE_STRING);

# filter_input() metoda koju ja koristim je ustvari  isto što i → $get_id = $_GET['id'];  
# samo, malčice "čvršće i bolje" ... rekao bih. :)

 



... s' tim što se sa varijablom/promenjivom može uraditi i sledeće..


Code (php):


if($get_id == null || empty($get_id)) {
  $get_id = 'Daaamn! I am empty!';
}

 


Dok je ovo ....

Code (php):


if(get_id == null || empty(get_id)) {
  get_id = 'Daaamn! I am empty!';
}

 


- Nemoguće!

Dakle, ovaj deo

Code (php):


... || empty(get_id)) { ....

 


kao i ovaj deo

Code (php):


...  get_id = 'Daaamn! I am empty!';

 


...jesu namerno napisane greške čisto primera radi.

Provera if(empty()) jednostavno nema nikakvu logiku i svrhu.

dobićeš nešto ovako ako probaš sa if(empty( ime_konstante ))

Citat:


Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM



Konstanta ne može biti bukvalno prazna, ali može imati NULL vrednost.

Konstanta se ne može menjati kasnije kao promenjiva, niti se može koristiti na isti način.

Naravno, možeš ih koristiti i pozivati kao i promenjive, s' tim što ih pišeš bez $, pišeš ih kao defiisanu reč..

Jednom definisana, definisana je za nadalje. Amin.

Code (php):


if( get_id != null ){
 
  echo get_id;

}
 


Međutim, ukoliko koristiš konstantu kao u prvom code tag primeru, na recimo, samom početku dokumenta, sistema, skripte..

.. te filtrirana "get" konstanta ustvari vrši neku .. paginaciju, hvata 'id' .. onda si ti praktično dobio, promenjivu konstantu.

Ali, do kraja skripte, to što je jednom uhvaćeno, kroz konstantu, ne može se izmeniti kontrolnom sktrukturom.

Niti definisati ponovo pod istim imenom.

Može se samo upotrebiti ili preneti vrednost određene konstante na promenjivu.
[ webjunior @ 01.05.2012. 09:43 ] @
ok. ajde da probam ovako, pa mi ti kazi jel moze:

index.php
Code (php):

<?php

require 'pristup.inc.php';
if ($var_pristup!=123456) {

echo 'Zabranje pristup';

die();

} else {

...kod...

}

?>
 


pristup.inc.php
Code (php):

<?php

$var_pristup=123456;
...

?>
 


neka_skripta.php
Code (php):

<?php


//...kod...


}

?>
 

znaci, za direktan pristup skripte dodajemo require 'pristup.php' i if statement;
a ako skripta nema to, kao neka_skripta.php, onda je pristup zabranjen. Malo sam pomesao konstante i varijable...hm...

e sad ja ne znam dokle se cuva ta konstanta? Ako smo vec otvarali index.php, da li je konstanta zapamcena... Evo ovo sam uspeo da ukapiram a ne znam kako da grabujem konstantu ili id preko $_GET(['id'])... Gde je greska u ovom mom kodu?

Jel moze primer sa fajlovima index.php kome je pristup dozvoljen i fajlom skripta.php kome standalone direktan pristup nije dozvoljen?



I jos, nesto sto ne mogu da nadjem. $varijabla definisana u jednoj skripti vazi samo za tu skriptu?Jel tako? A unutar funkcije u tom fajlu koristimo global $varijabla. sta je sa konstantama? I da li se jos primenjuju globalne varijable koje vaze unutar celog foldera/sajta?


[Ovu poruku je menjao webjunior dana 01.05.2012. u 11:24 GMT+1]
[ webjunior @ 01.05.2012. 10:49 ] @
Ok, sad sam resio dilemu, mozda ima bolji nacin, ali meni je ovaj ok:

u fajlovima kojima je dozvoljen direktan pristup napise se samo:

Code (php):

<?php
define('_SAJT', 1) or die ('Poruka');

//kod

?>
 


A u fajlovima kojima nije dozvoljen direktan pristup napise se:


Code (php):

<?php
defined('_SAJT') or die ('Poruka');

//kod

?>
 


e sad fajlovi koji ne sadrze
defined('_SAJT') or die ('Poruka');
takodje mogu da se pokrenu, ali oni mogu da se smeste u poseban folder i ogranici im se upotreba pomocu .htaccess tako sto se u .htaccess upise deny for all

Jos me muci ako neko pokusa da uplauduje neki .php fajl bilo gde na sajtu i izvan tog foldera pa ga pokrene.??? Kako da napravim skriptu koja obradjuje i pokrece samo fajlove koji recimo imaju neki poseban znak ili kljuc? Tako da je onda sajt bezbedan od strane 'dodanih' programa bez dozvole?
[ plus_minus @ 02.05.2012. 08:43 ] @
Prvi deo ima suvišnu die() funkciju. Nema potrebe za "umiranjem". Samo - define();

E, što se tiče nedoumice koju imaš, nisam te naj, naj razumeo..
Ko bi uploadovao bilo šta ako je u pitanju gotov sistem i fajlovi u sklopu aplikacije ili tvoj sajt gde uploaduješ samo ti.. ?
Kako bi uploadovao ako mu ti ne dozvoliš.. recimo da imaš još jednog koristnika koji koristi ftp.. onda verovatno daješ tom korisniku pristup samo jednom folderu, .. pod domenu, npr..

Zašto bi bilo ko osim tebe ( i eventualno nekog ludog hakera ) imao pristup i mogućnost listanja mimo sistema i pretraživača?
[ webjunior @ 02.05.2012. 15:26 ] @
@plus_minus , to ja vise onako teorijski...jer sam se malo vise navuko' na php :) pa razmisljam nasglas...inace video sam md5() funkciju, pa sam napravio svoju slicnu takvu funkciju za hash :) i mnogo mi se svidja isto daje 32 karaktera ali je algoritam tajna :P salim se... Mislio sam, mozda preko sql injection, sta znam, volim kad nesto radim da poznajem sve mogucnosti... Evo mogu da kazem da sam neki pocetni nivo savladao.... pa sad zavisi od vremena, mozda se uskoro bacim na klase i nove funkcije...ostalo mi je jos desetak lekcija da predjem...

Inace sto se tice die() to je i meni bilo sumnjivo, al video sam od joomle :) pa reko nista ne kosta :)...

Ali kad smo vec kod scripti i mog pitanja. Kako nisi razumeo? Ja mislim da to moze preko .htaccess da se odradi, ali mozda mora cak php.ini da se edituje, ne znam. Recimo namestis da mogu da se pokrecu samo scripte sa posebnom extenzijom, neka tvoja izmisljena extenzija... mozda je suvisno a sigurno i jeste... ali eto treba znati... recimo dozvolis samo pokretanje .php5 fajlova ili cak .p4p eto tako... ima vremena... :)
[ plus_minus @ 16.05.2012. 18:27 ] @
A jesi li probao da nateraš pretraživače da vide php source kod fajlova sa ekstenzijom ".php5" ili ".p4p",
isto kao što se vidi u fajlovima sa ".php" ekstenzijom?

U prevodu, da pretraživači prikazuju samo belo kada neko otvori te fajlove.
To bi bio najpametniji primarni zadatak za tebe.

U protivnom, ti ćeš servirati sve živo u nekompletno formatiranom tekstualnom obliku.
Čitljivo u svakom text editoru.

Na izvol'te.
[ webjunior @ 17.05.2012. 16:46 ] @
Hoces da kazes da browseri mogu videti source .php fajlova? ili si mislio na pretrazivace, google, yahoo? Nisam te bas najbolje razumeo...
[ plus_minus @ 17.05.2012. 20:07 ] @
Ne, hoću da kažem da ćeš ti morati da registruješ te ekstenzije nekako, globalno, da ih parsuju sve ip adrese na celom www. kao što mogu da parsuju .php fajlove. Ako php fajl parsuje klijent, to jest, browser, ne parsuje ništa. Ne izvršava nikakav kod i prikazuje blanko deo gde je <? ?> . Sve unutar toga. To verovatno znaš. Ako php bude očitan na serveru, onda klijent ima šta da radi.

U tvojoj zamisli, ako ti tvoji fajlovi budu očitani bilo gde, a nisi ih nekako registrovao pre toga, koja god strana da ih čita, dobijaće na izvol'te sve što je ukucano unutra kao da je u pitanju "skripta.txt" ustvari "skripta.p4p" ili "skripta.php5" .

A na stranu što iz njih treba da čitaš jako lepo napisanim kodom, pa i da su u textualnom obliku.. sa .txt ekstenzijom.