Hallo erstmal,
ich habe da ein etwas größeres Problem bei der Integration einer Anwendung mittels des RootCookie Plugin in MU Umgebung. Es soll ein Script von phprunner mittels iframe innerhalb Wordpress eingebunden werden, wobei die externe Anwendung auf die gleichen Login Daten zugreifen soll wie Wordpress. Dafür gibt es für ältere Wordpress Versionen ein Skript, dass mittels RootCookie auf die Userdaten zugreift. Die Schwierigkeit ist nun, dass in der MU Umgebung die Datenbankstruktur anders ist. Das kann ich noch nachvollziehen. Doch eine spezielle Variable in der wp_options namens 'auth_salt' fehlt in den Datenbankstrukturen.
Mir ist zwar klar, dass das ein Sicherheitsschlüssel ist, jedoch der genaue sinn entzieht sich mir. Google hat mir nicht weitergeholfen. Dafür fehlt mir Basiswissen.
Jetzt habe ich einen Knoten im Kopf und weiß einfach nicht weiter. Weiß jemand, wie man folgendes Nicht Wordpress Skript modifizieren kann, um die entsprechenden Anpassungen vorzunehmen. Ich habe inzwischen herausgefunden, dass die wp_options durch die wp_blogID_options ersetzt werden muss, doch auch dort findet sich keine Variable 'auth_salt'
define('AUTH_KEY', 'put your unique phrase here');
$wpconn=db_connect();
function get_option($option)
{
global $wpconn;
$ret="";
$rs=db_query("select option_value from wp_options where option_name='$option'",$wpconn);
$data=db_fetch_array($rs);
if($data)
{
$ret = $data["option_value"];
}
return $ret;
}
if ( !function_exists('hash_hmac') ):
function hash_hmac($algo, $data, $key, $raw_output = false) {
return _hash_hmac($algo, $data, $key, $raw_output);
}
endif;
function _hash_hmac($algo, $data, $key, $raw_output = false) {
$packs = array('md5' => 'H32', 'sha1' => 'H40');
if ( !isset($packs[$algo]) )
return false;
$pack = $packs[$algo];
if (strlen($key) > 64)
$key = pack($pack, $algo($key));
$key = str_pad($key, 64, chr(0));
$ipad = (substr($key, 0, 64) ^ str_repeat(chr(0x36), 64));
$opad = (substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64));
$hmac = $algo($opad . pack($pack, $algo($ipad . $data)));
if ( $raw_output )
return pack( $pack, $hmac );
return $hmac;
}
function wp_salt($scheme = 'auth')
{
$salt=get_option('auth_salt');
return $salt;
}
// get wordpress username from cookies
$cookie_key = "wordpress_" . md5(get_option('siteurl'));
foreach ($_COOKIE as $key=>$value)
{
if (substr($key,0,strlen($cookie_key))==$cookie_key)
{
$cookie = $value;
}
}
$logged=true;
// parse cookie
$cookie_elements = explode('|', $cookie);
if ( count($cookie_elements) == 3 )
{
$username=$cookie_elements[0];
$expiration=$cookie_elements[1];
$hmac=$cookie_elements[2];
// Quick check to see if an honest cookie has expired
if ( $expiration < time() ) {
$logged=false;
}
}
else
$logged=false;
// check if username exists in the database
if ($logged)
{
$rs=db_query("SELECT * FROM `wp_users` u inner join wp_usermeta m on u.ID=m.user_id
where meta_key='wp_capabilities' and user_login='$username'",$wpconn);
$data=db_fetch_array($rs);
if($data)
{
$pass_frag = substr($data["user_pass"], 8, 4);
$salt = wp_salt();
$key = hash_hmac('md5', $username . $pass_frag . '|' . $expiration, $salt);
$hash = hash_hmac('md5', $username . '|' . $expiration, $key);
if ( $hmac != $hash ) {
$logged=false;
}
else
{
$meta=$data["meta_value"];
preg_match('/"([^}]+)"/', $meta , $matches);
$group=$matches[1];
}
}
}
if ($logged)
{
$_SESSION["UserID"] = $username;
$_SESSION["GroupID"] = $group;
if ($group=='administrator')
$_SESSION["AccessLevel"] = ACCESS_LEVEL_ADMIN;
else
$_SESSION["AccessLevel"] = ACCESS_LEVEL_USER;
}
else
{
$_SESSION["UserID"] = "";
$_SESSION["AccessLevel"] = "";
$_SESSION["GroupID"] = "";
}
Alles anzeigen