veilig?
Ik wil een framework bouwen dat bestaat uit een publiek deel (dit staat in de WWW map op de server) en een privé deel (dit staat buiten de WWW map op de server). Nu wil ik in het publieke deel van het framework een script maken waarmee je kunt aangeven in welke directory het privé deel staat.
Dit is ongeveer de bedoeling. Je plaatst het publieke en het privé deel op de server. Vervolgens roep je een bepaalde url aan, bijvoorbeeld www.mijnsite.nl/setup.
Nu wordt het bestand setup.php aangeroepen. Er wordt een folderstructuur getoond en nu kun je zelf op zoek gaan naar de directory waarin je het privé deel hebt geplaatst. Je klikt daarna op OK. Er wordt gecontroleerd of het privé deel inderdaad in die directory staat. Zo ja, dan wordt het index.php bestand overschreven en wordt in dit bestand het privé deel van het framework aangeroepen.
Nu vraag ik me af of dit veilig is. Als iemand het setup bestand zou kunnen aanroepen dan kan hij precies zien welke mappen er op mijn server staan.
Ik heb de volgende veiligheidsmaatregelen aangebracht, maar ben toch benieuwd of dit voldoende is.
- Ik werk met rewrite rules in htaccess waardoor het bestand setup.php niet via de browser kan worden aangeroepen.
- in mijn index.php staat een define INDEX. In setup.php controleer ik of INDEX gedefined is (met andere woorden, ik controleer of setup.php via index.php is aangeroepen). Zo niet dan roep ik de homepage aan.
Verder wil ik in het nieuw gegenereerde index.php bestand een variabele gaan setten, bijvoorbeeld $setup = false. In setup.php controleer ik dan of $setup geset is en op false staat. Zo ja, dan roep ik de homepage weer aan en voer ik het setup script niet uit.
Nu vraag ik mij af of ondanks mijn veiligheidsmaatregelen het setup.php bestand toch kan worden aangeroepen (bijvoorbeeld door iemand anders die ook een website op mijn server host... shared hosting namelijk) en of de INDEX define en het setten van $setup op een andere manier kunnen worden gefaket. Ik noem maar iets... stel iemand die ook op mijn server zit maakt op een php bestand en zet daarin define('INDEX', true) en $setup = true en vervolgens zou hij mijn setup.php bestand aanroepen. Wat gebeurt er dan?
Kortom... is mijn manier veilig ja of nee?
Gewijzigd op 20/06/2011 22:46:35 door Ozzie PHP
Waarom verwijder je setup.php niet gewoon.
klinkt veilig, maar ben het ermee eens.. de setup gewoon na instalatie verwijderen
Op het moment dat je het framework op de server zet dan staat in de index.php require 'setup.php'. Vervolgens wordt het index.php bestand overschreven en dan wil ik dus die variabele $setup = false erin zetten. Hier laat ik dan het setup.php bestand op controleren. Als ie op false staat dan werkt het setup script niet. Ik moet dan eerst in index.php die variabele handmatig op true zetten voordat ik het setup script kan aanroepen. Maar wat ik nu wil weten is of je dat kunt faken.
Dus stel iemand die toegang heeft tot de server waar mijn bestand op staat, maakt een bestand waar hij in zet $setup = true en vervolgens requiret hij mijn bestand. Kan zoiets?
Ozzie PHP op 20/06/2011 23:01:25:
Dus stel iemand die toegang heeft tot de server waar mijn bestand op staat, maakt een bestand waar hij in zet $setup = true en vervolgens requiret hij mijn bestand. Kan zoiets?
Of de serverinstellingen het toelaten weet ik niet, maar technisch gezien is dit mogelijk.
hmmm... is dat iets waar ik rekening mee moet houden, met een dergelijk scenario? Of gaat dat te ver? Weet je nog een andere manier hoe ik het nog beter kan beveiligen?
mocht je hem naar de prive dir verplaatsen zou je eventueel daar je key in kunnen zetten en die checken mocht je updates doorvoeren (mocht je hem op licentie gooien)
maar heb je een voorbeeld waar ik aan kan denken welke kan je op wilt met je framework ?
Gewijzigd op 20/06/2011 23:26:00 door Marco PHPJunky
Als je setup.php niet wil verwijderen, rename het dan naar iets anders of geef het geen leesrechten of zoiets. Je kan het ook verplaatsen naar buiten de webroot.
"maar heb je een voorbeeld waar ik aan kan denken welke kan je op wilt met je framework ?"
Een framework met cms wil ik maken. Ik wil dit dan installeren en dit ga ik dan als basis gebruiken wanneer ik een website ga maken. Ik ben nog maar met de basis bezig hoor :)
Maar volgens mij is het nu wel veilig voor mensen van "buitenaf" die niet op de server kunnen, maar is het niet 100% veilig voor mensen die wel op de server kunnen, maaaaar... is dat laatste eigenlink niet altijd het geval vraag ik me dan af.
en ja wat betreft niet 100% voor de mensen die wel toegang hebben tot de server is een beetje water naar de sloot dragen denk ik want wil je hem zo goed afschermen dat je er zelf niet meer bij kunt komen dan of op welke manier toegant tot de server bedoel je ? (ftp, code, hands-on acces)
maar oke klinkt leuk ik hoop dat je ons op de hoogte houd van je voorderingen en status van het project.
mocht je hem buiten de webroot zetten en je zou het doen zoals je hierboven aangeeft dan zou je dus eventueel een update bestand kunnen maken (mocht je updates doen) en dan aan de mensen zelf laten kiezen in welke map de prive folder staat en dan laten checken met serial / code uit setup of other file... en daarna pas de update doorvoeren op iets dergelijks...
Het systeem is (nog) niet voor verkoop ofzo hoor... dus licenties e.d. ga ik niet doen. Maar ik zit nu te denken... dat kopieren naar de prive directory gaat niet, want als ik de prive directory verplaats, dan verplaats ik ook het setup script en kan ik het vanuit de publieke map dus niet meer terugvinden :)
maar om er zeker van te zijn dat ze het bestand niet gemakkelijk vinden het gewoon een onlogische naam geven en of het een schrijfbeveiliging geven.
Toevoeging op 21/06/2011 00:20:44:
iemand nog een andere oplossing?
Op het moment dat ik het index.php bestand overschrijf zou ik hier natuurlijk een of andere code in kunnen verwerken, bijvoorbeeld $setup_code = 'askjekjeajeae343a'. Die code die laat ik dan genereren door het setup.php bestand. Vervolgens sla ik deze code ook op in het setup.php bestand zelf. Als het setup.php bestand dan zou worden aangeroepen, dan kan ik controleren of de code klopt. Zo ja, dan is het een legale aanroep. Zo nee, dan stuur ik de aanroep door naar de homepage.
Het enige wat ik dan nog moet zien voor elkaar te krijgen is hoe ik een eventuele hacker moet blokkeren. Stel dat iemand vanaf mijn eigen server (shared hosting) het setup.php bestand aanroept met een foute code, dan wil ik dat hij geblokkeerd wordt. Zou dat kunnen op basis van ip-adres? Of heeft hij hetzelfde ip-adres als ik (als gevolg van shared hosting)?
Gewijzigd op 22/06/2011 16:16:53 door Ozzie PHP