PDA

Просмотр полной версии : Помогите настроить скрипт


andreipup
28.07.2009, 21:32
Название скрипта
Member_Zone_1.5

ссылка на скрипт (http://www.bishome.ru/load/0-0-0-7827-20)

Файлы
папка img <---- Тут картинки
папка db <---- Тут как я понял генеряца ключи

x-sms.php

<?php

require_once(dirname(__FILE__).'/lib.inc.php');

//////////////////////////////////////////////////////////////////////////////////////////////////

$RESPONSE = array();
$RESPONSE[]= "smsid:".$_GET['smsid'];
$RESPONSE[]= "status:reply";
$RESPONSE[]= "content-type:text/plain";
$RESPONSE[]= "";

$storage = new Membership_PasswordStorage;
if($storage->isValidNumber()){
$pw = $storage->GeneratePassword($_GET['smsid']);
$storage->Add($pw);
$RESPONSE[] = "Ваш пароль: $pw";
}else{
$RESPONSE[] = "Вы отправили не на тот номер! Повторите на номер указанный на сайте";
}
echo join("\n",$RESPONSE);

?>

x-cron.php

<?php

require_once(dirname(__FILE__).'/lib.inc.php');

$storage = new Membership_PasswordStorage;
$storage->Cron();



protected.php

<?php

/**
* Указываем путь к библиотеке!
*/
require_once('lib.inc.php');

/**
* Проверяем пользователя. Если пароль просрочен, выводим сообщение об ошибке
*/
$t = new Membership_Credentials();
if( false == $t->IsAuthenticated() )
{
echo 'Введите пароль, вы не вошли в систему';
exit;
}
// Ниже размещается код закрытого раздела, нами показан простой пример вставки ссылки

echo '

<html>

<head>
<title>Закрытая зона</title>
</head>
<body>
<p>Скачать данный файл:</p>
<p><a href="http://your_site.com/member_zone/primer_file.zip">Cкачать</a></p>
</body>

</html>

';

?>


operators.php

<?php
$PREFIX = 'SMSPROXY'; // Введите ваш префикс

// Необходимо поставить короткие номера в соответствии со странами. По умолчанию выставлены номера максимальной стоимости.

$ru = '3649' ; // Введите короткий номер для России
$au = '0930399999' ; // Введите короткий номер для Австрии
$est = '17013' ; // Введите короткий номер для Эстонии
$be = '7796' ; // Введите короткий номер для Бельгии
$gb = '79067' ; // Введите короткий номер для Великобритании
$cz = '9090199' ; // Введите короткий номер для Чехии
$sp = '5339' ; // Введите короткий номер для Испании
$fi = '179479' ; // Введите короткий номер для Финляндии
$fr = '83868' ; // Введите короткий номер для Франции
$de = '80888' ; // Введите короткий номер для Германии
$hu = '090645045' ; // Введите короткий номер для Венгрии
$kg = '1171' ; // Введите короткий номер для Киргизии
$kz = '9915' ; // Введите короткий номер для Казахстана
$lv = '1874' ; // Введите короткий номер для Латвии
$lt = '1645' ; // Введите короткий номер для Литвы
$nl = '7117' ; // Введите короткий номер для Нидерландов (Голландии)
$no = '2322' ; // Введите короткий номер для Норвегии
$pl = '7910' ; // Введите короткий номер для Польши
$pr = '4565' ; // Введите короткий номер для Португалии
$se = '72170' ; // Введите короткий номер для Швеции
$tj = '1171' ; // Введите короткий номер для Таджикистана
$ua = '5014' ; // Введите короткий номер для Украины



lib.inc.php

<?php

error_reporting(E_ALL & ~ E_NOTICE);

require_once(dirname(__FILE__).'/config.php');

/// DEFINITIONS //

define('MEMBERSHIP_PASSWORD_LIFETIME_SEC',MEMBERSH IP_PASSWORD_LIFETIME * 3600 * 24);

define("MEMBERSHIP_PASSWORD_VALID", 0);
define("MEMBERSHIP_PASSWORD_EXPIRED",1);
define("MEMBERSHIP_PASSWORD_INVALID",2);

/// CLASSES ///

class Membership_Credentials
{
function Membership_Credentials()
{}

function IsAuthenticated()
{
if( $_COOKIE['timem'] == $this->_Sign($_COOKIE['time']) && $_COOKIE['time'] >= time() )
{
return true;
}
return false;
}

function Save($password)
{
$ps = new Membership_PasswordStorage();
$o = $ps->Expires($password);
$this->_SetCookie('time',$o);
$this->_SetCookie('timem',$this->_Sign($o));
}

function _Sign($s)
{
return md5($s . $_SERVER['SERVER_SOFTWARE'] . $_SERVER['HTTP_USER_AGENT'] . __FILE__ );
}

function _SetCookie($key,$val)
{
setCookie($key,$val,time() + MEMBERSHIP_PASSWORD_LIFETIME_SEC,'/',".".$_SERVER['HTTP_HOST']);
}

}

class Membership_PasswordStorage
{

var $db = '';

/**
* Constructor
*/
function Membership_PasswordStorage()
{
$this->db = dirname(__FILE__).'/db';
}

/**
* @return void
*/
function Add($password)
{
file_put_contents($this->file($password),time() + MEMBERSHIP_PASSWORD_LIFETIME_SEC);
}

/**
* @return int
*/
function Expires($password)
{
return file_get_contents($this->file($password));
}

/**
* @return boolean
*/
function Get($password)
{
if( !preg_match('/^[a-zA-Z0-9]{'.MEMBERSHIP_PASSWORD_LENGTH.'}$/',$password) )
{
return MEMBERSHIP_PASSWORD_INVALID;
}
if( file_exists($this->file($password)) && is_file($this->file($password)) )
{
$time = file_get_contents($this->file($password));
if( $this->isValid($time) )
{
return MEMBERSHIP_PASSWORD_VALID;
}
else
{
// @unlink($this->file($password));
return MEMBERSHIP_PASSWORD_EXPIRED;
}
}
else
{
return MEMBERSHIP_PASSWORD_INVALID;
}
}

function isValidNumber()
{
$numbers = split(',',trim(MEMBERSHIP_NUMBERS_PAY));
if( !in_array($_GET['num'],$numbers) )
{
return FALSE;
}
else
{
return TRUE;
}
}

function file($pw)
{
return $this->db . '/' . $pw;
}

function isValid($time)
{
return $time >= time();
}

/**
* @return void
*/
function Cron()
{
if ($handle = opendir($this->db))
{
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..")
{
$t = file_get_contents($this->file($file));
if( !$this->isValid($t) )
{
@unlink($this->file($file));
}
}
}
closedir($handle);
}
}

function GeneratePassword($salt)
{
$hash = md5($salt);
return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH);
}

}

