server veilig?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ozzie PHP

Ozzie PHP

04/05/2013 23:25:28
Quote Anchor link
Een beetje een rare titel, maar ik zal uitleggen wat ik bedoel.

Als je aan het programmeren bent, moet je er dan vanuit gaan dat alles wat op je server staat veilig is?

Kan ik bijvoorbeeld op het private gedeelte van mijn server open en bloot configuratiebestanden plaatsen waarin ik wachtwoorden van databases zet? Of... moet ik die wachtwoorden bijvoorbeeld encrypten en in de code vervolgens weer decrypten? Of heeft dat totaal geen zin? Hoe doen jullie dat? Gaan jullie er vanuit dat alles wat op de server staat veilig is? Of nemen jullie toch nog extra voorzorgsmaatregelen?
 
PHP hulp

PHP hulp

20/04/2024 08:39:36
 
Bart V B

Bart V B

04/05/2013 23:34:10
Quote Anchor link
Volgens mij moet je zorgen dat men die dingen daar doet waar het mag.

Als jij een stukje ruimte reserveert voor config bestanden moeten ze zeker niet staan waar men bij kan.
Dus bijvoorbeeld in /var/www/ of /home/user/public_html, dus niet in de doc_root.
maar echt totaal daar buiten.

Hoezo encrypten en decripten?
Een config bestand is altijd een leesbaar bestand.
Dus dat heeft naar mijn mening niet veel zin.
Wat wel belangrijk is is dat de verbindingen goed gecontroleerd word.
Dus als iets van 127.1.1 moet komen niet toestaan dat het van een ander ip adres komt.
 
Ozzie PHP

Ozzie PHP

04/05/2013 23:41:13
Quote Anchor link
Bart, ik zal het nog wat verder uitleggen. De enige die FTP toegang heeft tot de VPS ben ik zelf.

Stel een bezoeker bezoekt een van mijn websites en er moet info uit de database worden gehaald, kan het dan kwaad om het wachtwoord voor de database gewoon "plain" (oversleuteld) in een configuratiebestandje te plaatsen.

Ik kan in mijn configuratiebestand zetten:
db_pass = broodjefrikandel

Maar ik zou het ook kunnen encrypten zodat er in het configuratiebestand staat:
db_pass = fgHASDF545JE_%$S

En dat ik dan in de code zeg:
$db_pass = decrypt($config['db_pass']);

Stel dat een hacker zou inbreken op mijn server dan heeft hij een versleuteld wachtwoord en kan hij niet inbreken in de database. Maar van de andere kant... hij heeft dan ook toegang tot de code en als hij even gaat zoeken dan weet hij ook hoe hij het moet decrypten.

Dus vandaar mijn vraag. Heeft het zin om extra voorzorgsmaatregelen te treffen voor het geval iemand je server binnendringt, of is het dan sowieso toch al te laat?
 
Bart V B

Bart V B

04/05/2013 23:52:40
Quote Anchor link
Dan heb je je server niet goed beveiligd.
Als men in je code kan rommelen dan zit het probleem dus niet in je config maar in je rechten.
Het heeft dan ook totaal geen nut om de/en-cryptie te gebruiken.

Belangrijk is dat je de config bestanden buiten de doc_root staan.
Dus bijvoorbeeld in /root/ daar mag alleen root komen en kan een user nooit bij.

Je zit denk ik nu teveel de focus te leggen op iets wat niet van belang is. ;)
Ook moet je het zo maken dat men per user iets mag gebruiken.
Dus:
user pietje heeft een database bijvoorbeeld pietje met password
user jantje heeft een database ala jantje met password.

Dus niet:
Ozzie met password en deze beheert alle databases.
Of nog erger mag CREATE UPDATE TRUNCATE DROP e.d. uitvoeren.
Alleen die rechten geven LEES: PER USER die ze nodig hebben niets meer of minder.

Ook is het belangrijk dat men niet te gissen wachtwoorden gebruikt.
Dus niet iets van: Ozzie1973 maar Oxv2Za69*
In je php code staan je database gegevens toch ook gewoon text/plain leesbaar.
En is het daar al eens mis mee gegaan?
Gewijzigd op 04/05/2013 23:57:28 door Bart V B
 
