Помогу по Фруктовой Ферме

kozlovpeta382

Участник
Здорова форумчане!
Если в скрипте фф сделать ручные выплаты
т е пользователь заказывает выплату - после она в ожидание (идет на проверку)
в админке есть кнопки оплатить или отклонить (соответственно в модуле payments.php уже прописан api код payeer)
могут угнать деньги наши взломщики?
 

pligin

Команда форума
Администратор
Здорова форумчане!
Если в скрипте фф сделать ручные выплаты
т е пользователь заказывает выплату - после она в ожидание (идет на проверку)
в админке есть кнопки оплатить или отклонить (соответственно в модуле payments.php уже прописан api код payeer)
могут угнать деньги наши взломщики?
Могут
 

Stas79

Местный
Если выплата в ручном режиме, то удали ip и свой кошелек из настроек скрипта и выплачивай действительно вручную прям со своего кошелька payeer на кошелек payeer заказчика вывода средств. Этим ты сведешь к минимуму возможностей взломщиков украсть твои деньги.
 

kozlovpeta382

Участник
Этим ты сведешь к минимуму возможностей взломщиков украсть твои деньги.
это понятно
допустим если пользаков будет много
вручную со своего кошелька не удобно будет
ip и свой кошелек из настроек скрипта я удалил давно(там нет ни какой привязки)
данные прописанны прямо в $payeer = new rfs_payeer('Pххххххххх', 'IDxxxxxxx', 'Key xxxxxxxx'); и только в админском модуле _payment.php ну и так же в проверке баланса. Мне нужно уязвимости скрипта к минимуму свести - это мне нужно на будущее для того чтоб подключить API free-kassa для выплат на другие кошельки. я сам переделал модуль в папке account _payment.php для заказа выплаты и в админке _payment.php. Мне нужна подсказка от вас какие фильтры применять и где именно (для строчных данных и цифр)
Программирование я не много знаю, но только в другой области а в PHP туговато (только учусь). Но принцип один и тот же.
 
Последнее редактирование:

pligin

Команда форума
Администратор
я сам переделал модуль в папке account _payment.php для заказа выплаты и в админке _payment.php
мне нужна подсказка от вас какие фильтры применять и где именно (для строчных данных и цифр)
ты сам его переделал и мы не знаем какие "двери" ты оставил взломщику.
этот вопрос так не решается, тут нет экстрасенсов.
ставь тестовый сайт, предоставляй доступ - в этом случае тебе сможет кто-нибудь что-нибудь дельное подсказать.
я когда-то делал выплаты полуавтомат без сохранения ключа к API: администратор заходит в админку, вводит ключ API, сохраняет его нажатием на кнопку и потом производит выплаты по списку. Ключ хранится до закрытия страницы или обновления - админку закрыл и ключ удалил. Поэтому при каждой выплате нужно в настройках API Payeer генерировать новый ключ, если ты его нигде не сохранишь.
 

kozlovpeta382

Участник
Генерировать постоянно API PAYEER нутерно.
Я так понял что деньги воруют стороним скриптом через иньекцию.
если PAYEER выплачивает через IP хостинга, значит наши взломщики ни как не могут зная мой API и KEY вывести деньги через свой IP адресс (со стороны). Не ужели не возможно поставить защиту в админке для файла _payment.php ближе к функции $payeer = new rfs_payeer('Pххххххххх', 'IDxxxxxxx', 'Key xxxxxxxx'); ?


вводит ключ API, сохраняет его нажатием на кнопку
это делалось для того чтоб плохой чел не мог вытянуть данные с куков ?
 
Последнее редактирование:

pligin

Команда форума
Администратор
Я так понял что деньги воруют стороним скриптом через иньекцию.
если PAYEER выплачивает через IP хостинга, значит наши взломщики ни как не могут зная мой API и KEY вывести деньги через свой IP адресс (со стороны). Не ужели не возможно поставить защиту в админке для файла _payment.php ближе к функции $payeer = new rfs_payeer('Pххххххххх', 'IDxxxxxxx', 'Key xxxxxxxx'); ?
ты не понимаешь сути вопроса и поэтому мы не можем с тобой общаться и понимать друг друга...
ты все просишь некую "защиту"... нет никакой защиты и сделать ее нельзя... пока ты переделывал свой файл ты там оставил хренову тучу ошибок, каждая из которых даст возможность производить любые манипуяции...
вводит ключ API, сохраняет его нажатием на кнопку
это делалось для того чтоб плохой чел не мог вытянуть данные с куков ?
и опять же какое отношение ключ имеет к кукам?
ключ вводится отдельно, чтобы тот, кто имеет доступ к твоим файлам, твоей базе не смог произвести выплату
если PAYEER выплачивает через IP хостинга, значит наши взломщики ни как не могут зная мой API и KEY вывести деньги через свой IP адресс (со стороны).
им не нужно знать ни твой ID API ни твой номер кошелька ни ключ к API, если у тебя дохренище дыр...
а если они это знают, то нет никакой сложности разместить свой сайт на том же хостинге, что и твой и выполнять запросы
 