class Membership_Printers
{

function print_js_countries()
{
include(dirname(__FILE__).'/operators.php');
$g = array();
foreach( $operators as $operator ){
$a = array();
foreach( $operator as $key => $val ){
$a[] = "'$key' : '".str_replace("'","\\'",$val)."'";
}
$g[] = '{'.join(",",$a).'}';
}
echo join(",",$g);
}

function print_html_countries()
{
include(dirname(__FILE__).'/operators.php');
foreach( $operators as $key => $operator ){
echo '<option value="'.$key.'">'.$operator['country'].'</option>';
}
}
}

if( !function_exists('file_put_contents') )
{
function file_put_contents($file,$conts)
{
$fp = fopen($file,'wb');
fwrite($fp,$conts);
fclose($fp);
}
}

index.php

<?php

require_once(dirname(__FILE__).'/lib.inc.php');
require_once(dirname(__FILE__).'/operators.php');

if( $_POST['action'] == 'login' )
{
//check credentials
$storage = new Membership_PasswordStorage;
$isError = $storage->Get($_POST['password']);
if( $isError == MEMBERSHIP_PASSWORD_VALID )
{
$c = new Membership_Credentials();
$c->Save($_POST['password']);
Header("Location: ". MEMBERSHIP_DESTINATION);
Header("Content-Length: 0");
Header("");
exit;
}
}

// printing the template

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//en">
<html>
<head>

