проверка авторизации в cms сторонним php скриптом

условия: существует домен с установленным wordpress’ом. так-же существует под-домен (к примеру, files.domen.host), служащий для хранения (заливки) файлов через web-интерфейс.
постановка цели: необходимо сторонним скриптом, не входящим в состав wordpress’а проверить авторизацию в самой cms. немного поясню на примере: если вы залогинились в wordpress’е, то вы получаете доступ к данным закрытым для простых посетителей в пределах одного домена.

фуф, вроде как всё сказал. ваши предложения по этому поводу?

Если домены разные, то и логиниться придется два раза, потому как куки одного домена другому не отдаются. А использовать одни и те же логин и пароль для двух сайтов проще простого, если с обоих сайтов есть доступ к БД WP.

...в пределах одного домена...

Ю.Б. не совсем меня понял;). надо ограничиться именно одной сессией, одной парой плюшек. всё бы ничего если wordpresspass_[md5hash] совпадал хэшем пароля самого юзера, но не тут то было… реализация сессий в wp обстоит несколько другим образом. думаем дальше…

макс, соника, ариен, миколка, собственно вопрос направлен вам.. да и тема думаю будет интересна многим.. парсиг авторизационных файлов мало толку дает… всё реализуемо через плюшки (cookies) по сути, расчитывал на то что хэш плюшки с пассом будет такой-же как и хэш пароля администратора (юзверя) но ошибался.. помогите разобраться плз

нда.. пока что могу выложить текущий вариант скрипта: авторизация под записью admin (юзаем хэш пасса) если файл конфигов найден, иначе всё проще – просто инициализируем константу. всё просто, без излишеств, сессия храниться в плюшке (своя для аплоадера).