kozlovpeta382

Участник
Здравствуй админ!
В всех скриптах фф в паблике нет функции удаления покупки через определенное время (90 или 180 дней)
Можете подсказать такую функцию и где она встраиваеться или пример привести ?
К примеру купили фрукт какой то - основная запись идет в db_users_b (кол. фруктов, сумма и т. д) и в db_stats_btree (дата покупки, дата удаления, название, и сумма) мне нужно удалить или деактивировать этот фрукт через опр. кол дней, а лучше удалить.
 

pligin

Команда форума
Администратор
Здравствуй админ!
В всех скриптах фф в паблике нет функции удаления покупки через определенное время (90 или 180 дней)
Можете подсказать такую функцию и где она встраиваеться или пример привести ?
К примеру купили фрукт какой то - основная запись идет в db_users_b (кол. фруктов, сумма и т. д) и в db_stats_btree (дата покупки, дата удаления, название, и сумма) мне нужно удалить или деактивировать этот фрукт через опр. кол дней, а лучше удалить.
Такая функция в ФФ не предусмотрена.
Ты можешь использовать данные таблицы db_stats_btree для удаления покупки. Главное не очищай эту таблицу и удали функцию очистки по дате удаления.
При записи туда данных в графу удаления записывай время когда персонаж должен быть удален (отработал).
Добавь проверку наличия тех записей, где время удаления меньше текущего времени и удаляй эти строки и параллельно с ними уменьшай количество персонажей у пользователя на 1 .
Когда ты это сделаешь, у тебя появится следующая проблема: человек купил персонажа, но не собиралась ничего или продолжительное время не собирал. Так вот при удалении ты удаляешь весь его заработок. Т.е. перед удалением нужно сделать сбор у этого пользователя и только потом удалять.

Можете подсказать такую функцию и где она встраиваеться или пример привести ?
Как ты видишь в том, что написано выше, это не просто функция, это комплексное решение. Все составляющие этого решения есть в коде фермы, их просто нужно собрать воедино.
И я не могу тебе даже пример показать и готовое что-то написать, т.к. это много, минут 20-30 работы.
Поэтому я и использую во всех своих проектах депозиты, чтобы не сталкиваться с такими проблемами.
 

kozlovpeta382

Участник
Спасибо за ответ
Все составляющие этого решения есть в коде фермы, их просто нужно собрать воедино.
Я с вами полностью согласен. Там есть все то что нужно (не именно в определеном одном скрипте) Как бы это сказать мне нужна была подсказка с чего начинать , отправная точка. В один сайт я интегрировал 3 игрушки т. е. модули от разных ферм. Получилось не плохо но вот постоянное присутствие персонажей для меня проблемка не большая осталась. Так и разориться в будущем можно. Тематика моих игр не с фруктами связана и не с персонажами.
1) Ruble mining. - покупка режимов , сумма покупки не фиксированная.
2) Crypto mining. - покупка контрактов , сумма покупки фиксированная.
3) Выгодное вложение - (этот модуль от другого движка, но у меня получилось его переделать и депозит прекрасно удаляеться в конце срока. Срок депозита 30 дней и возврат тела депозита в конце срока. Начисление процентов каждый день по 2% на счет для вывода, можно регулировать. Таймер суточного счетчика и т. д). Интересно, из вашего описания PHP - Депозиты для сайта у меня самое большое отличие от вашего в том что на моем скрипте депозиты начисл, собир прибыль, возврат депозита не по крону а через файл в корне сайта config.php.
Мож я мало что понимаю и мне случайно удалось модифицировать/переделать модуль от другого движка. У меня только рассылка пользователям к крону подключена. Счета для покупок и вывода для всех трех проектов общие.
Админ вот можете глянуть здесь.
 

Вложения

Последнее редактирование:

kozlovpeta382

Участник
$db->query("SELECT ident, time_add FROM db_serfing_view WHERE user_id = '".$_SESSION['user_id']."' and time_add + INTERVAL 24*60*60 SECOND > NOW()");

while ($row_view = $db->FetchArray()) {
$visits[$row_view['ident']] = $row_view;
}

