Portál AbcLinuxu, 10. května 2025 13:22
Přesně tak. Hesla jsou v konfiguračních souborech.
Standardně je nelze nijak skrývat (pokud myslíš např. před dalšími adminy, to nelze - snad jedině include souboru s heslem odněkud, kam má přístup apache, ale ne ten uživatel, co vidí strom přes FTP a pod.)
Pozor však na standardní chybu: konfigurační soubor má příponu .inc a ta není vázána na žádný interpterer. Takže pak stačí napsat např. www.mojedomena.cz/inc/config.inc a máš naservírovaný výpis zdrojového kódu , tedy i hesla.
Standardně by měl být config buď .php, nebo třeba config.inc.php - pokud fakt někdo vyžaduje .inc, pak buď .inc přidat jako soubor pro php, nebo omezit přístup přes .htaccess do té složky, kde jsou konfiguráky.
Pokud chceš vyšší bezpečnost, pak lze pomocí .htaccess nastavit, které konrétně soubory smí uživatel zavolat.
Příklad:
<FilesMatch "\.(php|inc)$">
Order allow,deny
Allow from all
</FilesMatch>
<FilesMatch "(index.php|login.php|other.php)$">
Order allow,deny
allow from all
</FilesMatch>
Tak i v případě znalosti názvu souboru jej uživatel přes prohlížeč nezavolá. Tak snad tento postřeh někomu pomůže.
..., pak je nejspíš špatně navržená.mi prijde uplne mimo.
Do konfiguracniho souboru jako plain text!?Samozřejmě. V čem je problém?
Nechavam jej v kodu a mam na to napsanou classu, ktera heslo slozi a vyda.Takže stačí tu aplikaci spustit a v okamžiku přihlašování k DB pořídit coredump?
Pokud jde o aplikaci pracujici napr. s databazi (jak db file nebo db server) tak kam ulozite heslo k databazi? Do konfiguracniho souboru jako plain text!?To v té aplikaci máte také natvrdo zadrátovaný connection string, tedy hostname serveru, jméno databáze, jméno uživatele? To se musí konfigurace docela komplikovat, když jen k vůli změně serveru musíte změnit zdroják, překompilovat a sputit "s novou konfigurací". Co děláte, když chcete mít spuštěné dvě instance nad dvěma databázemi? Zkompilujete si dvě různé binárky? Heslo je součástí přístupových údajů. Plaintext soubor s heslem může být viditelný pouze pro speciálního uživatele, pod kterým se daný program spouští. To, že je heslo v plaintextu rozhodně neznamená, že jej může přečíst každý. Kdyby tohleto platilo, tak to heslo nakonec nikdo nepotřebuje. (Prostě jen proto, že kdyby se někdo dostal k souboru s tím heslem - překonal by zabezpečení pomocí práv k souboru - tak by si stejným způsobem mohl rovnou odnést datové soubory té db.)
Nijak. Heslo nemá být v programu, ale v konfiguraci, případně pro vyšší bezpečnost (konfiguraci lze zálohovat na nedůvěryhodná média) můžete používat keychain (KWallet, GNOME Keyring, MacOS Keychain ap.).Mně přijde že lidé co se takto ptají neřeší jestli má být heslo jinde, ale mají nejspíš nějaký program, který má někam přístup, a tento přístup se snaží omezovat na straně uživatele.
Heslo bude ulozene na USB v plaintexte?Ano, jinak to ani nejde. Když dostanu ten exáč, tak s ním můžu provádět to stejné, co agent, a ani heslo extrahovat nepotřebuju. Pokud se s tím heslem může provádět víc než dovolí ten exáč, je to naprosto nesmyslně navržený systém, který spravuje přístupová práva na klientovi.
Hádám, že se jedná třeba o program, který se napojuje přímo na databázi? A heslo nesmí jít najít proto, aby si pak nemohl někdo to heslo v programu najít, přihlásit se na databázi, celou ji stáhnout či smazat?
Pokud ano, jedná se o špatný návrh architektury. Jak píšou ostatní nade mnou, heslo půjde vždy zjistit. Takže se to musí řešit tak, že se program nebude připojovat přímo na databázi, ale naprogramuje se nějaká mezivrstva, která se umístí na server a která bude podporovat příkazy jen ty, co umí i ten program. Takže pak nikdo nezpůsobí víc škody, než umožňuje samotný program.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.