Редирект без HTTP Referer

redirect

В различного рода работе (партнерки, лендинги и т.п.) нередко возникает вопрос - как переадресовать пользователя на другую веб-страницу, при этом чтобы его браузер не передавал HTTP Referer. В Интернете существует множество сервисов, которые просто заменяют Referer на свой собственный адрес, но это тоже не всегда желаемо. Так как же получить пустой Referer?

Есть один самый надежный путь:
1. Переадресовываем пользователя на HTTPS-адрес.
2. Далее, если целевой адрес HTTP, то переадресовываем туда.
3. Иначе, переадресовываем на наш HTTP-адрес, а оттуда уже на целевой.

Эта схема гарантированно очистит Referer, однако, она достаточно муторная и иногда требует нескольких редиректов.

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

Читать далее «Редирект без HTTP Referer»

Библиотека для работы с Web на PHP

logo

Давным-давно, когда в моде еще был PHP4, я написал несложную библиотеку на PHP для работы с Web. Эта библиотека была достаточно примитивной, состояла из одного-единственного класса, содержала какие-то ошибки, но, тем не менее, она работала и была вполне юзабельной, поддерживала различные типы прокси-серверов, chunked-содержимое, сжатое содержимое и еще всякие приятные мелочи.

Однако, пришло время расширить функционал библиотеки, а заодно и полностью переписать ее с использованием новых возможностей ООП PHP5.

Итак, вот основные фишки новой библиотеки в сравнении со старой (жирным отмечены самые интересные особенности):

Характеристика Websock2 Websock
PHP4 - +
Не требует cURL + +
HTTP + +
HTTPS + -
GET-и POST-запросы + +
Удобная работа с HTTP-заголовками + -
File uploads + -
Автоматическое отслеживание cookies + -
Автоматическая обработка HTTP-редиректов + -
Установка referer при редиректах + -
Basic-аутентификация + -
Digest-аутентификация + -
Автоматическая basic/digest аутентификация + -
Chunked encoding + +
GZIPped-содержимое + +
Deflated-содержимое + -
HTTP-прокси + +
HTTP-прокси в режиме HTTPS + -
SOCKS4-прокси + -
SOCKS4a-прокси + -
SOCKS5-прокси + +
Аутентификация прокси + +
Цепочки прокси + -
Отслеживание таймаутов операций + -
Сокеты через file и socket_*-функции + +
Перехват HTTP-редиректов + -
Перехват чтения HTTP-заголовков и содержимого + -
Скачивание/загрузка очень больших файлов + -
Сделано по RFC + -
Удобная архитектура, простая расширяемость + -

Как видно из таблицы, новая библиотека содержит намного больше функций, чем старая. Более того, новая библиотека хорошо задокументирована (на английском) и содержит большое количество примеров.

Скачать архив (библиотека + примеры + документация): Websock2
Просмотреть документацию и примеры использования

Пожелания и вопросы можно оставлять в комментариях к посту или на нашем форуме.

На GitHub

Отслеживание прогресса длительных операций в PHP

php

Несмотря на то, что PHP чаще всего используется для создания сайтов и Web-сервисов, ни для кого не секрет, что его можно применять и для других задач, в том числе тех, которые могут выполняться достаточно длительное время. Например, когда вы рассылаете спам вконтактесоздаете дамп базы данных или, скажем, архивируете файлы на сайте, чтобы сделать бэкап, неплохо бы отобразить прогресс текущей операции. Но как это получше сделать? Именно об этом я вам и собираюсь рассказать.

Лично мне пришлось столкнуться с такой задачей, когда я разрабатывал свой PHP Obfuscator версии 2. Процесс обфускации толстых PHP-скриптов (или их большого количества) может оказаться достаточно долгим, и пользователю приятно будет видеть прогресс выполнения работы.

Читать далее «Отслеживание прогресса длительных операций в PHP»

Фишечки PHP, о которых вы, скорее всего, не знали

php

Можете нас поздравить - это двухсотая запись в блоге! А теперь перейдем к статье.

Всем айтишникам известно, что PHP - очень простой язык с низким порогом вхождения. Простой скрипт на нем сможет написать даже тот, кто не особо разбирается в программировании и не знает большинства синтаксических особенностей языка и приемов разработки на нем. Я сейчас занимаюсь написанием новой версии своего старого проекта PHP Obfuscator. Я переписываю его с нуля, чтобы он поддерживал все самые современные фичи последних версий PHP. Старый обфускатор (1.5) уже и в подметки не годится новому, хотя тот еще не дописан. Так вот, когда пишешь что-то подобное, волей-неволей оказываешься вынужден изучать синтаксис языка в мельчайших подробностях и узнаешь все его особенности и возможности. Поэтому я хочу рассказать о таких интересных свойствах языка PHP, о которых большинство людей, которые пишут на нем код, даже не слышали. Это малоизвестные или совсем новые возможности. Может быть, кто-то начнет их применять, потому что какие-то из них могут оказаться реально полезными. Многие вещи из тех, о которых я собираюсь рассказать, упомянуты в документации на PHP, но какие-то совсем не документированы. Какие-то же факты вас, вероятно, даже удивят. Кроме того, я хочу отдельно рассказать про метапрограммирование в PHP.

Читать далее «Фишечки PHP, о которых вы, скорее всего, не знали»

Оптимизация PHP-скриптов: практические советы

coding

