ugrás a tartalomhoz

.htaccess nélkül fájlok tartalmának elrejtése

tiny · 2005. Júl. 15. (P), 16.25
Sziasztok!
Egy text adatbázist csinálgatok (tudom, hogy van már ilyen és hogy sokkal jobb a "külső" adatbázis, de ezt így szeretném) és megpróbálkoznék azzal, hogy elrejtsem ezeket a fájlokat külső szemlélődő elől. Az alapvető dolog lenne, hogy a könyvtár nevét megváltoztathatóvá teszem, amiben az adatok vannak, de ettől még ha valahogy rátalál, lazán kiírná az adatokat.

Ezért csináltam első verzióként ezt:

<?php
echo"Forbidden";
/*
adatok
*/
?>
Aztán jobban belegondoltam, hogy amikor új adatot szeretnék hozzáadni a táblához, akkor végig kéne mennem és eltávolítanom a */ ?> részt.

A harmadik ötlet volt, hogy újra kiírok egy <?php /* részt és majd amikor adatot módosítok, ezeket kitörlöm, hiszen úgyis végig kell mennem a fájlokon.

Sajnos az utolsó ötletem is kudarcba fulladt, ami az volt, hogy kiadtam a 403 - Forbidden fejlécet, bezártam a php-s részt ( ?> ) és utána közvetlenül kiírtam az adatokat. Nem tudom miből gondoltam, hogy ott megáll a fájl olvasása, de hát kifogytam az ötletekből.

Ha nektek esetleg lenne valami ötletetek, hogy hogyan lehetne még megoldani, akkor szívesen várom. Az is jó lenne, ha lehetne egy fájlt az utolsó előtti sortól átírni anélkül, hogy az egészen végig kéne menni. Erre kerestem megoldást, de nem találtam. Várom a véleményeteket!

UI.: Igen, direkt agyalok ilyen megoldásokon :).
 
1

Exit

attlad · 2005. Júl. 15. (P), 16.47
Sajnos az utolsó ötletem is kudarcba fulladt, ami az volt, hogy kiadtam a 403 - Forbidden fejlécet, bezártam a php-s részt ( ?> ) és utána közvetlenül kiírtam az adatokat. Nem tudom miből gondoltam, hogy ott megáll a fájl olvasása, de hát kifogytam az ötletekből.

Ha a 403-as hibakód elküldése után írsz egy exit();-et az nem jó?

Attila
2

De jó :)

tiny · 2005. Júl. 15. (P), 17.45
De jó, köszi szépen. Eszembe nem jutott volna, hogy erre is használható az exit :).
Mr.Tiny
3

erre is?

kgyt · 2005. Júl. 15. (P), 19.46
Még mire?
http://hu.php.net/manual/hu/function.exit.php
Kilép a program. Ennyi.


--
Szeretettel: Károly György Tamás
kgyt(a)kgyt.hu - http://kgyt.hu
4

Én nem exit();-tel, hanem

tiny · 2005. Júl. 15. (P), 20.35
Én nem exit();-tel, hanem exit;-tel csináltam és úgy is működik, fel sem tűnt h itt exit() van persze ha van egyáltalán külömbség. Most elbizonytalanodtam, de a ciklusból nem ezzel lehet kilépni?
Mr.Tiny
6

nem

bbalint · 2005. Júl. 15. (P), 21.14
ciklusból csak "kötörni" lehet a break utasítással... bár az exit() is kilép belőle, csak nem folytatódik a program :-?

(ja, és aki sokat szeret írni, az írhat exit() helyett return-t is, az is "kilép" a programból)

bbalint
5

Újratöltve

tiny · 2005. Júl. 15. (P), 20.46
Akkor így megelőzve a hozzászólásodat (remélem :) meglestem a linket amit adtál, megválasztoltam magamnak a kérdéseimet, nem tom mi akkor az ami bevillant mellé :).
Mr.Tiny
7

nem kell mindent lezárni

bbalint · 2005. Júl. 15. (P), 21.17
nem kötelező aztat a többsoros megjegyzést lezárni: ha nem teszed meg "csak" egy figyelmeztetést (warning) kapsz a PHP értelmezőtől, más nem:

<?php /*
ez egy érvényes kód, bár "hibás" (hibaüzenetes)

amikor "én" agyaltam ilyen szövegfilés-adatbáziskezelős programon, akkor emez fenti megoldáshoz jutottam, illetvehogy a 98aEkFh984ahFapeWEdfhlsdk42jf nevű könyvtárnevet igen nehéz lesz kitalálni ...
(persze, nyers erővel (brute force) meg lehet találni, ha keresi valaki, vagy ha tudja olvasni a könyvtárlistát, de ha már azt tudja, akkor a filéket is tudja)

bbalint
16

Megkötés

attlad · 2005. Júl. 16. (Szo), 13.32
Fenti esetben az adat nem tartalmazhat ilyet: */