$db->Query("SELECT * FROM db_serfing WHERE money >= price and status = '2' ORDER BY high DESC, time_add DESC");
Здравствуй Админ!
В модуле серфинга как я понял нет лимита на вывод ссылок для показа пользователю.
Не подскажете как его организовать?
К примеру добавлено 40 ссылок серфинга.
Нужно чтоб выводилось только 20 ссылок для показа.
пользователь зашел на сайт и просмотрел 20 ссылок, после ссылки для него заканчиваються на определенное время (интервал 2 часа).
Если пользователь заходит через 2 часа то следующие 20 ссылок серфинга будут уже доступны для него.
$db->Query("SELECT * FROM db_serfing WHERE money >= price and status = '2' ORDER BY high DESC, time_add DESC LIMIT 20");
Вот так например выводиться только 20 ссылок серфинга но без интервала времени.
 

pligin

Команда форума
Администратор
Здравствуй Админ!
В модуле серфинга как я понял нет лимита на вывод ссылок для показа пользователю.
Не подскажете как его организовать?
К примеру добавлено 40 ссылок серфинга.
Нужно чтоб выводилось только 20 ссылок для показа.
пользователь зашел на сайт и просмотрел 20 ссылок, после ссылки для него заканчиваються на определенное время (интервал 2 часа).
Если пользователь заходит через 2 часа то следующие 20 ссылок серфинга будут уже доступны для него.

Вот так например выводиться только 20 ссылок серфинга но без интервала времени.
нужно посчитать количество просмотренных ссылок (пусть будет $count) пользователем за крайние два часа и вывести 20-$count ссылок серфинга на странице
 

siamski

Участник
Здравствуйте

Помогите_pay_fk.php

Внутренняя ошибка - попробуйте через 10-15 секунд или сообщите о ней администратору!
 

siamski

Участник
<div class="s-bk-lf">
<div class="acc-title">Заказ выплаты</div>
</div>
<div class="silver-bk">
<BR />
<?PHP
$_OPTIMIZATION["title"] = "Аккаунт - Заказ выплаты";
$usid = $_SESSION["user_id"];
$usname = $_SESSION["user"];

$db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1");
$user_data = $db->FetchArray();

$db->Query("SELECT * FROM db_config WHERE id = '1' LIMIT 1");
$config_site = $db->FetchArray();

$status_array = array( 0 => "Проверяется", 1 => "Выплачивается", 2 => "Отменена", 3 => "Выплачено");
# Минималка серебром!
$minPay = 1;

?>

<center><b>Заказ выплаты:</b></center><BR />

