Difference between revisions of "Mysql php security"

From Cncz
Jump to: navigation, search
Line 6: Line 6:
 
Een veel gebruikte combinatie bij het maken van een website is php met mysql als database backend. Daarbij doet zich het probleem voor dat de website een connectie met de database moet kunnen maken. Daarvoor is een mysql account en wachtwoord nodig waar de webserver over moet kunnen beschikken. Een veel gebruikte constructie daarvoor is het opslaan van account naam en wachtwoord in een bestand ergens in de web-docs directory boom dat door het php script ingelezen wordt dat de connectie met de mysql server maakt. Dit is een erg onveilige oplossing omdat noodzakelijkerwijs dit bestand leesbaar moet zijn voor de webserver. Dat betekent op een webserver die meerdere websites host dat het bestand leesbaar moet zijn voor de user www, in de praktijk wordt er meestal voor gekozen het bestand leesbaar te maken voor de wereld. Dat betekent dat iedereen die een FNWI login heeft dit bestand kan lezen als hij/zij weet waar te kijken. Daarnaast is er het risico dat het bestand via de webserver opvraagbaar is.
 
Een veel gebruikte combinatie bij het maken van een website is php met mysql als database backend. Daarbij doet zich het probleem voor dat de website een connectie met de database moet kunnen maken. Daarvoor is een mysql account en wachtwoord nodig waar de webserver over moet kunnen beschikken. Een veel gebruikte constructie daarvoor is het opslaan van account naam en wachtwoord in een bestand ergens in de web-docs directory boom dat door het php script ingelezen wordt dat de connectie met de mysql server maakt. Dit is een erg onveilige oplossing omdat noodzakelijkerwijs dit bestand leesbaar moet zijn voor de webserver. Dat betekent op een webserver die meerdere websites host dat het bestand leesbaar moet zijn voor de user www, in de praktijk wordt er meestal voor gekozen het bestand leesbaar te maken voor de wereld. Dat betekent dat iedereen die een FNWI login heeft dit bestand kan lezen als hij/zij weet waar te kijken. Daarnaast is er het risico dat het bestand via de webserver opvraagbaar is.
  
Er is een oplossing voor dit probleem, i.p.v. een wachtwoord in een bestand te zetten kun je je wachtwoord versleutelen met behulp van een voor de website specifieke geheime sleutel. In de php code waarmee je de connectie met de mysql server maakt vervang je de regel waarin je het wachtwoord zet:<br /><code> $admin-password = "plaintextwachtwoord"; </code><br /> door<br /><code> ## EXTRA constructie om wachtwoord te beveiligen </code><br /><code> require_once( "passwd-crypt.inc.php" ); </code><br /><code> $admin_password = decrypt("VERSLEUTELD WACHTWOORD"); </code><br /> waar "VERSLEUTELD WACHTWOORD" natuurlijk vervangen moet worden door de versie die je van C&amp;CZ hebt ontvangen. Denk eraan dat als deze toewijzing in een class gebeurt je de toewijzing in de constructor van de class moet plaatsen. Klik op [|passwd-crypt.inc.php] om het extra php-bestand te kopieren.
+
Er is een oplossing voor dit probleem, i.p.v. een wachtwoord in een bestand te zetten kun je je wachtwoord versleutelen met behulp van een voor de website specifieke geheime sleutel. In de php code waarmee je de connectie met de mysql server maakt vervang je de regel waarin je het wachtwoord zet:<br /><code> $admin-password = "plaintextwachtwoord"; </code><br /> door<br /><code> ## EXTRA constructie om wachtwoord te beveiligen </code><br /><code> require_once( "passwd-crypt.inc.php" ); </code><br /><code> $admin_password = decrypt("VERSLEUTELD WACHTWOORD"); </code><br /> waar "VERSLEUTELD WACHTWOORD" natuurlijk vervangen moet worden door de versie die je van C&amp;CZ hebt ontvangen. Denk eraan dat als deze toewijzing in een class gebeurt je de toewijzing in de constructor van de class moet plaatsen. Klik op [[Media:passwd-crypt.inc.php|passwd-crypt.inc.php]] om het extra php-bestand te kopieren.
  
 
Indien je van deze constructie gebruik wilt maken stuur dan een mail naar Postmaster [mailto:postmaster@science.ru.nl?subject=SecureMysql&body=Database:%0DWebsite:] met vermelding van de database en website waarvoor je dit wilt.[/nl]
 