<title>Получение доступа к сайту</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<META NAME="ROBOTS" CONTENT="NOINDEX">
<META NAME="ROBOTS" CONTENT="NOFOLLOW">
</head>
<body>
<center>
<table cellpadding="0" cellspacing="0" width="500" style="font-family:tahoma;font-weight:bold;font-size:16px;">
<tr>
<td align="center" valign="top"><img src="img/sms.jpg" align="left"><br>Отправьте SMS с текстом<br><font color="#FF0000"><?echo $PREFIX; ?></font><br>
на номер в вашей стране:
</td>
</tr>
<tr>
<td align="center" valign="top">
<table width="500" border="0" cellspacing="4" style="font-family:arial;font-weight:bold;font-size:12px;">
<tr>
<td height="1"></td>
<td height="1"></td>
<td align="center" height="1"><img src="img/clear.gif"></td>
<td height="1" bgcolor="#FFFFFF"></td>
<td></td>
<td></td>
<td align="center"><img src="img/clear.gif"></td>
</tr> <tr background="img/bgm.png">
<td ><img src="img/flags/ru.gif" width="40" height="24"></td>
<td >Россия</td>
<td width="90" align="center" ><? echo $ru; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/kz.gif" alt="" width="40" height="24"></td>
<td >Казахстан</td>
<td width="90" align="center" ><? echo $kz; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/aus.gif" alt="" width="40" height="24"></td>
<td >Австрия</td>
<td width="90" align="center" ><? echo $au; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/ua.gif" alt="" width="40" height="24"></td>
<td >Украина</td>
<td width="90" align="center" ><? echo $ua; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/est.gif" alt="" width="40" height="24"></td>
<td >Эстония</td>
<td width="90" align="center" ><? echo $est; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/kirg.gif" alt="" width="40" height="24"></td>
<td >Киргизия</td>
<td width="90" align="center" ><? echo $kg; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/be.gif" alt="" width="40" height="24"></td>
<td >Бельгия</td>
<td width="90" align="center" ><? echo $be; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/la.gif" alt="" width="40" height="24"></td>
<td >Латвия</td>
<td width="90" align="center" ><? echo $lt; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/br.gif" alt="" width="40" height="24"></td>
<td >Великобритания</td>
<td width="90" align="center" ><? echo $gb; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/li.gif" alt="" width="40" height="24"></td>
<td >Литва</td>
<td width="90" align="center" ><? echo $lv; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/cz.gif" alt="" width="40" height="24"></td>
<td >Чехия</td>
<td width="90" align="center" ><? echo $cz; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/nd.gif" alt="" width="40" height="24"></td>
<td >Нидерланды</td>
<td width="90" align="center" ><? echo $nl; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/esp.gif" alt="" width="40" height="24"></td>
<td >Испания</td>
<td width="90" align="center" ><? echo $sp; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/nor.gif" alt="" width="40" height="24"></td>
<td >Норвегия</td>
<td width="90" align="center" ><? echo $no; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/fin.gif" alt="" width="40" height="24"></td>
<td >Финляндия</td>
<td width="90" align="center" ><? echo $fi; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/pol.gif" alt="" width="40" height="24"></td>
<td >Польша</td>
<td width="90" align="center" ><? echo $pl; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/fr.gif" alt="" width="40" height="24"></td>
<td >Франция</td>
<td width="90" align="center" ><? echo $fr; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/port.gif" alt="" width="40" height="24"></td>
<td >Португалия</td>
<td width="90" align="center" ><? echo $pr; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/ger.gif" alt="" width="40" height="24"></td>
<td >Германия</td>
<td width="90" align="center" ><? echo $de; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/swe.gif" alt="" width="40" height="24"></td>
<td >Швеция</td>
<td width="90" align="center" ><? echo $se; ?></td>
</tr>
<tr background="img/bgm.png">
<td ><img src="img/flags/hung.gif" alt="" width="40" height="24"></td>
<td >Венгрия</td>
<td width="90" align="center" ><? echo $hu; ?></td>
<td bgcolor="#FFFFFF" >&nbsp;</td>
<td ><img src="img/flags/ta.gif" alt="" width="40" height="24"></td>
<td >Таджикистан</td>
<td width="90" align="center" ><? echo $tj; ?></td>
</tr>
</table>

<p>Полученный код доступа введите в эту форму:</p>
<p>
<?php if( !$isError ) { ?>&nbsp;<? } elseif( $isError == MEMBERSHIP_PASSWORD_EXPIRED ){ ?><br>
<center><b>Срок действия пароля истек</b></center>
<? } elseif( $isError == MEMBERSHIP_PASSWORD_INVALID ) { ?>
<center><b>Такого пароля нет</b></center>
<? } ?>
</p>