В этой статье речь пойдет о том, как оптимизировать какой-нибудь PHP-скрипт, чтобы он выполнялся как можно быстрее, затрачивая как можно меньше процессорного времени. Также я опишу некоторые простые техники оптимизации PHP-кода, которые я лично использовал, и которые принесли ощутимый результат. Я коснусь только вопроса оптимизации непосредственно PHP-кода и языка (без всяких оптимизаций запросов к БД, дополнительных расширений, кэширующих опкоды и т.д.). У меня такая задача появилась после написания одной из первых версий движка для проведения психологических тестов (расположен здесь). Скрипт был размещен на облачном хостинге, где веб-мастер платит деньги соразмерно величине израсходованных ресурсов, поэтому в моих интересах было оптимизировать скрипт таким образом, чтобы максимально снизить нагрузку.

Сразу скажу, что заниматься преждевременной оптимизацией не нужно. Стоит задуматься о переработке кода только в следующих случаях:
[+] ваш скрипт подолгу выполняется (например, делает какие-то занимающие длительное время операции в цикле);
[+] ваш скрипт очень часто выполняется (это был мой случай - иногда в день тест проходили порядка десяти тысяч человек - а это около миллиона обращений к скрипту в сутки);
[+] от используемых скриптом ресурсов зависит то, сколько денег вы платите. Если скрипт выполняется на обычном виртуальном хостинге и не превышает лимит нагрузки на процессор, то, скорее всего, можно и не париться;
[+] вы собираетесь массово распространять скрипт, и его будет использовать в конечном итоге множество людей, которым критично, сколько ресурсов скрипт потребляет.

Читать далее «Оптимизация PHP-скриптов: практические советы»

Minecraft + Tekkit: обзор и собственный независимый сервер

Мы уже говорили об этой игре, правда, немного в другом ключе. Сейчас же речь пойдет о том, как можно получить от этой игрушки массу удовольствия и при этом провести время с пользой (относительной, конечно, но гораздо большей, чем от других компьютерных игр). Кроме того, я расскажу, как настроить (и немного запрограммировать на PHP) собственный сервер с регистрацией и авторизацией пользователей.

Итак, начнем. Для начала поговорим об оригинальном Minecraft'е. Для совсем незнающих - это игра жанра "песочница". Базовый принцип - ломать и строить блоки, а также собирать из одних предметов другие. Minecraft из коробки предоставляет не так-то много возможностей для игрока, и всю суть игры можно описать буквально в двух словах.

Читать далее «Minecraft + Tekkit: обзор и собственный независимый сервер»

Небольшие новости

Привет всем нашим читателям! Мы решили ради интереса на какое-то время попробовать себя в области ревьюинга чужоко кода.

Более простыми словами - вы присылаете нам на письмо с темой "Код на ревью", в которое вкладываете свой более-менее логически завершенный и отформатированный исходник размером не более 10 килобайтов и небольшое пояснение, что этот код призван делать. Мы ваши исходные коды детально изучаем и раз в одну-две недели создаем пост с ревью (обзорами) самых интересных присланных нам исходников. Также можете указать свой ник или еще какие-то данные в письме, если желаете, чтобы мы написали их в посте. E-mail адреса разглашать мы, разумеется, не будем. Пока что принимаются языки PHP, Perl, C++ (C), MASM32.

Хотите узнать, что у вас не очень хорошо написано и как бы сделать это получше и оптимальнее? Не постесняйтесь воспользоваться нашей помощью! Ну а совсем хорошие и красивые сорсы мы будем выкладывать как образец для подражания. А мы для себя отметим, приживется ли такая рубрика.

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

Все новое — хорошо забытое старое


Мы с Kaimi решили привести информацию на блоге в более актуальный вид, в связи с этим:

[+] Обновлен до версии 1.3 Proxy Checker Lite (теперь сорсы прилагаются).
[+] Обновлен и ускорен KWM-брутфорс
[+] Перезалита База ВКонтакте
[+] Приведен в рабочее состояние VK Link Checker
[+] Обновлен + выложен новый сорс скрипта People Search (база данных не пополнялась, просто скрипт сохранен в рабочем состоянии)
[+] Блог доступен по протоколу https (пока не очень удачная навигация)
[+] Страница 404 стала более разнообразной (F5)

Надеемся, каждый найдет для себя что-то интересное среди этих апдейтов.

PHP Generic Eval Unpacker

В предыдущей статье dx рассказывал о ручной методике снятия типовой и довольно распространенной защиты PHP-скрипта. Если проанализировать наиболее часто встречающиеся типы защиты (например, в разделе запросов на расшифровку на Античате), то можно заметить, что в большинстве случаев защита построена на максимальном сохранении исходного кода скрипта и использовании функции eval в конечном счете. Снимать такую защиту очень просто, но слегка занудно, поэтому я решил написать примитивную программу, которая осуществляет сие действо автоматически.
Чтобы пост не был унылым, я кратенько опишу, что из себя представляет анпакер. Итак, из-за своей лени я решил использовать php-cli, расширение для php (которое перехватывает eval) и сделать к этому простой GUI. Результирующая программа выглядит следующим образом:


Читать далее «PHP Generic Eval Unpacker»

Прокси-ботнет из роутеров

В 2010 году, в период тестирования SSH Bruteforce'a одним хорошим человеком, я узнал, что на Европейских диапазонах IP-адресов попадается приличное количество SSH-доступов к всевозможным роутерам. Наиболее частыми среди них оказались роутеры с MIPS-процессором и известной кастомной прошивкой DD-WRT.
Казалось бы, особой пользы с них не извлечь, но ещё тогда был предложен вариант использования их в качестве прокси. До тестирования концепции на тот момент руки не дошли, а сегодня я как раз разбирал старые архивы и решил попробовать собрать рабочий пример под подобный роутер. Благо, у меня валяется парочка таких. Стоит отметить, что поднятие прокси-серверов на роутерах также обладает всем известной спецификой, которая заключается в том, что у провайдеров часто используются динамические IP, поэтому, естественно, прокси-сервер должен сообщать свой текущий IP некой веб-админке.
Читать далее «Прокси-ботнет из роутеров»