Attila
8

Az elgondolás rossz szerintem...

kgyt · 2005. Júl. 16. (Szo), 00.48
Az adatokat kívül kell tenni a webrooton.
Így nem kérhetőek le közvetlenül.

--
Szeretettel: Károly György Tamás
kgyt(a)kgyt.hu - http://kgyt.hu
9

Ingyenes tárhely-szolgáltató

Török Gábor · 2005. Júl. 16. (Szo), 00.57
Pont ezt akartam javasolni én is csipőből, csak közben eszembe jutott, hogy elképzelhető, ingyenes tárhelyre készül az alkalmazás, ott pedig nincs lehetőség a webrooton kivűlre helyezni bármit is.

Egyébként a PHP kódba csomagolt adathalmaz ötlete nem új, korábban már volt is hírként, hogy hamarosan a PHP 5.1 támogatni fogja ezt a lehetőséget.

(Az is egy járható metódus, hogy .ht kezdettel látjuk el a fájl nevét, a legtöbb webszerver esetén az ilyen típusú állományok automatikus védelmet kapnak.)
10

így van

Anonymous · 2005. Júl. 16. (Szo), 01.03
Én sem értettem... Annyira kézenfekvő, hogy én nem is mertem leírni, mert azt hittem, rosszul értelmeztem a kérdést.
A mysql adatbázis file-ok sem kérhetők le, de csak azért, mert alapesetben a /var/lib-ben vannak, odáig meg a webszerver nem lát el.

Gyulus
11

Csak chrootban nem

Török Gábor · 2005. Júl. 16. (Szo), 01.08
Nem a webszerveren van a hangsúly, hanem az ügyfélen, aki csak legfeljebb a webrootig képes elérni bármilyen állományt, alapesetben pedig, nem chrootolt környezetben (öreg hiba!) a webszerver ellát a /var/lib mappába.
12

hm, hm... :)

Anonymous · 2005. Júl. 16. (Szo), 01.23
Nem ugyanarról beszélünk... Én úgy értettem, hogy a böngészőbe nem lehet olyan URL-t írni, ami a /var/lib/mysql-ből olvas ki file-okat. De ez mindegy is.

Visszatérve a problémára, nem tudom, miért nem jó az, ha az adatfile úgy néz ki, hogy
<?php
1 adat adat adat adat
2 adat adat adat adat
?>

Ha ezt a php-t meghívjuk a böngészővel, kapunk egy szép egészséges parse error-t, és a file tartalmából semmit se látunk.
Ráadásul ezt elég könnyű kezelni is programból, mert amikor beolvassuk, mint adatfile-t, az első és az utolsó sort ignoráljuk, és máris készen vagyunk.

Gyulus
13

veszélyes lehet

Hojtsy Gábor · 2005. Júl. 16. (Szo), 09.34
Ha az elejére mégis bekerül valami PHP kód (mondjuk sablonokat tárolnak az adatbázisban), akkor az le fog futni, úgyhogy jobb, ha nem ezt csinálja. Hacsak nem automatikus sorszámozást gondoltál a számok szerepéül, és azok mindenképpen ott lesznek.
14

akkor már inkább...