[code- <?php
/*
upload.php сценарий загрузки изображений через http
для аутефикации используется запись в бд wordpress пользователя ‘admin’
иначе, константа $passwdhash = md5(‘y0ur_Pa5sWorD!’);
функции:
– ведение лога доступа/загрузки файлов
– отображения списка файлов (по опр. маске)
– защита от xss изображений
– ну и так, по мелочи..

авторство: cmepthuk (hack_@mail.ru | +7 (922) 489-1715)
*/
error_reporting(0); // закомментить для дебага

include(‘config.inc.php’);

function testdb() {
if (@$db_lnk = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD)) {
if (mysql_select_db(DB_NAME, $db_lnk)) {
return array(True, "DB work norm.");
} else {
return array(False, "Could not select database.");
}
} else {
return array(False, "DB connect error.\n Error#".mysql_errno().":
".mysql_error());}
}

if (@$_GET["logoff"]) {
setcookie("wp_file_uploader", "", time()-42000, ‘/’);
header("Location: ".$_SERVER[‘SCRIPT_NAME’]);
if ($handle = fopen($logfilename, "a")){ //пишем в лог
if (is_writeable($logfilename)) {
fwrite($handle, "[".date(‘m.d.y H:i:s’)."] SESSION END: password hash ‘".
$password."’ (ip ".$_SERVER[‘REMOTE_ADDR’].")\n");
}
}
exit;
}

if (file_exists($cmspath . ‘wp-config.php’)) {
require_once($cmspath . ‘wp-config.php’);

$userstable = $table_prefix . ‘users’;

list ($dbstate, $dbmsg) = testdb();
if ($dbstate) {
$result = mysql_query("select `user_pass` from ".$userstable." where
`user_login` = ‘".cmsumane."’") or die ("Invalid query");
$row = mysql_fetch_array($result, MYSQL_ASSOC);
$passwdhash = $row["user_pass"];
} else {
die(‘Ssory, could not connect to db :(‘); }
} else {
$passwdhash = md5(‘y0ur_Pa5sWorD!’); /* ваш пароль, на случай если
подключить файл настроек wp не
удасцо */
}

@$pwdcookie = $HTTP_COOKIE_VARS[‘wp_file_uploader’];
if (isset($pwdcookie)){
$password = $pwdcookie;
} else { $password = md5(@$_POST[‘password’]); }

if ($password !== $passwdhash){
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<title>Image uploager / Загрузчик изображений</title>
</head>
<BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#aa0000" ALINK="#aa0000"
VLINK="#aa0000">

<table height="100%" width="100%"><tr><td align=center valign=middle
width="100%"><font size=-1 face="Arial">

<form action="<?php echo $_SERVER[‘SCRIPT_NAME’]; ?>" name="auth" method="post">
<table border="0" width="210" style="font-family:Verdana; font-size:12px;"><tr>
<td align="center">
<span style="font-family:Courier New; font-size: 25px; font-weight:bold;">Root
access</font>
</td></tr>
<tr><td>
Пароль: <input type="password" name="password">
</td></tr>

<?php if(isset($_POST[‘password’]) and $_POST[‘password’] !== ”){
if ($handle = fopen($logfilename, "a")){ //пишем в лог
if (is_writeable($logfilename)) {
fwrite($handle, "[".date(‘m.d.y H:i:s’)."] ACCESS ERROR: password ‘".
$_POST[‘password’]."’ (ip ".$_SERVER["REMOTE_ADDR"].")\n");
echo(‘<tr><td align="center"><span style="color:#aa0000;">Попытка
несанкционированного доступа. Ваши данные сохранены.</span></td></tr>’);
}
}
}
?>

<tr><td>
<input type="submit" style="width:100%;">
</td></tr></table>
</form>

</font></td></tr></table>

</body>
</html>
<?php
exit;
} else {
/* ==== file uploader ==== */
if (!isset($HTTP_COOKIE_VARS[‘wp_file_uploader’])) {
setcookie("wp_file_uploader",$password, mktime(0,0,0,1,1,2010)); }

if ($handle = fopen($logfilename, "a")){ //пишем в лог
if (is_writeable($logfilename)) {
fwrite($handle, "[".date(‘m.d.y H:i:s’)."] SESSION BEGIN: password hash ‘".
$password."’ (ip ".$_SERVER[‘REMOTE_ADDR’].")/n");
}
}

if (isset($HTTP_POST_FILES["filename"]["name"]))
{$filename = $HTTP_POST_FILES["filename"]["name"];}

if (isset($HTTP_POST_FILES["filename"]["size"]))
{$filesize = $HTTP_POST_FILES["filename"]["size"];}

@$filelist = $_POST["filelist"];
@$log = $_POST["log"];
if (!isset($filelist)) {$filelist = false;}
if (!isset($log)) {$log = false;}

function makethumb($out,$img,$neww,$newh,$quality) {
if (!isset($img)) {$img = ”;}
if (!isset($neww)) {$neww = ‘145’;}
if (!isset($newh)) {$newh = ‘108’;}
if (!isset($quality)) {$quality = ’75’;}

$im=imagecreatefromjpeg($img);
$k1=$neww/imagesx($im);
$k2=$newh/imagesy($im);
$k=$k1>$k2?$k2:$k1;

$w=intval(imagesx($im)*$k);
$h=intval(imagesy($im)*$k);

$im1=imagecreatetruecolor($w,$h);
imagecopyresampled($im1,$im,0,0,0,0,$w,$h,imagesx($im),imagesy($im));

imagejpeg($im1,$out,$quality);
imagedestroy($im);
imagedestroy($im1);
}

function translite($string) {
$string = ereg_replace("ё", "yo", $string); $string = ereg_replace("й", "iy", $string);
$string = ereg_replace("ю", "yu", $string); $string = ereg_replace("ь", "’", $string);
$string = ereg_replace("ч", "ch", $string); $string = ereg_replace("щ", "sh", $string);
$string = ereg_replace("ц", "c", $string); $string = ereg_replace("у", "u", $string);
$string = ereg_replace("к", "k", $string); $string = ereg_replace("е", "e", $string);
$string = ereg_replace("н", "n", $string); $string = ereg_replace("г", "g", $string);
$string = ereg_replace("ш", "sh", $string); $string = ereg_replace("з", "z", $string);
$string = ereg_replace("х", "h", $string); $string = ereg_replace("ъ", "’", $string);
$string = ereg_replace("ф", "f", $string); $string = ereg_replace("ы", "y", $string);
$string = ereg_replace("в", "v", $string); $string = ereg_replace("а", "a", $string);
$string = ereg_replace("п", "p", $string); $string = ereg_replace("р", "r", $string);
$string = ereg_replace("о", "o", $string); $string = ereg_replace("л", "l", $string);
$string = ereg_replace("д", "d", $string); $string = ereg_replace("ж", "j", $string);
$string = ereg_replace("э", "е", $string); $string = ereg_replace("я", "ya", $string);
$string = ereg_replace("с", "s", $string); $string = ereg_replace("м", "m", $string);
$string = ereg_replace("и", "i", $string); $string = ereg_replace("т", "t", $string);
$string = ereg_replace("б", "b", $string); $string = ereg_replace("Ё", "Yo", $string);
$string = ereg_replace("Й", "Iy", $string); $string = ereg_replace("Ю", "Yu", $string);
$string = ereg_replace("Ч", "CH", $string); $string = ereg_replace("Ь", "’", $string);
$string = ereg_replace("Щ", "SH", $string); $string = ereg_replace("Ц", "C", $string);
$string = ereg_replace("У", "U", $string); $string = ereg_replace("К", "K", $string);
$string = ereg_replace("Е", "E", $string); $string = ereg_replace("Н", "N", $string);
$string = ereg_replace("Г", "G", $string); $string = ereg_replace("Ш", "SH", $string);
$string = ereg_replace("З", "Z", $string); $string = ereg_replace("Х", "H", $string);
$string = ereg_replace("Ъ", "’", $string); $string = ereg_replace("Ф", "F", $string);
$string = ereg_replace("Ы", "Y", $string); $string = ereg_replace("В", "V", $string);
$string = ereg_replace("А", "A", $string); $string = ereg_replace("П", "P", $string);
$string = ereg_replace("Р", "R", $string); $string = ereg_replace("О", "O", $string);
$string = ereg_replace("Л", "L", $string); $string = ereg_replace("Д", "D", $string);
$string = ereg_replace("Ж", "J", $string); $string = ereg_replace("Э", "E", $string);
$string = ereg_replace("Я", "YA", $string); $string = ereg_replace("С", "S", $string);
$string = ereg_replace("М", "M", $string); $string = ereg_replace("И", "I", $string);
$string = ereg_replace("Т", "T", $string); $string = ereg_replace("Б", "B", $string);
return $string;
}

?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<style type="text/css">
body {background-image: url(_sys/bg.jpg);}
textarea {background-color: #ffffff;cursor: default;}
legend {color: #335ea8;}
fieldset {background-color:#ffffff;width:60%;text-align:center;padding:2px;}
input {height:25px;}
.filelist {border-width:0px;padding:5px;width:100%;height:90%;
font-family:Arial,Verdana;font-size:12px;}
</style>
<title>Image uploager / Загрузчик изображений</title>
</head>
<BODY BGCOLOR="#ffffff" TEXT="#000000" LINK="#aa0000" ALINK="#aa0000"
VLINK="#aa0000">

<a href="<?php echo $_SERVER[‘SCRIPT_NAME’]; ?>?logoff=true">Выйти</a>

<table height="95%" width="100%" border="0"><tr><td align=center valign=middle
width="100%"><font size=-1 face="Arial">

<fieldset>
<legend><big><b>Загрузка изображений:</b></big></legend>
<form action="<?php print($_SERVER[‘SCRIPT_NAME’]); ?>" method="post"
enctype="multipart/form-data" name="filetransfer">

<input name="reset" type="reset">
<input name="filename" type="file" size="50"
style="background-image: url(_sys/hs.gif);">
<input name="submit" type="submit"><br />
<input id="filelist" name="filelist" type="checkbox"
title="Да"<?php if(@$filelist){echo(" checked");} ?>>
<label for="filelist"> Показывать листинг файлов</label>
<input id="log" name="log" type="checkbox"
title="Да"<?php if(@$log){echo(" checked");} ?>>
<label for="log"> Показывать лог</label>
</form>
</fieldset>

<?php

if (isset($filename) and $filename !== ”) {

$filename = $HTTP_POST_FILES["filename"]["name"];
$ex = strtoupper(substr($filename,strlen($filename)-4,strlen($filename)));

if (in_array($ex, $valid_types)) {
if($HTTP_POST_FILES["filename"]["size"] > 1024*10*1024)
{
echo (‘<br /><div style="background-color:#E9967A;color:#000000;
line-height:100%;padding:5px;border: double #aa0000 4px;
width:500px;"><small><b>error</b><br />Размер файла превышает
десять мегабайт</small></div>
<br /><big style="color:#aa0000;">’);
exit;
}
$filename = translite($filename);
$filename = preg_replace("/[^a-zA-Zа-яА-Я0-9\.,~_\n]/i", "_", $filename);
if(copy($HTTP_POST_FILES["filename"]["tmp_name"],
$upploaddir.$filename))
{
$handle = fopen($upploaddir.$filename, "r"); // защита от xss
$file_text = fread($handle,filesize($filename));
fclose($handle);
if (strpos($file_text,'<script’)>-1) {
unlink($filename);
print(‘<br /><div style="background-color:#E9967A;color:#000000;
line-height:100%;padding:5px;border: double #aa0000 4px;
width:500px;"><b>error<br /><big style="color:#aa0000;">
XSS image!</b></big></div>’);
} else {
echo(‘<br /><span
style="color:#00aa00;font-weight:bold;font-size:16px;">Ссылка для
изображения: ‘.$_SERVER[‘SERVER_NAME’].’/’.$upploaddir.$filename
.'</span><br />’);
if ($handle = fopen($logfilename, "a")){ //пишем в лог
if (is_writeable($logfilename)) {
fwrite($handle, ‘[‘.date("m.d.y H:i:s").’] UPLOAD FILE:’.$filename.
‘ (‘.$filesize.’ bytes)’);
}
if(($ex == ‘.JPG’) || ($ex == ‘JPEG’)){
makethumb($upploaddir.$previewsdir.$filename,
$upploaddir.$filename, ‘145’, ‘108’, ’75’);
echo(‘<small>Превью: ‘.$_SERVER[‘SERVER_NAME’].’/’.$upploaddir.
$previewsdir.$filename.'</small><br />’);
} else {
echo(‘<br /><div style="background-color:#E9967A;color:#000000;
line-height:100%;padding:5px;border: double #aa0000 4px;
width:500px;"><small><b>error</b><br />Превью не может быть
создано, формат изображения для этой функции не поддерживается
</small></div>’);
}
}
}
} else {
echo(‘<br /><div style="background-color:#E9967A;color:#000000;
line-height:100%;padding:5px;border: double #aa0000 4px;
width:500px;"><small><b>error</b><br />Ошибка загрузки файла
</small></div>’);
}
} else { print(‘<br /><div style="background-color:#E9967A;color:#000000;
line-height:100%;padding:5px;border: double #aa0000 4px;
width:500px;"><small><b>error</b><br /><b>Не соответствует тип
файла</b><br />разрешенные форматы: ‘);
foreach ($valid_types as $vt) {print strtolower($vt)." ";} }
print(‘</small></div>’);
}
?>

<?php

if ($filelist == true) {
$dDir = opendir(‘.’);
$aFileList = array();
while ($sFileName=readdir($dDir)) {
if ($sFileName!=’.’ && $sFileName!=’..’) {
$aFileList
=$sFileName;
}
}
closedir ($dDir);
?>

<fieldset style="height:250px;">
<legend><b>Листинг файлов:</b></legend>
<textarea class="filelist" readonly>
<?php foreach ($aFileList as $aFileName) {
$fileindir = strtoupper(substr($aFileName,strlen($aFileName)-4,
strlen($aFileName)));
if (in_array($fileindir, $valid_types)) {
print($aFileName."\n");
}
} ?>
</textarea></fieldset>

<?php } ?>

<?php

if ($log == true) {
if (isset($filename) and ($filename <> ”)) {
echo(‘<fieldset><legend><b>Лог:</b></legend>
<textarea style="width:100%; height:70px;">’);
echo("\nИмя файла: ".$filename);
echo("\nРазмер файла в байтах: ".$filesize);
echo("\nКаталог для загрузки: ‘".$upploaddir."’ (".
$HTTP_POST_FILES["filename"]["tmp_name"].")");
echo("\nТип файла: ".$HTTP_POST_FILES["filename"]["type"]);
echo(‘</textarea></fieldset>’);
}
}
?>
<br /><small>script wroted by cmepthuk</small>
</font></td></tr></table>

</body>
</html>
<?php } ?>[/code]
буду рад предложениям по модификации и бета-тесту 😎

Anonymous
Отправить
Ответ на: