Продолжая ковырять CF(мой прошлый пост), я вспомнил про возможность вложения картинок в посты и комментарии. Первой моей мыслью было — "Откуда codeforces.com их берёт?". Варианта было два — сохраняет на свой сервер, либо делает запрос по url. Выложив на бесплатный хостинг тестовую картинку и прикрепив её к посту, а потом удалив с сайта, я увидел, что изображение пропало. Из этого, я сделал вывод, что картинки берутся из url. Написав небольшой скрипт, который обычно используется для ловли cookie, я начал тест. Создав пост с url картинки, который указывал на мой скрипт с параметром GET cook=test(в этот момент файл на сервере содержал "reset"), и попробовав предпросмотр поста — файл на сервере переписался на "test". Получилось! Эта особенность позволяет нам, к примеру считать количество просмотров на посте.
Пример такого счётчика:
Количество просмотров(перезагрузки страниц и дубликаты картинок тоже считаются)
Однако, это может использоваться в дурных целей — например организации DDoS. Злоумышленник может создать коментарий к разбору задач с 10-20 картинками. Тогда, произойдёт (КоличествоОткрывшихРазбор * КоличествоКартинок)(примерно 30000) запросов на серевер.
Буду рад замечаниям и исправлением, как грамматических, так и технических ошибок.
Автокомментарий: текст был обновлен пользователем Proventus (предыдущая версия, новая версия, сравнить).
Подробнее про скрипт:
Скрипт для cookie(php):
<?php
file_put_contents("cookie.txt", $_GET['cook']); // Дословно — положи в файл значение параметра GET
?>
Счётчик(php):
<?php
file_put_contents("counter.txt", intval(file_get_contents("counter.txt")) + 1); // Аналогично первому. intval() — кастует к целому.
?>
Почему не достаточно было посмотреть ведет ли URL картинки в итоговом посте на сервер codeforces?
Вроде делали фичу, что картинки скачиваются, ресайзятся и сохраняются. Но не для того, чтобы защитить сайт от DDoS, а чтобы через год они не ломались из-за говнохостингов.
Спасибо, теперь буду знать.
UPD: проблема уже решена, сейчас все картинки скачиваются на сервер. Старые посты всё ещё работают.
Думаю, загрузка на сервер — не решение проблемы(тратится пространство на сервере). Хотя сейчас, здесь какой-то хитрый механизм. Вместо картинки — скрипт который передаёт её компьютеру клиента. Но счётчик на новых постах не прибавляется — скорее всего картинки скачиваются ещё при сохранении редакции.
Можно реализовать как на некоторых форумах — вместо картинки показывать иконку-ссылку. Но это неудобно. Надо думать над решением проблемы.
Багу из моего прошлого поста до сих пор не пофиксили — а тут почти мгновенно.
Скрипту-счётчику не нашлось применения на CF, но думаю ещё остались форумы и сайты, на которых он будет работать.
Я рад, что CF постоянно улучшается — как сайт и как сообщество. Такое быстрое исправление показывает, насколько администрация заботится о своих пользователях.