Перейти к содержанию

m1ckey

Постоялец
  • Публикаций

    507
  • Зарегистрирован

  • Посещение

  • Победитель дней

    10
  • Отзывы

    100%

Весь контент m1ckey

  1. Там баги есть полюбому) не бывает сборок без багов) Вся Java это один большой баг.
  2. А можно побольше шрифт? А то вообще ничего не видно.
  3. ага, выпавший в осадок скорее какой разработчик?) Почитай мои посты выше) я скорее выпавший в осадок технопараноик)
  4. конечно пофикшу мне же больше нечего
  5. Напали на парня)
  6. Ага, я бы на твоем месте осторожнее поясничал бы с /admin/accounts.php
  7. PSD шапки которая делалась на заказ? Ну ты могёёёщ)))
  8. Если у вас чем то попахивает постирайте вещи и душ примите мсье) а зачем это и куда копировать не твоего ума дела)
  9. играем в ctrl+v , палим то что в буфере обмена) поехали $query="SELECT * FROM servers where status=1 AND service=-2 AND CURDATE()<=open_date order by open_date ASC, open_time ASC";
  10. Первый способ если мы запретим более 50 стран дедик на 2 дня уйдет пока не заблокирует все IP адреса всех стран (проверял) Ну и в готовых правилах открывать бд на внешку лучше не стоит (достаточно указать свой ip и сайта, больше она никому не нужна). Иначе это будет фиаско, братан))) Так же во многих сборках есть фишка которая позволяет логин серверу при успешной авторизации добавлять правило и открывать порт 7777 для нужного IP. Но стоит ещё прописать в onDisconnection (ЛСа и ГСа) аналогичные строки, но уже на удаление. Только с ЛСом там нужно подшаманить т.к. доходя до выбора сервера и выбирая его вы отключаетесь от ЛС, соответственно прописав закрытие порта 7777 при отключении от ЛС вы не войдёте. В противном случае за 2 дня вы забьете правила , а если у вас ещё и онлайн хороший сервер будет очень медленно работать с IPT. Да и не забываем дропать UDP трафик!) Мануал хороший, но для серьезного проекта это не подойдёт.) Хотя серьезный проект даже арбор или куратор не спасёт при мощной атаке)) Чё там говорить если OVH упал от чайников, тостеров и онлайн-камер (хотя 620 gb/s думаю врядли кто либо сможет отбить). Под МФИ-СОФТ если только размещаться, но я думаю это нерентабельное вложение.... да и рядом с СОРМами держать пиратский серв л2 надо быть рискованным человеком)
  11. вот и я про тоже) разработчику я могу ещё доверить поскольку ему проще баги создавать и на клиентке меня держать чтобы я фиксы получал. Соскочу с клиентки сразу на жуке появлюсь со всеми багами сборки) А тут вообще непонятное что то)))
  12. Они не украдены вы их сами выложили в интернеты xD
  13. m1ckey

    Пропадают Статы

    Будьте аккуратнее когда указываете set и order. Используйте этот урок
  14. Что непонятно то? Вы выложили компил сборки имея исходники. Постоянно апаете тему чтобы скачало как можно больше людей. Кто знает что вы прописали в исходниках? Поэтому я их и прошу чтобы убедиться что всё в порядке и чтобы остальные тоже были спокойны. Пока тут никто не может гарантировать отсутствие подводных камней в этой шаре, ибо код закрыт. Так понятнее?
  15. я не собираюсь ставить её на свой проект) глянул бы исходник на досуге и сказал бы стоит её ставить или нет. Ну в общем понятно) тут реально чет не то товарищи)
  16. Какая разница потенциальному покупателю кому они принадлежат? Наоборот круто что уникальные допы.
  17. Да как ты её проверишь если ты например оставил в коде бэкдор какой нибудь и только ты знаешь его) Никак ты её не проверишь) Исходники кинуть в личку можешь?
  18. и как же её без исходников проверить?)
  19. Всем доброго времени суток! В этом уроке мы с вами будем учиться использовать mysqli_prepare который сделает наш скрипт куда современнее + защитит от простых SQL инъекций. Что это и зачем это нужно Начнем с того, что MySQL перестал поддерживаться уже давным давно, на смену ему пришел MySQLi. Он стал куда сочнее и функциональнее да и пользоваться в целом им стало удобнее. Мы с вами остановимся конкретно на mysqli_prepare. Последнее что я выделил жирным это очень замечательно. Таким образом если наш зловредный школохакер захочет дропнуть нашу базу прописав в форму регистрации что то вроде : "; DROP TABLE l2jserver; # У него ничего не получится, ведь подготовленный запрос должен состоять из одного SQL выражения! Рассмотрим на конкретном примере Давайте представим что у нас стоит обычный MySQL и перед регистрацией аккаунта наш скрипт проверяет наличие аккаунта перед тем как его добавить (или вернуть ошибку что аккаунт существует). В таком случае PHP код регистрации будет выглядеть примерно так: <?php $connect=mysql_connect($host, $user, $password); // иницилизируем подключение mysql_select_db($connect, $dbname); // выбираем нужную бд $query='SELECT * FROM accounts WHERE login="'.$login.'"'; // объявляем переменную с запросом $result=mysql_query($query); // выполняем запрос $rows=mysql_num_rows($result); // получаем кол-во строк из результата if($rows) { // если строки найдены // аккаунт уже есть, выдаем ошбку; } else { // если строки не найдены // аккаунта нет, можем регистрировать; } mysql_close($connect); // закрываем подключение ?> А теперь давайте представим что мы школохакеры и хотим дропнуть базу сервера зная её название. Тогда вместо логина я должен указать: "; DROP DATABASE l2jserver; # # - нужна чтобы MySQL игнорировал всё что идёт после неё. Таким образом $query будет выглядеть следующим образом: $query='SELECT * FROM accounts WHERE login=""; DROP DATABASE l2jserver; #"'; За ним последует выполнение функции mysql_query и как следствие дроп базы сервера. Как этого избежать? - Юзай MySQLi! Теперь предлагаю рассмотреть код регистрации который мы привели выше с использованием MySQLi (без prepare). <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login="'.$_POST['login'].'"'; // объявляем переменную с запросом $result=$connect->query($query); // выполняем запрос $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $connect->close(); // закрываем подключение ?> Но этот скрипт до сих пор не безопасен, поскольку мы так же легко выполним два запроса одной функцией. Чтобы этого избежать будем использовать mysqli_prepare. Поехали!) <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login=?'; // объявляем переменную с запросом $stmt = $connect->prepare($query); // подготавливаем наш запрос $stmt->bind_param('s', $_POST['login']); // присваеваем первому ? в запросе параметр с типом данных s (string) $stmt->execute(); // выполняем подготовленный запрос $result=$stmt->get_result(); // получаем результат из подготовленного запроса $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $stmt->close(); // закрываем подготовленный запрос $connect->close(); // закрываем подключение ?> // P.S. Я сам только сейчас осваиваю эту функцию и поэтому для усвоения решил написать этот мануал. Поэтому если что то не так - поправьте. Теперь давайте по порядку. Мы можем забиндить (функция bind_param) сколько угодно параметров любого типа данных. Главное чтобы мы их объявляли по порядку исходя из нашего запроса. В $query где login=? мы даем понять коду что мы хотим вместо ? подставить параметры которые мы присвоили ниже функцией bind_param. Таким образом мы можем строить куда более сложные запросы и использовать разные типы данных. Как в примере ниже: <?php $accesslevel=0; $stmt = $mysqli->prepare( "INSERT INTO accounts ( login, password, accesslevel ) VALUES (?,?,?)" ); $stmt->bind_param( "ssi", $_POST['char_name'], $_POST['password'], $accesslevel ); $stmt->execute(); $stmt->close(); ?> Что у нас получается. В наш запрос будут подставлены данные из переменных с тем типом данных которые мы указали перед первой запятой в кавычках. i - int (целое число) s - string (строковое значение) Теперь когда наш школохакер захочет выполнить sql инъекцию система просто не даст ему это сделать, поскольку подготовленный запрос может быть только один. Для подстраховки вы можете так же использовать функцию экранирования mysqli->real_escape_string($string); перед тем как подставить эти данные в запрос, но это для супер параноиков т.к. prepare автоматически экранирует данные. Надеюсь урок будет полезен и расширит ваш кругозор!) Не откажусь от благодарности. Всем спасибо за внимание!
  20. [PHP] MySQLi - осваиваем mysqli_prepare (Подготовленные запросы) Всем доброго времени суток! В этом уроке мы с вами будем учиться использовать mysqli_prepare который сделает наш скрипт куда современнее + защитит от простых SQL инъекций. Что это и зачем это нужно Начнем с того, что MySQL перестал поддерживаться уже давным давно, на смену ему пришел MySQLi. Он стал куда сочнее и функциональнее да и пользоваться в целом им стало удобнее. Мы с вами остановимся конкретно на mysqli_prepare. Последнее что я выделил жирным это очень замечательно. Таким образом если наш зловредный школохакер захочет дропнуть нашу базу прописав в форму регистрации что то вроде : "; DROP TABLE l2jserver; # У него ничего не получится, ведь подготовленный запрос должен состоять из одного SQL выражения! Рассмотрим на конкретном примере Давайте представим что у нас стоит обычный MySQL и перед регистрацией аккаунта наш скрипт проверяет наличие аккаунта перед тем как его добавить (или вернуть ошибку что аккаунт существует). В таком случае PHP код регистрации будет выглядеть примерно так: <?php $connect=mysql_connect($host, $user, $password); // иницилизируем подключение mysql_select_db($connect, $dbname); // выбираем нужную бд $query='SELECT * FROM accounts WHERE login="'.$login.'"'; // объявляем переменную с запросом $result=mysql_query($query); // выполняем запрос $rows=mysql_num_rows($result); // получаем кол-во строк из результата if($rows) { // если строки найдены // аккаунт уже есть, выдаем ошбку; } else { // если строки не найдены // аккаунта нет, можем регистрировать; } mysql_close($connect); // закрываем подключение ?> А теперь давайте представим что мы школохакеры и хотим дропнуть базу сервера зная её название. Тогда вместо логина я должен указать: "; DROP DATABASE l2jserver; # # - нужна чтобы MySQL игнорировал всё что идёт после неё. Таким образом $query будет выглядеть следующим образом: $query='SELECT * FROM accounts WHERE login=""; DROP DATABASE l2jserver; #"'; За ним последует выполнение функции mysql_query и как следствие дроп базы сервера. Как этого избежать? - Юзай MySQLi! Теперь предлагаю рассмотреть код регистрации который мы привели выше с использованием MySQLi (без prepare). <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login="'.$_POST['login'].'"'; // объявляем переменную с запросом $result=$connect->query($query); // выполняем запрос $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $connect->close(); // закрываем подключение ?> Но этот скрипт до сих пор не безопасен, поскольку мы так же легко выполним два запроса одной функцией. Чтобы этого избежать будем использовать mysqli_prepare. Поехали!) <?php $connect=new mysqli($host, $user, $password, $db); // иницилизируем подключение к бд $query='SELECT * FROM accounts WHERE login=?'; // объявляем переменную с запросом $stmt = $connect->prepare($query); // подготавливаем наш запрос $stmt->bind_param('s', $_POST['login']); // присваеваем первому ? в запросе параметр с типом данных s (string) $stmt->execute(); // выполняем подготовленный запрос $result=$stmt->get_result(); // получаем результат из подготовленного запроса $rows=$result->num_rows; // получаем кол-во строк в полученном результате из запроса if($rows) { // если строки найдены // такой аккаунт уже найден выводим ошибку; } else { // если строки не найдены // аккаунт не найден, регистрируем; } $result->free(); // очищаем результат $stmt->close(); // закрываем подготовленный запрос $connect->close(); // закрываем подключение ?> // P.S. Я сам только сейчас осваиваю эту функцию и поэтому для усвоения решил написать этот мануал. Поэтому если что то не так - поправьте. Теперь давайте по порядку. Мы можем забиндить (функция bind_param) сколько угодно параметров любого типа данных. Главное чтобы мы их объявляли по порядку исходя из нашего запроса. В $query где login=? мы даем понять коду что мы хотим вместо ? подставить параметры которые мы присвоили ниже функцией bind_param. Таким образом мы можем строить куда более сложные запросы и использовать разные типы данных. Как в примере ниже: <?php $accesslevel=0; $stmt = $mysqli->prepare( "INSERT INTO accounts ( login, password, accesslevel ) VALUES (?,?,?)" ); $stmt->bind_param( "ssi", $_POST['char_name'], $_POST['password'], $accesslevel ); $stmt->execute(); $stmt->close(); ?> Что у нас получается. В наш запрос будут подставлены данные из переменных с тем типом данных которые мы указали перед первой запятой в кавычках. i - int (целое число) s - string (строковое значение) Теперь когда наш школохакер захочет выполнить sql инъекцию система просто не даст ему это сделать, поскольку подготовленный запрос может быть только один. Для подстраховки вы можете так же использовать функцию экранирования mysqli->real_escape_string($string); перед тем как подставить эти данные в запрос, но это для супер параноиков т.к. prepare автоматически экранирует данные. Надеюсь урок будет полезен и расширит ваш кругозор!) Не откажусь от благодарности. Всем спасибо за внимание! Author kickuass Category Инструкции Отправлено 10.01.2018 03:35 Обновлено 10.01.2018 06:11  
  21. И я Вам тоже найти хорошего заказчика.
  22. контакты я уже скинул //added ребятки там бюджет 300 руб, тс хочет за эти деньги рип и чтоб все формы работали.
×
×
  • Создать...