Indien je van deze constructie gebruik wilt maken stuur dan een mail naar Postmaster [mailto:postmaster@science.ru.nl?subject=SecureMysql&body=Database:%0DWebsite:] met vermelding van de database en website waarvoor je dit wilt.[/nl]
 
[en]An often used combination for a website is php with mysql as database backend. This implies that the web server must be able to connect to the database. For this it needs a mysql account and password. A typical (but unsafe) solution is to store the account name and password somewhere in a file in the document treee of the website which is then read by a php script that makes the mysql connection. This is not safe because this file has to be readable for the webserver. On a webserver which hosts multiple sites it implies that the file must be readable for the user www, in practice this often means readable for the world. This means that the file is readable for everyone who has an FNWI account. Apart from that there is the risk that the file can be read through the webserver.
 
[en]An often used combination for a website is php with mysql as database backend. This implies that the web server must be able to connect to the database. For this it needs a mysql account and password. A typical (but unsafe) solution is to store the account name and password somewhere in a file in the document treee of the website which is then read by a php script that makes the mysql connection. This is not safe because this file has to be readable for the webserver. On a webserver which hosts multiple sites it implies that the file must be readable for the user www, in practice this often means readable for the world. This means that the file is readable for everyone who has an FNWI account. Apart from that there is the risk that the file can be read through the webserver.
  
There is a solution for this problem, instead of including the password in plain text in a file, one can encrypt the password with a website specific secret key. In the php code which makes the connection with the mysql server you replace the line which sets the password:<br /><code> $admin-password = "plaintextpassword"; </code><br /> by<br /><code> ## EXTRA construction to protect the password </code><br /><code> require_once( "passwd-crypt.inc.php" ); </code><br /><code> $admin_password = decrypt("ENCRYPTED PASSWORD"); </code><br /> where "ENCRYPTED PASSWORD" has to be replaced with the string you receive from C&amp;CZ. Beware that in case this assignment is done in a class, this has to be placed in the constructor of the class. Click on  [|passwd-crypt.inc.php] to download the required extra php-file.
+
There is a solution for this problem, instead of including the password in plain text in a file, one can encrypt the password with a website specific secret key. In the php code which makes the connection with the mysql server you replace the line which sets the password:<br /><code> $admin-password = "plaintextpassword"; </code><br /> by<br /><code> ## EXTRA construction to protect the password </code><br /><code> require_once( "passwd-crypt.inc.php" ); </code><br /><code> $admin_password = decrypt("ENCRYPTED PASSWORD"); </code><br /> where "ENCRYPTED PASSWORD" has to be replaced with the string you receive from C&amp;CZ. Beware that in case this assignment is done in a class, this has to be placed in the constructor of the class. Click on  [[Media:passwd-crypt.inc.php|passwd-crypt.inc.php]] to download the required extra php-file.
  
 
If you want to use this construction send a mail to Postmaster [mailto:postmaster@science.ru.nl?subject=SecureMysql&body=Database:%0DWebsite:] with the name of the database and website.
 
If you want to use this construction send a mail to Postmaster [mailto:postmaster@science.ru.nl?subject=SecureMysql&body=Database:%0DWebsite:] with the name of the database and website.

Revision as of 12:35, 9 January 2008

Mysql Security

Mysql and php, password protection

An often used combination for a website is php with mysql as database backend. This implies that the web server must be able to connect to the database. For this it needs a mysql account and password. A typical (but unsafe) solution is to store the account name and password somewhere in a file in the document treee of the website which is then read by a php script that makes the mysql connection. This is not safe because this file has to be readable for the webserver. On a webserver which hosts multiple sites it implies that the file must be readable for the user www, in practice this often means readable for the world. This means that the file is readable for everyone who has an FNWI account. Apart from that there is the risk that the file can be read through the webserver.

There is a solution for this problem, instead of including the password in plain text in a file, one can encrypt the password with a website specific secret key. In the php code which makes the connection with the mysql server you replace the line which sets the password:
$admin-password = "plaintextpassword";
by
## EXTRA construction to protect the password
require_once( "passwd-crypt.inc.php" );
$admin_password = decrypt("ENCRYPTED PASSWORD");
where "ENCRYPTED PASSWORD" has to be replaced with the string you receive from C&CZ. Beware that in case this assignment is done in a class, this has to be placed in the constructor of the class. Click on passwd-crypt.inc.php to download the required extra php-file.

If you want to use this construction send a mail to Postmaster [2] with the name of the database and website.