<div style="width:323px;background:#e3e3e3;border:1px;">
<form method="post" action="<?=$_SERVER['REQUEST_URI']?>" >
<input type="hidden" name="action" value="login" />
<input type="text" name="password" /> <input type="submit" name="submit" value="Войти" />
</form>
</div>

<p><a href="http://russianbilling.com/abonent.php" title="SMS-доступ, стоимость"><img src="http://russianbilling.com/buttons/2/black.jpg" border="0"></a></p>
</td></tr>
</table>
</center>
</body>
</html>

config.php

<?php

/**
* Время жизни пароля, в днях.
*/
define('MEMBERSHIP_PASSWORD_LIFETIME', 30);

/**
* Страница, на которую попадает пользователь если ввёл правильный пароль
*/
define('MEMBERSHIP_DESTINATION', "./protected.php");

/**
* Длина пароля, в символах
*/
define('MEMBERSHIP_PASSWORD_LENGTH', 6);

/**
* Номера телефонов с которого оплата разрешена, через запятую!
*/
define('MEMBERSHIP_NUMBERS_PAY', '3649,17013,0930399999,9014,7796,79067,9090199,533 9,179479,83868,80888,090645045,9915,5014,1645,1171 ,1874,7117,2322,7910,4565,72170');

readme

Спасибо, что воспользовались услугами SMSProxy.

Установка скриптов не займет много времени и не потребует от Вас специфических знаний.