Ozzie PHP

Ozzie PHP

05/05/2013 00:00:38
Quote Anchor link
"Dan heb je je server niet goed beveiligd.
Als men in je code kan rommelen dan zit het probleem dus niet in je config maar in je rechten."

Nee, dat is is niet het geval. Er kan niemand op mijn server. Ik ben de enige die erop kan. Het is meer een soort van "wat als"-situatie. Stel dat een hacker toch zou inbreken op mijn server, en daar staat netjes een config bestand met wachtwoorden van databases. Maar daar is inderdaad niks aan te doen. Als ze inbreken ben je gewoon plat gezegd de lul.

"Je zit denk ik nu teveel de focus te leggen op iets wat niet van belang is. ;)"

ja dat zou goed kunnen :)

"Dus bijvoorbeeld in /root/ daar mag alleen root komen en kan een user nooit komen."

Ik werk maar met 1 user dus dit gaat voor mij niet echt op.

Maar waar het mij dus om gaat is of je zomaar iets unencrypted in je config kan zetten. Maar daar heb je het antwoord al op gegeven. De overige tips zijn duidelijk.
 
Bart V B

Bart V B

05/05/2013 00:13:15
Quote Anchor link
Nou nee, mijn tips zijn dus nog niet duidelijk.
Niet met 1 user werken, maar met meerdere users.
(vooral het stukje database is hier van belang.)
Zoals je weet kan root alles. Database aanmaken, droppen, truncate e.d.
Je wil niet dat 1 user dit allemaal kan. Ze moeten alleen die dingen kunnen doen die ze nodig hebben.
Een nieuwe database aanmaken hoeft een "normale" user niet als men alleen data heen hen weer sleept.

Zo ook op php nivo.
(correct me if i am wrong) Maar je bent toch een soort van cms/webshop systeem aan het maken toch?
In dat geval zal je waarschijnlijk ook wel klanten gaan krijgen of hebben.
Die moeten niet onder 1 user die dingen kunnen doen die jij niet wil.
Daarom is het van belang dat je het per user opzet.
Zo krijg je nooit (jou wat als vraag) dat men dingen doen die jij niet wil.
Laat ik het nog eenvoudiger zeggen:
Ik neem aan dat jij jou email adres toch ook niet deelt met al jou klanten ala IMAP?
Dus waarom zou je dat met andere dingen op je server wel doen?

Vandaar dat ik er zo op hamer dat je echt je systeem moet gaan inrichten per user.
Je krijgt een betere scheiding en als er dan toch nog wat omvalt, dan gaat alleen dat ene om en heeft de rest daar waarschijnlijk niet veel last van.
Gewijzigd op 05/05/2013 00:15:40 door Bart V B
 

05/05/2013 00:17:07
Quote Anchor link
Waarom zou je het encrypten en decrypten. Dan is het heel gemakkelijk voor de hacker om toch ook gewoon alles weer te decrypten. Het zal misschien iets langer duren, maar voor de rest.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

echo decrypt($password);

?>

Veel belangrijker is waarschijnlijk de veiligheid van de server. Als deze goed beveiligd is kan er normaal gezien niemand aan de bestanden en zoals gewoonlijk buiten de root plaatsen.
 
Ozzie PHP

Ozzie PHP

05/05/2013 00:19:49
Quote Anchor link
"Maar je bent toch een soort van cms/webshop systeem aan het maken toch?"

Ja, klopt...

Het "probleem" is dat al mijn domeinen als add-on domains moeten worden ingesteld want anders kan ik onderling geen bestanden delen. Ik heb dus maar 1 FTP account en daar vallen alle domeinen onder. Normaal gesproken is dat niet wenselijk. Echter, de enige die toegang zal hebben tot FTP ben ik zelf. Daarom is het dus geen probleem. Eventuele klanten krijgen geen toegang. Wél wil ik iedere website z'n eigen database geven met eigen login-gegevens. En de databse users krijgen dan beperkte rechten.

Volgens mij doe ik het op die manier goed?



