RSA Verschlüsselung unter PHP

Vor kurzem habe ich einige Präsentationen über Sicherheit in PHP-Anwendungen gesehen. Ein Thema dabei war, dass die gute alte MD5-Verschlüsselung bei Passwörtern nicht mehr ganz so sicher ist, weil es inzwischen einige einfache Methoden zur „Entschlüsselung“ gibt (z.B. mit Rainbow Tables oder Hash-Datenbanken). Ein erster Lösungsansatz zur Verbesserung der Passwortverschlüsselung ist häufig ein „Salt“ an den MD5-Hash anzuhängen, um es dem Angreifer zumindest zu erschweren. Aus meiner Sicht ist das allerdings mehr ein Workaround als eine wirklich sichere Lösung, daher habe ich nach einer Alternative zu MD5 gesucht und bin bei der RSA-Verschlüsselung hängengeblieben. Da es etwas kniffelig ist, die RSA-Verschlüsselung in einer PHP-Anwendung zu implementieren, gibt es von mir hier ein kleines HowTo. Ihr könnt die Verschlüsselung natürlich nicht nur für Passwörter verwenden, sondern für alle möglichen Daten.

» Weiterlesen

PHP > MySQL Datenbank in UTF-8 konvertieren

Folgendes PHP-Skript konvertiert eine komplette MySQL Datenbank in UTF-8:

define('DB_HOST', 'localhost');
define('DB_NAME', 'datenbank_name');
define('DB_USER', 'benutzer');
define('DB_PASSWD', 'supergeheimespasswort');
 
mysql_connect(DB_HOST, DB_USER, DB_PASSWD);
mysql_select_db(DB_NAME);
 
$result = mysql_query("SHOW TABLES");
while($row = mysql_fetch_assoc($result))
{
	$tableName = $row['Tables_in_'.DB_NAME];
	$fields = array();
	$primaryKey = null;
	mysql_query("ALTER TABLE `{$tableName}` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci");
	$_result = mysql_query("DESCRIBE `{$tableName}`");
	while($_row = mysql_fetch_assoc($_result))
	{
		if(isset($_row['Key']) && $_row['Key'] == 'PRI' && !$primaryKey)
		{
			$primaryKey = $_row['Field'];
		}
		if(strpos($_row['Type'], 'varchar') !== false || strpos($_row['Type'], 'text') !== false)
		{
			$fields[] = $_row['Field'];
			mysql_query("ALTER TABLE `{$tableName}` CHANGE `{$_row['Field']}` `{$_row['Field']}` {$_row['Type']} CHARACTER SET utf8 COLLATE utf8_general_ci");
		}
	}
	if(!empty($fields) && !empty($primaryKey))
	{
		$fields[] = $primaryKey;
		$_result = mysql_query("SELECT `".implode('`,`', $fields)."` FROM `{$tableName}`");
		while($_row = mysql_fetch_assoc($_result))
		{
			$values = array();
			foreach($_row as $field => &$value)
			{
				if($field != $primaryKey && !empty($value))
				{
					$values[] = "`".$field."` = '".utf8_encode($value)."'";
				}
			}
			$sql = "UPDATE `{$tableName}` SET ".implode(',', $values)." WHERE `{$primaryKey}` = '{$_row[$primaryKey]}'";
			mysql_query($sql);
		}
	}
}

Es werden nicht nur die Tabellen selbst, sondern auch alle geeigneten Felder konvertiert.

UPDATE 31.03.2011:
Ich habe das Skript noch einmal erweitert, sodass nicht nur die Datenbank konvertiert wird, sondern auch die Inhalte alle Datensätze.

Eigenes PHP-Framework sinnvoll?

Diesmal gibt es keinen Code von mir, sondern einen kleinen Erfahrungsbericht über PHP-Frameworks.

Ist es sinnvoll, sein eigenes PHP-Framework zu entwickeln?

Meine Antwort dazu ist klar: Ja, auf jeden Fall!
Aber warum? Es gibt doch so viele gute Frameworks, die stabil sind und so viele Module haben. Warum soll ich das Rad neu erfinden?

» Weiterlesen