om een connectie te maken met de database in php is mijn database paswoord en gebruikersnaam hard-gecodeerd in mijn connect.php file. Via de mysql_connect(host, user, pass) maak ik dan de connectie.
Het hard-coderen van de username en password lijkt mij niet echt een veilige manier, want alles staat in de source code zomaar voor het grijpen.
Hoe kan dit opgevangen worden? Met andere woorden hoe kan ik op een veilige manier een connectie maken met de mysql-database zonder het db paswoord en gebruikersnaam vrij te moeten geven? (graag met een pratisch voorbeeld indien mogelijk).
Beste dieter. php code is niet leesbaar in de source code. wat je eventueel zou kunnen doen is de gegevens in een config bestandje zetten en deze buiten je root folder plaatsen.
Buiten de root folder... Ik ben echt een beginner op vlak van web-development. Kan je me dan even zeggen hoe je het best de structuur van je website maakt?
Voorlopig heb ik het als volgt gedaan:
Ik heb een project gemaakt in eclipse met de volgende folder structuur:
1) Classes: dit bevat alle php classes die ik gebruik in mijn website
2) CSS: bevat alle css files
3) JS: bevat alle javascript files
4) Web: Dit bevat mijn effectieve website (dus de files die een webpagina representeren)
In de root van mijn project heb ik een index.php file gemaakt die een redirect doet naar de web/home.php pagina.
Is deze structuur afdoende of helemaal niet correct? En hoe kan ik dit beveiligen zodat de inhoud van mijn directories classes, css, .... niet kan bekeken worden via de browser?
hmm je css beveiligen is niet echt te doen denk ik.. als mensen iets willen zien dan zien ze dat wel. hetzelfde geld voor Javascript. je php classes ziet men sowieso niet in je broncode omdat dit SERVER-SIDE is dit betekent dat het op de server al opgelost wordt en als text/functie naar de gebruiker wordt toegestuurd. dus als jij dit hebt
<?php
echo "Hello world";
?>
dan zal de gebruiker in zijn broncode enkel Hello world te lezen krijgen.
buiten je root is dus net een mapje voor die 4 dingen die je hier opsomt.
Je CSS beveiligen is grotendeels niet nodig, omdat het uiteindelijk toch nodig is in de browser. Wil je de CSS ook kunnen gebruiken in een pagina dan moet het ophaalbaar zijn door de browser en dus kan een gebruiker het ook zien. De enige mogelijkheid die ik zie om de bestanden zelf te beschermen is die net als de config file buiten de root te plaatsen. Daardoor kan een browser er ook niet direct meer bij, dus dan zal je een workaround moeten maken door middel van een php bestandje (dat dan wel bereikbaar moet zijn) de output te laten genereren via includes. Op zich nog wel handig als je veel kleine css bestandjes hebt en toch maar 1 css link wil maken per pagina.
css_builder.php:
<?php
header( 'text/css' );
include ( '../buiten_root_folder/test.css' );
?>
Dit genereert een voor de browser correcte css file en zal dus gewoon werken. Voor 'beveiliging' zou ik het niet gebruiken, maar als je zoals gezegd meerdere css files in 1 keer wilt laten downloaden is het wel handig.
Bedankt Erwin en Reshad voor jullie reactie en uitleg.
Btw is het ook een optie om in iedere map (buiten de root) een redirect file te plaatsen zodat bezoekers van de site niet naar de mappen structuur kunnen 'surfen' en daardoor ook geen weet hebben van wat er naast de root bestaat? of is dit volledig overbodig. En kan dit (het redirecten) ook gebruikt worden in de mappen van de rootfolder om er voor te zorgen dat gebruiker niet naar de inhoud van de mappen kunnen kijken in de browser.
@Reshad, daarom zeg ik ook dat het voor de beveiliging niet veel uitmaakt, alleen voor het sneller maken van je pagina.
@Dieter, een redirect kan niet, want bij een redirect zal de browser dat andere bestand proberen te openen, wat dus niet kan. Alleen met includes kan je het doen. De browser denkt dan dat hij alleen dat publieke bestand opent, maar in feite komt het meeste uit niet publieke bestanden. Aangezien dat op de server gebeurt kan het wel. In principe kan je bijna de hele inhoud op die manier private maken met een index file met 1 regel als publieke 'gateway'.