Toevoeging op 05/05/2013 00:20:31:

@Aaron: ja inderdaad.
 
Bart V B

Bart V B

05/05/2013 00:42:32
Quote Anchor link
Quote:
Het "probleem" is dat al mijn domeinen als add-on domains moeten worden ingesteld want anders kan ik onderling geen bestanden delen.

Dus als ik je goed begrijp heb je/ kan je je users niet instellen per domein?
Waarom tackel je dat probleem dan niet?

Wat hebben de domeinen te maken met waar jij je bestanden neerzet?
Als jij een map hebt, noem maar even iets geks /ozzie/framework/

Dan kan je toch nog steeds iets laten verwijzen naar:
/home/user_1/public_html
Even zo uit mijn hoofd zou het zoiets moeten zijn
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ln -s /ozzie/framework/* /home/user/public_html/


Waar de core bestanden staan is toch niet van belang?
Want als jij een map /ozzie/framework/ shared in de code van die gebruiker dan ben je er toch al?
Ze kunnen jou systeem niet weghalen, maar kunnen wel gebruik maken van jou systeem.
Quote:
Eventuele klanten krijgen geen toegang. Wél wil ik iedere website z'n eigen database geven met eigen login-gegevens. En de databse users krijgen dan beperkte rechten.

Dat is uiteraard goed.

En als de klant zijn eigen plaatjes wil verwerken bijvoorbeeld?
Als dat 1 klant is kan je hem nog wel eens helpen met een ftp actie.
Maar als je 100 klanten hebt dan word dat al een stuk lastiger lijkt me.
Ga je dit allemaal via formuliertjes zitten doen met wat php magic?
Gewijzigd op 05/05/2013 00:47:36 door Bart V B
 
Ozzie PHP

Ozzie PHP

05/05/2013 00:50:42
Quote Anchor link
Hoe het precies zit weet ik niet meer (is alweer even geleden), maar ik wil bestanden onderling kunnen delen. Denk aan de code voor de cms, maar denk ook aan complete templates. Uiteindelijk bleek dat niet te kunnen, tenzij ik het cms in de ftp map van iedere user ga kopiëren en dat is juist niet de bedoeling. Uiteindelijk bleek het alleen te kunnen door gebruik te maken van add-on domains.

Een klant krijgt geen ftp-toegang, maar wel toegang tot z'n eigen cms. Uiteindelijk moet hij daar alle relevante dingen kunnen doen.

(Het is overigens wel een hele klus, dus of het ooit allemaal van de grond komt is nog maar afwachten... :-))
 
Remco nvt

Remco nvt

05/05/2013 13:43:21
Quote Anchor link
Als ze in je server komen kunnen ze leukere dingen doen dan het wachtwoord van de DB stelen. Ze stelen gewoon heel de DB ;)


Maar wat voor architectuur heb je bedacht dat je per se maar 1 gebruiker wilt op je systeem?
Je kan toch prima je core bestanden in een library zetten die je in het includepath zet en dan per klant een bootstrap neerzetten die alles opstart? En die kan je netjes per user neerzetten met hun rechten bescherming e.d.
 
Ozzie PHP

Ozzie PHP

05/05/2013 14:04:35
Quote Anchor link
Ik heb in principe maar 1 gebruiker nodig, omdat ik zelf de enige ben die kan inloggen.

Ik wil bijv. dat (in sommige gevallen) websites gebruik kunnen maken van templates of bestanden van andere websites. Hier heb ik dan content mappen voor nodig waar die websites bij kunnen. Daarnaast heb ik 1 bootstrap die alles afvangt en het request naar de juiste locatie stuurt.

Stel dat iedere website z'n eigen user krijgt, dan krijg je op de server zo'n soort structuur:

/pad/naar/website1/public/
/pad/naar/website1/private/
/pad/naar/website2/public/
/pad/naar/website2/private/
enz.

Omdat dat allemaal beveiligd is, kan website1 niet bij website2 komen en vice versa, terwijl dat in sommige gevallen wel nodig is. Vandaar dat ik het op deze manier moet doen.
Gewijzigd op 05/05/2013 14:05:11 door Ozzie PHP
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.