<?PHP
# Заносим выплату
if(isset($_POST['payment'])){
if(!empty($_POST['purse'])){
$currency = $_POST['currency'];
$sum = intval($_POST['sum']);
$purse = $_POST['purse'];
if($sum >= $minPay) {
if($sum <= $user_data['money_p']){
# Проверяем на существующие заявки
$db->Query("SELECT COUNT(*) FROM db_payment WHERE user_id = '$usid' AND (status = '0' OR status = '1')");
if($db->FetchRow() == 0){
### Делаем выплату ###
$sum = round($sum, 2);
$sum_pay = round( ($sum / $config_site['ser_per_wmr']), 2);
### Проверка баланса ###
$wallet_id = $config->WalletID;
$apiKey = $config->KeyApi;
$data = array(
'wallet_id' => $wallet_id,
'sign' => md5($wallet_id.$apiKey),
'action' => 'get_balance'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.fkwallet.ru/api_v1.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = trim(curl_exec($ch));
$c_errors = curl_error($ch);
curl_close($ch);
$answer = json_decode($result);
$balance = $answer->data->RUR;
if(($sum_pay + 0) <= $balance){
$data = array(
'wallet_id'=>$wallet_id,
'purse'=>$purse,
'amount'=>$sum_pay,
'desc'=>'Выплата пользователю '.$usname.' с проекта '.$_SERVER["HTTP_HOST"],
'currency'=>$currency,
'sign'=>md5($wallet_id.$currency.$sum_pay.$purse.$apiKey),
'action'=>'cashout',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.fkwallet.ru/api_v1.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = trim(curl_exec($ch));
$c_errors = curl_error($ch);
curl_close($ch);
$answer = json_decode($result);
$payment_id = $answer->data->payment_id;

# Получаем статус выплаты
$data = array(
'wallet_id'=>$wallet_id,
'payment_id'=>$payment_id,
'sign'=>md5($wallet_id.$payment_id.$apiKey),
'action'=>'get_payment_status',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.fkwallet.ru/api_v1.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$result = trim(curl_exec($ch));
$c_errors = curl_error($ch);
curl_close($ch);
$answer = json_decode($result);
$status = $answer->data->status;
if ($answer == 'Completed') {
# Снимаем с пользователя
$db->Query("UPDATE db_users_b SET money_p = money_p - '$sum', payment_sum = payment_sum + '$sum_pay', pay_points = pay_points - '$sum_pay' WHERE id = '$usid'");

# Вставляем запись в выплаты
$da = time();
$dd = $da + 60*60*24*15;

$ppid = $arTransfer["historyId"];

$db->Query("INSERT INTO db_payment (user, user_id, purse, sum, valuta, serebro, payment_id, date_add, status) VALUES ('$usname','$usid','$purse','$sum_pay','RUB', '$sum','$ppid','".time()."', '3')");

$db->Query("UPDATE db_stats SET all_payments = all_payments + '$sum_pay' WHERE id = '1'");
echo '<center><font color = "green"><b>Выплачено!</b></font></center><BR />';
} else {
echo '<center><font color = "red"><b>Внутренняя ошибка - попробуйте через 10-15 секунд или сообщите о ней администратору!</b></font></center><BR />';
}
}else echo '<center><font color = "red"><b>Системная ошибка #1021. Сообщите о ней администратору</b></font></center><BR />';
}else echo '<center><font color = "red"><b>У вас имеются необработанные заявки. Дождитесь их выполнения.</b></font></center><BR />';
}else echo '<center><font color = "red"><b>Вы указали больше, чем имеется на вашем счету</b></font></center><BR />';
}else echo '<center><b><font color = "red">Минимальная сумма для выплаты составляет '.$minPay.' серебра!</font></b></center><BR />';
}else echo '<center><b><font color = "red">Введите номер счета</font></b></center><BR />';
}
?>

<form action="" method="post">
<table width="99%" border="0" align="center">
<tr>
<td><font color="#000;">Выберите систему для вывода</font>: </td>
<td>
<select name="currency">
<option value="1">Webmoney WMR</option>
<option value="2">Webmoney WMZ</option>
<option value="45">Яндекс.Деньги</option>
<option value="63">QIWI кошелек</option>
<option value="133">FK WALLET RUB</option>
<option value="116">Bitcoin</option>
<option value="106">OOOPAY RUR</option>
<option value="109">OOOPAY EUR</option>
<option value="87">OOOPAY USD</option>
<option value="69">Perfect Money EUR</option>
<option value="64">Perfect Money USD</option>
<option value="84">Мобильный Платеж МТС</option>
<option value="83">Мобильный Платеж Билайн</option>
<option value="132">Мобильный Платеж Tele2</option>
<option value="82">Мобильный Платеж Мегафон</option>
<option value="137">Мобильный Платеж МегаФон Северо-Западный филиал</option>
<option value="138">Мобильный Платеж МегаФон Сибирский филиал</option>
<option value="139">Мобильный Платеж МегаФон Кавказский филиал</option>
<option value="140">Мобильный Платеж МегаФон Поволжский филиал</option>
<option value="141">Мобильный Платеж МегаФон Уральский филиал</option>
<option value="142">Мобильный Платеж МегаФон Дальневосточный филиал</option>
<option value="143">Мобильный Платеж МегаФон Центральный филиал</option>
</select>
</td>
</tr>
<tr>
<td><font color="#000;">Номер счета/кошелек получателя</font>: </td>
<td><input type="text" name="purse" size="15"/></td>
</tr>
<tr>
<td><font color="#000;">Сумма:</font> </td>
<td><input type="text" name="sum" id="sum" value="" size="15" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="payment" value="Заказать выплату" style="height: 30px; margin-top:10px;" /></td>
</tr>
</table>
</form>

<script language="javascript">PaymentSum(); SetVal();</script>

<table cellpadding='3' cellspacing='0' border='0' bordercolor='#336633' align='center' width="99%">
<tr>
<td colspan="5" align="center"><h4>Последние 10 выплат</h4></td>
</tr>
<tr>
<td align="center" class="m-tb">Серебро</td>
<td align="center" class="m-tb">Получаете</td>
<td align="center" class="m-tb">Кошелек</td>
<td align="center" class="m-tb">Дата</td>
<td align="center" class="m-tb">Статус</td>
</tr>
<?PHP




$db->Query("SELECT * FROM db_payment WHERE user_id = '$usid' ORDER BY id DESC LIMIT 20");

if($db->NumRows() > 0){

while($ref = $db->FetchArray()){

?>
<tr class="htt">
<td align="center"><?=$ref["serebro"]; ?></td>
<td align="center"><?=sprintf("%.2f",$ref["sum"] - $ref["comission"]); ?> <?=$ref["valuta"]; ?></td>
<td align="center"><?=$ref["purse"]; ?></td>
<td align="center"><?=date("d.m.Y",$ref["date_add"]); ?></td>
<td align="center"><?=$status_array[$ref["status"]]; ?></td>
</tr>
<?PHP

}

}else echo '<tr><td align="center" colspan="5">Нет записей</td></tr>'

?>

</table><div class="clr"></div>
</div>
 
Верх