rpicms

A CMS for the Raspberry Pi
git clone git://archive.git.mtrnord.blog/RpicmsTeam/rpicms.git
Log | Files | Refs | README | LICENSE

commit f83b61b24a41a8d0b644d480787a0d5c7912ccb0
parent 18addbffe91861ab76fae5fbe6beaaf8e6354d39
Author: MTRNord <mtrnord1@gmail.com>
Date:   Sun,  6 Jul 2014 16:42:01 +0200

second commit

Diffstat:
Acore/admin/admin.php | 10++++++++++
Mcore/admin/login.php | 33+--------------------------------
Acore/admin/login_check.php | 47+++++++++++++++++++++++++++++++++++++++++++++++
Mcore/admin/register.php | 32++++++++++++++++++++++++++++----
Acore/admin/register_activation.php | 23+++++++++++++++++++++++
Acore/blog/newpost.php | 0
Acore/secure/aes.php | 484+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 593 insertions(+), 36 deletions(-)

diff --git a/core/admin/admin.php b/core/admin/admin.php @@ -0,0 +1,10 @@ +<?php + if (!isset($_COOKIE["user"])){ + echo $_COOKIE["user"]; + echo "Bitte erst <a href=\"../login.php\">einloggen</a>."; + exit; + }else{ + echo "Welcome " . $_COOKIE["user"] . "!<br>"; + echo "<a href=\"../logout.php\">Abmelden</a>"; + } +?> diff --git a/core/admin/login.php b/core/admin/login.php @@ -1,5 +1,4 @@ - -<form action="" method="post"> +<form action="login_check.php" method="post"> <table cellpadding="1" cellspacing="4"> <tr> <td><strong>E-Mail-Adresse:</strong></td> @@ -16,33 +15,3 @@ </form> <a href="register.php" title="Registrierung">Registrier dich</a> - -<?php - $verbindung = mysql_connect("localhost", "root" , "1199Mtr3#") - or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); - mysql_select_db("blog") or die ("Datenbank konnte nicht ausgewählt werden"); - - $username = $_POST["username"]; - $passwort = md5($_POST["password"]); - - $abfrage = "SELECT EMail, password FROM users WHERE EMail LIKE '$username' LIMIT 1"; - $ergebnis = mysql_query($abfrage); - $row = mysql_fetch_object($ergebnis); - - if($row->password == $passwort){ - ob_start(); - $expire=time()+60*60*24*30; - setcookie('user', $username, $expire, '/', 'rpimarcel1.fritz.box', false, false); - setcookie('user', $username, $expire, '/', '192.168.178.40', false, false); - ob_end_flush(); - echo "Login erfolgreich. <br> <a href=\"admin/admin.php\">Geschützer Bereich</a>"; - } - else{ - echo "Benutzername und/oder Passwort waren falsch."; - } - -?> - - - - diff --git a/core/admin/login_check.php b/core/admin/login_check.php @@ -0,0 +1,47 @@ +<?php + + echo $_POST['username']; + echo "<br/>"; + echo $_POST['password']; + echo "<br/>"; + + $verbindung = mysql_connect("localhost", "root" , "1199Mtr3#") + or die("Verbindung zur Datenbank konnte nicht hergestellt werden"); + mysql_select_db("blog") or die ("Datenbank konnte nicht ausgewählt werden"); + + $username = $_POST["username"]; + //secure + include '../secure/aes.php'; + $key = '1554831687984849746489478'; + $string = $_REQUEST['pw']; +// $old_key_size = GibberishAES::size(); +// GibberishAES::size(256); + $encrypted_string = GibberishAES::enc($string, $key); + + + $abfrage = "SELECT EMail, password FROM users WHERE EMail LIKE '$username' LIMIT 1"; + $ergebnis = mysql_query($abfrage); + $row = mysql_fetch_object($ergebnis); + + echo $row->password; + echo "<br/>"; + echo $encrypted_string; + echo "<br/>"; + + if($row->password == $encrypted_string){ + ob_start(); + $expire=time()+60*60*24*30; + setcookie('user', $username, $expire, '/', 'rpimarcel1.fritz.box', false, false); + setcookie('user', $username, $expire, '/', '192.168.178.40', false, false); + ob_end_flush(); + echo "Login erfolgreich. <br> <a href=\"admin/admin.php\">Geschützer Bereich</a>"; + } + else{ + echo "Benutzername und/oder Passwort waren falsch."; + } + +?> + + + + diff --git a/core/admin/register.php b/core/admin/register.php @@ -11,17 +11,32 @@ $_REQUEST['Email'] = mysql_real_escape_string($_REQUEST['Email']); $_REQUEST['Name'] = mysql_real_escape_string($_REQUEST['Name']); $_REQUEST['pw'] = mysql_real_escape_string($_REQUEST['pw']); +echo("Vor dem Formular"); +echo("br /"); +echo($string, $key); +echo("br /"); - $text = "PHP-Einfach"; - $md5 = md5($_REQUEST['pw']); +echo($encrypted_string); +echo("br /"); +echo($pw); +echo("br /"); + + + //secure + include '../secure/aes.php'; + $key = '1554831687984849746489478'; + $string = $_REQUEST['pw']; +// $old_key_size = GibberishAES::size(); +// GibberishAES::size(256); + $encrypted_string = GibberishAES::enc($string, $key); $Erstellt = date("Y-m-d H:i:s"); $Aktivierungscode = rand(1, 9999); - mysql_query("INSERT INTO $TableAktivierung (Aktivierungscode, Erstellt, EMail, Aktiviert, name, password) VALUES ('$Aktivierungscode', '$Erstellt', '".$_REQUEST['EMail']."', '0', '".$_REQUEST['Name']."', '$md5')", $DatabasePointer); + mysql_query("INSERT INTO $TableAktivierung (Aktivierungscode, Erstellt, EMail, Aktiviert, name, password) VALUES ('$Aktivierungscode', '$Erstellt', '".$_REQUEST['EMail']."', '0', '".$_REQUEST['Name']."', '$encrypted_string')", $DatabasePointer); $ID = mysql_insert_id(); - mail($_REQUEST['EMail'], "Registrierung abschließen", "Hallo,\n\num die Registrierung abzuschließen, klicken Sie bitte auf den folgenden Link:\n\nhttp://rpimarcel1.fritz.box/register_activation.php?ID=$ID&Aktivierungscode=$Aktivierungscode", "FROM: $Absender"); + mail($_REQUEST['EMail'], "Registrierung abschlie&szlig;en", "Hallo,\n\num die Registrierung abzuschließen, klicken Sie bitte auf den folgenden Link:\n\nhttp://192.168.178.40/cms_new/core/admin/register_activation.php?ID=$ID&Aktivierungscode=$Aktivierungscode", "FROM: $Absender"); echo"Um die Registrierung abzuschließen, rufen Sie Ihr E-Mail-Postfach ab und klicken Sie auf den Aktivierungslink in der soeben an Sie versandten E-Mail."; } else{ @@ -32,4 +47,13 @@ echo'<input name="Send" type="submit" value="Absenden">'; echo'</form>'; } + +echo("Nach dem Formular"); +echo("br /"); +echo($string, $key); +echo("br /"); +echo($encrypted_string); +echo("br /"); +echo($pw); +echo("br /"); ?> diff --git a/core/admin/register_activation.php b/core/admin/register_activation.php @@ -0,0 +1,23 @@ +<?php + $DatabaseHost = "localhost"; + $DatabaseUser = "root"; + $DatabasePassword = "1199Mtr3#"; + $Database = "blog"; + $TableAktivierung = "users"; + + if($_REQUEST['ID'] && $_REQUEST['Aktivierungscode']){ + $DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword); + mysql_select_db($Database, $DatabasePointer); + + $_REQUEST['ID'] = mysql_real_escape_string($_REQUEST['ID']); + $_REQUEST['Aktivierungscode'] = mysql_real_escape_string($_REQUEST['Aktivierungscode']); + + $ResultPointer = mysql_query("SELECT ID FROM $TableAktivierung WHERE ID = '".$_REQUEST['ID']."' AND Aktivierungscode = '".$_REQUEST['Aktivierungscode']."'", $DatabasePointer); + + if(mysql_num_rows($ResultPointer) > 0){ + @mysql_query("UPDATE $TableAktivierung SET Aktiviert = '1' WHERE ID = '".$_REQUEST['ID']."'", $DatabasePointer); + echo"Vielen Dank f&uuml;r Ihre Registrierung. Der Aktivierungsprozess ist nun abgeschlossen."; + } + } +?> + diff --git a/core/blog/newpost.php b/core/blog/newpost.php diff --git a/core/secure/aes.php b/core/secure/aes.php @@ -0,0 +1,484 @@ +<?php + +/** + * Gibberish AES, a PHP Implementation + * + * See Gibberish AES javascript encryption library, @link https://github.com/mdp/gibberish-aes + * + * This implementation is based on initial code proposed by nbari at dalmp dot com + * @link http://www.php.net/manual/en/function.openssl-decrypt.php#107210 + * + * Requirements: + * + * OpenSSL functions installed and PHP version >= 5.3.3 (preferred case) + * or + * Mcrypt functions installed. + * + * If none of these functions exist, the class will try to use openssl + * from the command line (avoid this case). + * + * Usage: + * + * // This is a secret key, keep it in a safe place and don't loose it. + * $key = 'my secret key'; + * + * // The string to be encrypted. + * $string = 'my secret message'; + * + * // This is the result after encryption of the given string. + * $encrypted_string = GibberishAES::enc($string, $key); + * + * // This is the result after decryption of the previously encrypted string. + * // $decrypted_string == $string (should be). + * $decrypted_string = GibberishAES::dec($encrypted_string, $key); + * echo $decrypted_string; + * + * // The default key-size is 256 bits. 128 and 192 bits are also allowed. + * // Example: + * $old_key_size = GibberishAES::size(); + * GibberishAES::size(192); + * // The short way: $old_key_size = GibberishAES::size(192); + * $encrypted_string = GibberishAES::enc($string, $key); + * $decrypted_string = GibberishAES::dec($encrypted_string, $key); + * GibberishAES::size($old_key_size); + * echo $decrypted_string; + * + * @author Ivan Tcholakov <ivantcholakov@gmail.com>, 2012-2014. + * Code repository: @link https://github.com/ivantcholakov/gibberish-aes-php + * + * @version 1.1 + * + * @license The MIT License (MIT) + * @link http://opensource.org/licenses/MIT + */ + +class GibberishAES { + + protected static $key_size = 256; // The default key size in bits + protected static $valid_key_sizes = array(128, 192, 256); // Sizes in bits + + protected static $openssl_random_pseudo_bytes_exists = null; + protected static $openssl_encrypt_exists = null; + protected static $openssl_decrypt_exists = null; + protected static $mcrypt_exists = null; + protected static $openssl_cli_exists = null; + + // This is a static class, instances are disabled. + final private function __construct() {} + final private function __clone() {} + + /** + * Crypt AES (256, 192, 128) + * + * @param string $string The input message to be encrypted. + * @param string $pass The key (string representation). + * @return mixed base64 encrypted string, FALSE on failure. + */ + public static function enc($string, $pass) { + + $key_size = self::$key_size; + + // Set a random salt. + $salt = self::random_pseudo_bytes(8); + + $salted = ''; + $dx = ''; + + // Lengths in bytes: + $key_length = (int) ($key_size / 8); + $block_length = 16; // 128 bits, iv has the same length. + // $salted_length = $key_length (32, 24, 16) + $block_length (16) = (48, 40, 32) + $salted_length = $key_length + $block_length; + + while (strlen($salted) < $salted_length) { + + $dx = md5($dx.$pass.$salt, true); + $salted .= $dx; + } + + $key = substr($salted, 0, $key_length); + $iv = substr($salted, $key_length, $block_length); + + $encrypted = self::aes_cbc_encrypt($string, $key, $iv); + + return $encrypted !== false ? base64_encode('Salted__'.$salt.$encrypted) : false; + } + + /** + * Decrypt AES (256, 192, 128) + * + * @param string $string The input message to be decrypted. + * @param string $pass The key (string representation). + * @return mixed base64 decrypted string, FALSE on failure. + */ + public static function dec($string, $pass) { + + $key_size = self::$key_size; + + // Lengths in bytes: + $key_length = (int) ($key_size / 8); + $block_length = 16; + + $data = base64_decode($string); + $salt = substr($data, 8, 8); + $encrypted = substr($data, 16); + + /** + * From https://github.com/mdp/gibberish-aes + * + * Number of rounds depends on the size of the AES in use + * 3 rounds for 256 + * 2 rounds for the key, 1 for the IV + * 2 rounds for 128 + * 1 round for the key, 1 round for the IV + * 3 rounds for 192 since it's not evenly divided by 128 bits + */ + $rounds = 3; + if ($key_size == 128) { + $rounds = 2; + } + + $data00 = $pass.$salt; + $md5_hash = array(); + $md5_hash[0] = md5($data00, true); + $result = $md5_hash[0]; + + for ($i = 1; $i < $rounds; $i++) { + + $md5_hash[$i] = md5($md5_hash[$i - 1].$data00, true); + $result .= $md5_hash[$i]; + } + + $key = substr($result, 0, $key_length); + $iv = substr($result, $key_length, $block_length); + + return self::aes_cbc_decrypt($encrypted, $key, $iv); + } + + /** + * Sets the key-size for encryption/decryption in number of bits + * @param mixed $newsize The new key size. The valid integer values are: 128, 192, 256 (default) + * $newsize may be NULL or may be omited - in this case + * this method is just a getter of the current key size value. + * @return integer Returns the old key size value. + */ + public static function size($newsize = null) { + + $result = self::$key_size; + + if (is_null($newsize)) { + return $result; + } + + $newsize = (string) $newsize; + + if ($newsize == '') { + return $result; + } + + $valid_integer = ctype_digit($newsize); + + $newsize = (int) $newsize; + + if (!$valid_integer || !in_array($newsize, self::$valid_key_sizes)) { + + trigger_error( + 'GibberishAES: Invalid key size value was to be set. It should be integer value (number of bits) amongst: 128, 192, 256.', + E_USER_WARNING + ); + + } else { + + self::$key_size = $newsize; + } + + return $result; + } + + // Non-public methods ------------------------------------------------------ + + protected static function random_pseudo_bytes($length) { + + if (!isset(self::$openssl_random_pseudo_bytes_exists)) { + self::$openssl_random_pseudo_bytes_exists = function_exists('openssl_random_pseudo_bytes'); + } + + if (self::$openssl_random_pseudo_bytes_exists) { + return openssl_random_pseudo_bytes($length); + } + + // Borrowed from http://phpseclib.com/ + + $rnd = ''; + + for ($i = 0; $i < $length; $i++) { + + $sha = hash('sha256', mt_rand()); + $char = mt_rand(0, 30); + $rnd .= chr(hexdec($sha[$char].$sha[$char + 1])); + } + + return $rnd; + } + + protected static function aes_cbc_encrypt($string, $key, $iv) { + + $key_size = self::$key_size; + + if (!isset(self::$openssl_encrypt_exists)) { + self::$openssl_encrypt_exists = function_exists('openssl_encrypt') + && version_compare(PHP_VERSION, '5.3.3', '>='); // We need $iv parameter. + } + + if (self::$openssl_encrypt_exists) { + return openssl_encrypt($string, "aes-$key_size-cbc", $key, true, $iv); + } + + if (!isset(self::$mcrypt_exists)) { + self::$mcrypt_exists = function_exists('mcrypt_encrypt'); + } + + if (self::$mcrypt_exists) { + + // Info: http://www.chilkatsoft.com/p/php_aes.asp + // http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation + + $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); + + if (mcrypt_generic_init($cipher, $key, $iv) != -1) { + + $encrypted = mcrypt_generic($cipher, self::pkcs7_pad($string)); + mcrypt_generic_deinit($cipher); + mcrypt_module_close($cipher); + + return $encrypted; + } + + return false; + } + + if (!isset(self::$openssl_cli_exists)) { + self::$openssl_cli_exists = self::openssl_cli_exists(); + } + + if (self::$openssl_cli_exists) { + + $cmd = 'echo '.self::escapeshellarg($string).' | openssl enc -e -a -A -aes-'.$key_size.'-cbc -K '.self::strtohex($key).' -iv '.self::strtohex($iv); + + exec($cmd, $output, $return); + + if ($return == 0 && isset($output[0])) { + return base64_decode($output[0]); + } + + return false; + } + + trigger_error( + 'GibberishAES: System requirements failure, please, check them.', + E_USER_WARNING + ); + + return false; + } + + protected static function aes_cbc_decrypt($crypted, $key, $iv) { + + $key_size = self::$key_size; + + if (!isset(self::$openssl_decrypt_exists)) { + self::$openssl_decrypt_exists = function_exists('openssl_decrypt') + && version_compare(PHP_VERSION, '5.3.3', '>='); // We need $iv parameter. + } + + if (self::$openssl_decrypt_exists) { + return openssl_decrypt($crypted, "aes-$key_size-cbc", $key, true, $iv); + } + + if (!isset(self::$mcrypt_exists)) { + self::$mcrypt_exists = function_exists('mcrypt_encrypt'); + } + + if (self::$mcrypt_exists) { + + $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); + + if (mcrypt_generic_init($cipher, $key, $iv) != -1) { + + $decrypted = mdecrypt_generic($cipher, $crypted); + mcrypt_generic_deinit($cipher); + mcrypt_module_close($cipher); + + return self::remove_pkcs7_pad($decrypted); + } + + return false; + } + + if (!isset(self::$openssl_cli_exists)) { + self::$openssl_cli_exists = self::openssl_cli_exists(); + } + + if (self::$openssl_cli_exists) { + + $string = base64_encode($crypted); + + $cmd = 'echo '.self::escapeshellarg($string).' | openssl enc -d -a -A -aes-'.$key_size.'-cbc -K '.self::strtohex($key).' -iv '.self::strtohex($iv); + + exec($cmd, $output, $return); + + if ($return == 0 && isset($output[0])) { + return $output[0]; + } + + return false; + } + + trigger_error( + 'GibberishAES: System requirements failure, please, check them.', + E_USER_WARNING + ); + + return false; + } + + // See http://www.php.net/manual/en/function.mcrypt-decrypt.php#105985 + + protected static function pkcs7_pad($string) { + + $block_length = 16; // 128 bits: $block_length = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); + $pad = $block_length - (strlen($string) % $block_length); + + return $string.str_repeat(chr($pad), $pad); + } + + protected static function remove_pkcs7_pad($string) { + + $block_length = 16; // 128 bits: $block_length = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); + $len = strlen($string); + $pad = ord($string[$len - 1]); + + if ($pad > 0 && $pad <= $block_length) { + + $valid_pad = true; + + for ($i = 1; $i <= $pad; $i++) { + + if (ord($string[$len - $i]) != $pad) { + $valid_pad = false; + break; + } + } + + if ($valid_pad) { + $string = substr($string, 0, $len - $pad); + } + } + + return $string; + } + + protected static function openssl_cli_exists() { + + exec('openssl version', $output, $return); + + return $return == 0; + } + + protected static function strtohex($string) { + + $result = ''; + + foreach (str_split($string) as $c) { + $result .= sprintf("%02X", ord($c)); + } + + return $result; + } + + protected static function escapeshellarg($arg) { + + if (strtolower(substr(php_uname('s'), 0, 3 )) == 'win') { + + // See http://stackoverflow.com/questions/6427732/how-can-i-escape-an-arbitrary-string-for-use-as-a-command-line-argument-in-windo + + // Sequence of backslashes followed by a double quote: + // double up all the backslashes and escape the double quote + $arg = preg_replace('/(\\*)"/g', '$1$1\\"', $arg); + + // Sequence of backslashes followed by the end of the arg, + // which will become a double quote later: + // double up all the backslashes + $arg = preg_replace('/(\\*)$/', '$1$1', $arg); + + // All other backslashes do not need modifying + + // Double-quote the whole thing + $arg = '"'.$arg.'"'; + + // Escape shell metacharacters. + $arg = preg_replace('/([\(\)%!^"<>&|;, ])/g', '^$1', $arg); + + return $arg; + } + + // See http://markushedlund.com/dev-tech/php-escapeshellarg-with-unicodeutf-8-support + return "'" . str_replace("'", "'\\''", $arg) . "'"; + } + +} + +//echo '<br />'; + +// This is a secret key, keep it in a safe place and don't loose it. +//$key = 'my secret key'; +//echo '$key = '.$key; +//echo '<br />'; +// The string to be encrypted. +//$string = 'my secret message'; +//echo '$string = '.$string; +//echo '<br />'; +//echo '<br />'; + +// The default key size is 256 bits. +//$old_key_size = GibberishAES::size(); + +//echo 'Encryption and decryption using a 256-bit key:'; +//echo '<br />'; +//GibberishAES::size(256); +// This is the result after encryption of the given string. +//$encrypted_string = GibberishAES::enc($string, $key); +// This is the result after decryption of the previously encrypted string. +// $decrypted_string == $string (should be). +//$decrypted_string = GibberishAES::dec($encrypted_string, $key); +//echo '$encrypted_string = '.$encrypted_string; +//echo '<br />'; +//echo '$decrypted_string = '.$decrypted_string; +//echo '<br />'; +//echo '<br />'; + +//echo 'Encryption and decryption using a 192-bit key:'; +//echo '<br />'; +//GibberishAES::size(192); +//$encrypted_string = GibberishAES::enc($string, $key); +//$decrypted_string = GibberishAES::dec($encrypted_string, $key); +//echo '$encrypted_string = '.$encrypted_string; +//echo '<br />'; +//echo '$decrypted_string = '.$decrypted_string; +//echo '<br />'; +//echo '<br />'; + +//echo 'Encryption and decryption using a 128-bit key:'; +//echo '<br />'; +//GibberishAES::size(128); +//$encrypted_string = GibberishAES::enc($string, $key); +//$decrypted_string = GibberishAES::dec($encrypted_string, $key); +//echo '$encrypted_string = '.$encrypted_string; +//echo '<br />'; +//echo '$decrypted_string = '.$decrypted_string; +//echo '<br />'; +//echo '<br />'; + +// Restore the old key size. +//GibberishAES::size($old_key_size); +?>