TXT alapú fájlt php-s adatbázisként használva, letöltés esetén ha olvashatatlanná akarom tenni, mit tudok tenni?
Magyarán, ha php használja a fájl, írja olvassa, de sima txt alapú (nem csv meg ilyenek) akkor ugye letöltés esetén egy jegyzettömb simán megnyitva és olvashatóvá válik a tartalma. Mit tudok tenni, hogy ezt a fájlt csak a php kód tudja használni, olvasni és írni?
Igazából csak elméleti kérdés, kíváncsiság.
Vannak olyan egyedi fájlkiterjesztések, hogy kb. semmi nem olvassa (pl. pc játékfájlok) csak a készítő saját programja.
De az most hogy valami random fájlkiterjesztést használok az égvilágon semmit nem jelent. Ha a fájl txt alapú, akkor meg lehet nyitni és kész.
Ha elnevezem pdf-re, akkor nem fogja a header hiány miatt megnyitni a pdf olvasó, de a notepad még mindig XD
először is hülyeség ezt ilyen módon használni
de ha mégis olyat szeretnél, hogy egy fájl elérhetetlen legyen kívülről, akkor ne a www vagy public mappába rakd, hanem olyan mappába ahol csak a PHP éri el és nem letölthető!
Alapvetően a fájlok védelmét úgy szokták megoldani, hogy csak az kerül bele a public mappába (webszerveren) aminek valóban ott a helye, tehát azt szeretnénk, hogy kívülről közvetlenül elérjék. Minden egyéb esetben rakd olyan helyre amit nem érnek el kívülről.
Ezen felül van még lehetőség a közvetlen fájlelérést webszerver beállítások módosításával is befolyásolni (kérdés persze mit használsz: apache? nginx? - csak hogy a legelterjedtebbeket említsem).
De a leginkább faék megoldás (nem szép, de hatékony), hogy szimplán php kiterjesztést adsz neki és a fájl első sorába beteszed ezt:
<?php die();
majd a fájlt csak a második sortól kezded el feldolgozni.
Így ha meghívod böngészőn keresztül, akkor a webszerver átadja a php interpreternek és az első sornál nem jut tovább, tehát egy üres fájlt lát az illető. Letölteni sem tudja a tartalmát.
Te viszont backenden el tudod érni és ki tudsz velőle olvasni bármit.
Utóbbi viszont a kapa-kasza módszer, szóval inkább csak érdekességnek említettem. Javaslom használd az első két opció egyikét ilyen esetben.
#2 javítom magam. visszaolvasva lemaradt a záró tag:
<?php die(); ?>
alapvetően soha nem rakjuk ki, (ennek is megvan az oka) itt viszont kell, különben 500-as hibát fog dobni
persze ez mit sem változtat azon, hogy ne ezt a megoldást használd! :) (csak nem akartam hogy hülyeség maradjon itt)
Tehát rakd a public-on kívülre és kész.
"ennek is megvan az oka"
Azt az okot pedig lustaságnak hívják.
Aztán csodálkozunk, ha valami egy verziófrissítés után nem megy.
#4 nem feltétlenül...
Ha pl. a ?> után marad szóköz vagy \n, az gondot okozhat.
Csak hogy a leggyakoribb esetet említsem: header előtt output.
Vagy ne rakd a szövegalapú adatbázist a webszerver által kiszolgált könyvtárba, vagy korlátozd az elérhetőségét - például Apache esetén a .htaccess-ben <Files> és ordr direktívák:
* [link]
* [link]
használatával; illetve PHP-ben az open_basedir konfigurációs paraméterrel:
* [link]
tudod szabályozni, hogy maga a PHP mihez férjen hozzá.
Hülyének fogok tűnni tényleg, de ha nem a webszerveren van a fájl, akkor hol...? Tudtommal minden content ott van és onnan dolgozik a rendszer. Ha innen-onnan behívom, az se biztos hogy jó?
Igen, .htaccess fájllal konkrét mappákat, fájlokat levédhetek, ezt természetesen ismerem.
Ez a php die() szimpatikus, mivel nem egy nagy volumenű projekthez kellene... Együtt alkalmazva előbbivel még hatékonyabb.
Tudom hogy a flat file nem jó megoldás de ha nincs kedvem mysql-t használni (vagy esetleg nincs mód rá), akkor kézenfekvő array-okkal bajlódni inkább. :)
Saját célra lesz amúgy, nem másnak kellene.
A webszerverre rakod, de a docrooton kívülre.
Linux szerver esetén még működhet: a fájlnév kezdődjön egy ponttal: ".valami.txt". Linuxon ez rejtett fájlnak számít, és nem szolgálja ki a webszerver
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!