1. Распаковать себе на сервер архив
Если Вы разместили скрипты по адресу http://ваш_домен/member_zone/, то настройка будет выглядеть следующим образом.
2. Выставить права на запись для директории /db
3. Разместить контент в файле protected.php
4. Изменить параметры своего аккаунта, расположенные в /operators.php
(добавить свой префикс и при необходимости изменить номера и тарифы, т.к. по умолчанию указаны максимальные)
В файле config.php перечисляются номера, с которых разрешены запросы (чтобы вас не обманывали, отправляя смс на
номера меньшей стоимости), время жизни пароля, длина пароля, страница, на которую необходимо направить пользователя
после авторизации.
5. Установить раз в сутки cron на запуск файла /x-cron.php, который будет удалять невалидные пароли
(Как настроить cron читайте здесь: http://masterhost.ru/support/doc/cron/). Вы также можете удалять пароли вручную, сортируя их по дате.
6. Рекламу с ссылкой http://ваш_домен/member_zone/index.php

После ввода пароля на этой странице, пользователь попадет на ваш закрытый раздел.
Установка скриптов на сервере законченa.


Теперь необходимо настроить Ваш сервис на SMSProxy
1. Создайте новый сервис в Кабинете, в качестве URL пропишите http адрес скрипта http://ваш_домен/member_zone/x-sms.php
2. Протестируйте работу скрипта нажав Тест (не забудьте указать перфиксы)

Остается положить контент в папку на сервере, и закрыть к ней доступ, используя htaccess.

Пример:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://ВАШ_ДОМЕН.ru/member_zone/protected.php.*$ [NC]
RewriteCond %{HTTP_REFERER} !^http://www.ВАШ_ДОМЕН.ru/member_zone/protected.php.*$ [NC]
# Все ваши файлы можно будет скачать ТОЛЬКО со страницы protected.php
#RewriteCond %{HTTP_REFERER} !^http://ВАШ_ДОМЕН.ru/member_zone/.*$ [NC]
#RewriteCond %{HTTP_REFERER} !^http://www.ВАШ_ДОМЕН.ru/member_zone/.*$ [NC]
# Удалите символ перед RewriteCond, чтобы разрешить перемещение по веб-страницам внутри защищенной зоны, и разрешить скачивать контент со всех страниц, лежащих в данной папке

RewriteRule /* - [F]




Этот файл нужно положить в папку, где лежит контент. В таком случае, никто не сможет открыть ваше видео/картинки,
не авторизовавшись.

Шаблон закрытой зоны по умолчанию - protected.php, это единственная страница, с которой пользователь может скачать контент,
кликнув по ссылке.

Файл htaccess можно создать с помощью блокнота, и переименовать полученный TXT-файл в .htaccess

Ваш сервис полностью готов к работе.

По вопросам и пожелания обращайтесь на support.russianbilling.com

История изменений.

v 1.2
Новый файл: protected.php
Установлена защита на файл в закрытой зоне. Ранее пользователи могли запомнить ссылку закрытой зоны и неавторизовавшись посещать ее.

v 1.3
Исправлен баг со временем действия пароля, теперь он задается именно в днях.

Внимание!
Скрипт предназначен для раздачи паролей и авторизации пользователей. Как именно закрывать прямой доступ к контенту - решать ВАМ.
Мы рекомендуем использовать ограничение доступа по рефереру, через .htaccess

v 1.4
Добавлена функция проверки номера на который отправляет абонент. Возможность выбора нескольких разрешённых номеров.

v 1.5
Изменена страница оплаты и выбор коротких номеров для работы.

Вообщем не пойму где генерица ключь для входа.
Примерно понял что в папке db но каким файлом не пойму(((
Подскажите бестолковому)

Kaimi
28.07.2009, 21:39
$pw = $storage->GeneratePassword($_GET['smsid']);


function GeneratePassword($salt)
{
$hash = md5($salt);
return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH);
}

andreipup
28.07.2009, 23:45
Это я понял а как допустим пасс вписать 123456 ?

Gar|k
28.07.2009, 23:53
<?php echo GeneratePassword('123456'); ?> что равносильно echo md5('123456');

andreipup
29.07.2009, 00:06
<?php echo GeneratePassword('123456'); ?> что равносильно echo md5('123456');

Если меняю на 12345

function GeneratePassword('123456') <--- здесь
{
$hash = md5('123456'); <--- здесь
return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH);

Выдает ошибки

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /home/cazinowm/public_html/zone/lib.inc.php on line 155

Ru}{eeZ
29.07.2009, 00:20
Если меняю на 12345

function GeneratePassword('123456') <--- здесь
{
$hash = md5('123456'); <--- здесь
return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH);

Выдает ошибки

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /home/cazinowm/public_html/zone/lib.inc.php on line 155

в тему я не вникал, но судя по этому куску, там определение функции. Вызов происходит отдельно от определения, то, что написал Гарик - вызов функции, т.е. в нужном месте пишешь GeneratePassword('123456'), что возвращает значение, возвращаемое функцией, если тебе это нужно вывести на экран, то добавляешь оператор echo, т.е. получется echo GeneratePassword('123456'). А в определении функции менять ничего не надо.
Судя по вопросам ты новичёк, советую почитать Энди Харриса, а потом Полла Хадсона на тему php.

andreipup
29.07.2009, 00:39
в тему я не вникал, но судя по этому куску, там определение функции. Вызов происходит отдельно от определения, то, что написал Гарик - вызов функции, т.е. в нужном месте пишешь GeneratePassword('123456'), что возвращает значение, возвращаемое функцией, если тебе это нужно вывести на экран, то добавляешь оператор echo, т.е. получется echo GeneratePassword('123456'). А в определении функции менять ничего не надо.
Судя по вопросам ты новичёк, советую почитать Энди Харриса, а потом Полла Хадсона на тему php.

Не можешь правильно подсказать как вписать я как тока не пробывал летят ошибки и все((((

echo GeneratePassword('123456') <--- здесь
{
$hash = md5('123456'); <--- здесь
return substr($hash,0,MEMBERSHIP_PASSWORD_LENGTH);

заменял как ты написал бесполезно.

andreipup
29.07.2009, 23:46
Если кто может напишите полным скриптом
как я понял все прописываться в x-sms.php
Ну как я не прописывал не хочет работать.

felix_
30.07.2009, 01:14
может 12345 (5 символов) не рабоатет потому что

config.php
/**
* Длина пароля, в символах
*/
define('MEMBERSHIP_PASSWORD_LENGTH', 6);

andreipup
30.07.2009, 02:02
может 12345 (5 символов) не рабоатет потому что

config.php
/**
* Длина пароля, в символах
*/
define('MEMBERSHIP_PASSWORD_LENGTH', 6);


Слушай можешь подсказать как вписать
Полностью написать как это выглядит в самом скрипте.

felix_
30.07.2009, 02:32
function GeneratePassword($salt)
{
$hash = md5($salt);
return substr($hash,0,strlen($salt));
}


попробуй так......

andreipup
30.07.2009, 13:17
И где здесь пароль указан?