kgyt · 2005. Júl. 16. (Szo), 13.01
Ez jobb lenne (akkor már)...
<?PHP
error_reporting( 0 );
header( "Location: URL" );
exit( 0 );
/*
Adatok...
--
Szeretettel: Károly György Tamás
kgyt(a)kgyt.hu - http://kgyt.hu
15

404

attlad · 2005. Júl. 16. (Szo), 13.27

<?php header('HTTP/1.x 404 Not Found'); echo 'Menj innen.'; exit; ?>
adatok
még adatok
Attila
17

Status

kgyt · 2005. Júl. 16. (Szo), 13.39
Nekem így jobban tetszene (lásd manual):
<?PHP
error_reporting( 0 );
header( "HTTP/1.0 404 Not Found" );
header( "Status: 404 Not Found" );
header( "Location: URL" );
exit( 0 );
/*
Adatok...
--
Szeretettel: Károly György Tamás
kgyt(a)kgyt.hu - http://kgyt.hu
18

Minek komment?

attlad · 2005. Júl. 16. (Szo), 14.13
A vége miért jó ha komment, miért nem simán PHP lezárás?

De amúgy a Location fejléc miatt a PHP felülírja az egyik HTTP státuszt és ilyen lesz:
HTTP/1.x 302 Found
[...]
Status: 404 Not Found
Location: URL
[...]

Meg hova irányítana át? A 302 azt jelenti, hogy a tartalom ideiglenesen máshol érhető el, ez a keresőket és egyéb klienesek is megzavarhatja, persze ha a Status az érvényes ilyen esetekben, akkor nem.

Ha valaki HTTP 1.1-es kérést küld, akkor nem HTTP 1.1 szerint kéne válaszolni? (én nem tudom pontosan, még nem volt ilyenre szükségem)

Attila
19

Örülök hogy van min elmélkedni :)

tiny · 2005. Júl. 16. (Szo), 21.20
Köszi a sok hozzászólás, érdekeseket írtatok. Azért nem webroot-on kívül teszem, mert ingyenes tárhelyen is szeretném, hogy elérhető legyen, már csak azért, mert nekem egyenlőre csak ez van.
Amúgy a komment azért kellett volna, mert nem tudtam, hogy ha exit-tel kilépek akkor a továbbiakat nem dolgozza föl.
Ha hibaüzenetet ad ki, akkor az nem túl szép megoldás, szóval egyből elvetve.
A végső megoldás ez lett:

<?php
echo"<center><h1>FORBIDDEN</h1></center>";
exit;
?>
innen meg jönnek az adatok

Mr.Tiny
20

HTTP hibakód is kellene!

Hojtsy Gábor · 2005. Júl. 16. (Szo), 21.39
Gondolj bele, hogy valahol megjelenik egy link az adatfájlra, akkor a szolgáltatott tartalommal szépen lementi minden keresőrobot. Merthogy 200 OK fejlécet generál a szkripted. Nem véletlenül javasolták fent sokan, hogy adj egy hibakódot, hogy legalább a robotikus feldolgozásban ne gondolják használható válasznak azt, amit generáltál.
21

Igazad van

tiny · 2005. Júl. 16. (Szo), 21.44
Erre nem is gondoltam. Mármint a keresőkre. Egyébként a keresőrobot nem fog tudni arról a fájlról, mert én sehol nem fogok hivatkozni rá, nem? Mivel én ezt csak adattárolásra használom, ezért nem tudom, hogy egy keresőrobot hogy találna rá. De ha rosszul gondolom, akkor írjatok.
Mr.Tiny
22

Ki tudja..

attlad · 2005. Júl. 16. (Szo), 22.56
Ezt nem tudhatod, bárki elhelyezhet linket bármire. És a kereső sokmindent megtalál, olyat is ami még nem is létezik. Vagy nem kéne léteznie.

Szerintem használd a 15-öst kiegészítve a 17-ikbe írt státusz headerrel, a 404 vsz jobb mint a 403 ebben az esetben.

Attila
23

Ez lesz

tiny · 2005. Júl. 16. (Szo), 23.13
Oks, köszi, meg köszönöm mindenkinek a hozzászólásokat.
Mr.Tiny