fredag 22 januari 2010

PHP och MySQL, skydda din config.php

config.php
Det är vanligt att lägga information om de specifika databaskopplingarna i en egen fil, tex filen config.php. Följande är ett exempel på en sådan fil.

// -------------------------------------------------
//
// config.php

//
// Setting for the database connection
//
define('DB_HOST',     'localhost'); // database host
define('DB_USER',     'Mikael');    // username
define('DB_PASSWORD', 'hemligt');   // password
define('DB_DATABASE', 'Skolan1');   // Database name


Här kan du studera ett exempel där config.php används.
http://www.student.bth.se/~mos/php-to-db/mysql1.php

Innehållet i exemplets config.php ser du här.
http://www.student.bth.se/~mos/php-to-db/source.php?dir=&file=config.php

Följande sätt bör du använda för att skydda ditt lösenord.

1) Skydda din config.php med filrättigheter
Problemet på en miljö som skolans, är att ditt lösenord måste skrivas in i klartext i filen. Därmed ligger det oskyddat för alla som har ett konto på ssh.student.bth.se. Det är olyckligt och onödigt. IT-gänget har löst detta på följande sätt.
mos@sweet: sudo chgrp_www-data
Scriptet ändrar rättigheter (chmod och chgrp) på filen config.php i det biblioteket där du står. Se bilden nedan för ett exempel.

Bild: Exempel som visar hur filen config.php skyddas.

På detta sättet hindras alla som har ett studentkonto att komma åt filen (och ditt lösenord). Använd detta och kontrollera att rättigheterna ändras på din fil. Nu är du skyddad.

2) Skydda din config.php när du visar källkoden
I kursmomenten använder vi ofta ett PHP-skript, source.php (eller liknande), för att visa källkoden. Senaste versionen av denna fil hittar du på GitHub, kopiera gärna ned den och använd den i dina projekt.

Studera och kopiera filen från GitHub.
http://github.com/mosbth/Utility/blob/master/source.php#L1

Testa source.php live.
http://dbwebb.se/utility/source.php?dir=&file=config.php
I source.php finns det med ett par rader kod som skyddar utskriften av vissa parametrar från filen config.php, bland annat lösenordet till databasen. Normalt skall detta visas på följande sätt:

// Database
define('/* DB_USER,  is removed and hidden for security reasons */ );
define('/* DB_PASSWORD,  is removed and hidden for security reasons */ );
define('DB_DATABASE',   'xxxxxx');                 // <-- mysql db name
define('DB_HOST',       'blu-ray.student.bth.se');  // <-- mysql server host


Kontrollera alltid att din source.php skyddar ditt lösenord.

Inga kommentarer:

Skicka en kommentar