Сборка REDL: панель на PHP 8, капча-тумблер, закрытые уязвимости, установщики в один клик
- панель работает на PHP 8.4 (оригинал под PHP 7.0): elFinder utf8_encode, apache_get_modules, warnings - капча выключена и управляется из админки (флаг captcha_enable + блок настроек) - закрыты две SQL-инъекции без авторизации (createAuthLog: пароль из POST и CF-Connecting-IP) - убрано хранение паролей в открытом виде в authlog, XSS в поле ref - установщики install-panel.sh и install-node.sh (оригинальный затирал sources.list репозиториями Debian 9) - современный Dockerfile (оригинальный на debian:stretch больше не собирается) - планировщик и автозапуск работают без systemd - брендинг REDL.IO, год 2026, ссылки на redl.io - документация на русском: ИЗМЕНЕНИЯ, БЕЗОПАСНОСТЬ, ИНСТРУКЦИЯ
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class QueryBase {
|
||||
protected $ip;
|
||||
protected $port;
|
||||
|
||||
protected $socket;
|
||||
|
||||
protected function write($bytes) {
|
||||
return fwrite($this->socket, $bytes);
|
||||
}
|
||||
|
||||
protected function readInt8() {
|
||||
return ord($this->read(1));
|
||||
}
|
||||
|
||||
protected function readInt16() {
|
||||
$int = unpack('Sint', $this->read(2));
|
||||
return $int['int'];
|
||||
}
|
||||
|
||||
protected function readString() {
|
||||
$string = null;
|
||||
while(($char = $this->read(1)) != "\x00") {
|
||||
$string .= $char;
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
protected function read($len) {
|
||||
return fread($this->socket, $len);
|
||||
}
|
||||
}
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class mineQuery extends QueryBase {
|
||||
public function connect($ip, $port) {
|
||||
$this->ip = $ip;
|
||||
$this->port = $port;
|
||||
}
|
||||
|
||||
public function disconnect() {
|
||||
}
|
||||
|
||||
private function sendPacket() {
|
||||
}
|
||||
|
||||
public function getInfo() {
|
||||
require_once 'lgsl/lgsl_protocol.php';
|
||||
ini_set('default_socket_timeout', '10');
|
||||
$server = lgsl_query_live('minecraft', $this->ip, $this->port, $this->port, $this->port, 'sep');
|
||||
if(empty($server['s']['name'])) {
|
||||
$data['hostname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['hostname'] = $server['s']['name'];
|
||||
}
|
||||
if(empty($server['s']['map'])) {
|
||||
$data['mapname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['mapname'] = $server['s']['map'];
|
||||
}
|
||||
if(empty($server['s']['game'])) {
|
||||
$data['gamemode'] = 'Нет данных';
|
||||
} else {
|
||||
$data['gamemode'] = $server['s']['game'];
|
||||
}
|
||||
if(empty($server['s']['players'])) {
|
||||
$data['players'] = '0';
|
||||
} else {
|
||||
$data['players'] = $server['s']['players'];
|
||||
}
|
||||
if(empty($server['s']['playersmax'])) {
|
||||
$data['maxplayers'] = '0';
|
||||
} else {
|
||||
$data['maxplayers'] = $server['s']['playersmax'];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class mtasaQuery extends QueryBase {
|
||||
public function connect($ip, $port) {
|
||||
$this->ip = $ip;
|
||||
$this->port = $port;
|
||||
}
|
||||
|
||||
public function disconnect() {
|
||||
}
|
||||
|
||||
private function sendPacket() {
|
||||
}
|
||||
|
||||
public function getInfo() {
|
||||
require_once 'lgsl/lgsl_protocol.php';
|
||||
ini_set('default_socket_timeout', '10');
|
||||
$server = lgsl_query_live('mta', $this->ip, $this->port, $this->port + 123, $this->port, 'sep');
|
||||
if(empty($server['s']['name'])) {
|
||||
$data['hostname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['hostname'] = htmlspecialchars(mb_convert_encoding($server['s']['name'], 'UTF-8', 'WINDOWS-1251'));
|
||||
}
|
||||
if(empty($server['s']['map'])) {
|
||||
$data['mapname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['mapname'] = htmlspecialchars(mb_convert_encoding($server['s']['map'], 'UTF-8', 'WINDOWS-1251'));
|
||||
}
|
||||
if(empty($server['e']['gamemode'])) {
|
||||
$data['gamemode'] = 'Нет данных';
|
||||
} else {
|
||||
$data['gamemode'] = htmlspecialchars(mb_convert_encoding($server['e']['gamemode'], 'UTF-8', 'WINDOWS-1251'));
|
||||
}
|
||||
if(empty($server['s']['players'])) {
|
||||
$data['players'] = '0';
|
||||
} else {
|
||||
$data['players'] = $server['s']['players'];
|
||||
}
|
||||
if(empty($server['s']['playersmax'])) {
|
||||
$data['maxplayers'] = '0';
|
||||
} else {
|
||||
$data['maxplayers'] = $server['s']['playersmax'];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class ragempQuery extends QueryBase {
|
||||
public function connect($ip, $port) {
|
||||
$this->ip = $ip;
|
||||
$this->port = $port;
|
||||
}
|
||||
|
||||
public function disconnect() {
|
||||
}
|
||||
|
||||
private function sendPacket() {
|
||||
}
|
||||
|
||||
public function getInfo() {
|
||||
require_once 'lgsl/lgsl_protocol.php';
|
||||
ini_set('default_socket_timeout', '10');
|
||||
$server = lgsl_query_live('ragemp', $this->ip, $this->port, $this->port, $this->port, 'sep');
|
||||
if(empty($server['s']['name'])) {
|
||||
$data['hostname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['hostname'] = $server['s']['name'];
|
||||
}
|
||||
if(empty($server['e']['gamemode'])) {
|
||||
$data['gamemode'] = 'Нет данных';
|
||||
} else {
|
||||
$data['gamemode'] = $server['e']['gamemode'];
|
||||
}
|
||||
if(empty($server['s']['map'])) {
|
||||
$data['mapname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['mapname'] = $server['s']['map'];
|
||||
}
|
||||
if(empty($server['s']['players'])) {
|
||||
$data['players'] = '0';
|
||||
} else {
|
||||
$data['players'] = $server['s']['players'];
|
||||
}
|
||||
if(empty($server['s']['playersmax'])) {
|
||||
$data['maxplayers'] = '0';
|
||||
} else {
|
||||
$data['maxplayers'] = $server['s']['playersmax'];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class sampQuery extends QueryBase {
|
||||
public function connect($ip, $port) {
|
||||
$this->ip = $ip;
|
||||
$this->port = $port;
|
||||
}
|
||||
|
||||
public function disconnect() {
|
||||
}
|
||||
|
||||
private function sendPacket() {
|
||||
}
|
||||
|
||||
public function getInfo() {
|
||||
require_once 'lgsl/lgsl_protocol.php';
|
||||
ini_set('default_socket_timeout', '10');
|
||||
$server = lgsl_query_live('samp', $this->ip, $this->port, $this->port, $this->port, 'sep');
|
||||
if(empty($server['s']['name'])) {
|
||||
$data['hostname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['hostname'] = htmlspecialchars(mb_convert_encoding($server['s']['name'], 'UTF-8', 'WINDOWS-1251'));
|
||||
}
|
||||
if(empty($server['s']['map'])) {
|
||||
$data['mapname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['mapname'] = htmlspecialchars(mb_convert_encoding($server['s']['map'], 'UTF-8', 'WINDOWS-1251'));
|
||||
}
|
||||
if(empty($server['e']['gamemode'])) {
|
||||
$data['gamemode'] = 'Нет данных';
|
||||
} else {
|
||||
$data['gamemode'] = htmlspecialchars(mb_convert_encoding($server['e']['gamemode'], 'UTF-8', 'WINDOWS-1251'));
|
||||
}
|
||||
if(empty($server['s']['players'])) {
|
||||
$data['players'] = '0';
|
||||
} else {
|
||||
$data['players'] = $server['s']['players'];
|
||||
}
|
||||
if(empty($server['s']['playersmax'])) {
|
||||
$data['maxplayers'] = '0';
|
||||
} else {
|
||||
$data['maxplayers'] = $server['s']['playersmax'];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
/*
|
||||
Copyright (c) 2020 HOSTINPL (HOSTING-RUS) https://vk.com/hosting_rus
|
||||
Developed by Samir Shelenko and Alexander Zemlyanoy (https://vk.com/id00v / https://vk.com/mrsasha082)
|
||||
*/
|
||||
class valveQuery extends QueryBase {
|
||||
public function connect($ip, $port) {
|
||||
$this->ip = $ip;
|
||||
$this->port = $port;
|
||||
}
|
||||
|
||||
public function disconnect() {
|
||||
}
|
||||
|
||||
private function sendPacket() {
|
||||
}
|
||||
|
||||
public function getInfo() {
|
||||
require_once 'lgsl/lgsl_protocol.php';
|
||||
ini_set('default_socket_timeout', '10');
|
||||
$server = lgsl_query_live('source', $this->ip, $this->port, $this->port, $this->port, 'sep');
|
||||
if(empty($server['s']['name'])) {
|
||||
$data['hostname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['hostname'] = $server['s']['name'];
|
||||
}
|
||||
if(empty($server['s']['map'])) {
|
||||
$data['mapname'] = 'Нет данных';
|
||||
} else {
|
||||
$data['mapname'] = $server['s']['map'];
|
||||
}
|
||||
if(empty($server['e']['description'])) {
|
||||
$data['gamemode'] = 'Нет данных';
|
||||
} else {
|
||||
$data['gamemode'] = $server['e']['description'];
|
||||
}
|
||||
if(empty($server['s']['players'])) {
|
||||
$data['players'] = '0';
|
||||
} else {
|
||||
$data['players'] = $server['s']['players'];
|
||||
}
|
||||
if(empty($server['s']['playersmax'])) {
|
||||
$data['maxplayers'] = '0';
|
||||
} else {
|
||||
$data['maxplayers'] = $server['s']['playersmax'];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user