
Быстрый поиск
Введите фрагмент названия статьи для поиска

PCL's JS_Protect 1.0
27.01.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Небольшой класс на PHP для шифрования скриптов JavaScript. Изначально задумывался как дополнительная мера противодействия спамботам, но пока успешно работают более простые методы, и PCL's JS_Protect остался в качестве proof of concept. Класс позволяет шифровать исходные тексты скриптов JavaScript с целью затруднения их автоматического анализа. Любителей всякой малвары и шаровары сразу огорчу: JS_Protect легко снимается вручную при помощи Eval JavaScript Unpacker. Главный недостаток этой защиты в том, что зашифрованный скрипт очень сильно увеличивается в размерах.Code (PHP) : Убрать нумерацию
- // Подключение модуля
- include "js_protect.php";
- // Создание класса
- $js_protect = new JS_Protect;
- // Исходный код скрипта для шифрования
- $js_protect->js_source=$code;
- // Уровень вложенности шифровки. Рекомендуется 1, максимум 2
- $js_protect->code_level=1;
- // Количество внутренних функций. Повышают надежность, но значительно
- // увеличивают размер получаемого кода
- $js_protect->func_level=rand(0,6);
- // Выполнить URL-кодирование защищенного скрипта или нет
- $js_protect->enable_raw=false;
- // Запуститиь процедуру шифрования
- echo $js_protect->protect();
Читать статью целиком »
Просмотров: 4128 | Комментариев: 2

PCL's Mini-Chat 1.0
27.12.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
По просьбам трудящихся выкладываю облегченную версию своего мини-чата. На этом сайте используется похожий скрипт, но он тесно интегрирован с остальными модулями движка и отделить его с сохранением всего функционала не представляется возможным. Скрипт написан практически заново и содержит минимальный набор функций, но его функционал можно легко расширять. Скрипт легко интегрируется в любые сайты, написанные на PHP, генерируемый HTML-код и стили CSS проходят валидацию. Для работы скрипта на сервере требуется PHP версии 4 и выше, база MySQL версии 4 и выше, клиентской части требуется поддержка в браузере пользователя JavaScript. Перед установкой мини-чата и заливкой его на сервер надо настроить данные подключения MySQL-базы (файл chat_engine/chat_config.php):Code (PHP) : Убрать нумерацию
- // Данные для подключения к базе
- $chat_config['mysql_name']="test";
- $chat_config['mysql_host']="localhost";
- $chat_config['mysql_user']="root";
- $chat_config['mysql_password']="";
- // Таблица мини-чата в базе
- $chat_config['mysql_table']="chat_table";
Code (PHP) : Убрать нумерацию
- // Логин админа чата
- $chat_config['admin_login']="admin";
- // Пароль = md5(md5('password'))
- // по умолчанию пароль "password"
- $chat_config['admin_password']="696d29e0940a4957748fe3fc9efd22a3";
Code (PHP) : Убрать нумерацию
- // Количество сообщений, одновременно отображаемых в чате
- $chat_config['message_count']=20;
- // Максимальное количество символов в сообщении
- $chat_config['message_text']=200;
- // Максимальное количество символов в имени
- $chat_config['message_name']=20;
Code (PHP) : Убрать нумерацию
- // Кодовое слово для защиты от спама
- $chat_config['chat_nospam']="NO-MORE-SPAM";
Читать статью целиком »
Просмотров: 6589 | Комментариев: 16

HTTP-заголовки на PHP: Status или HTTP/1.x?
05.12.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Для управления переадресацией, установки ответов сервера и передачи пользовательских заголовков в PHP используется функция Header. C ее помощью можно, например, установить статус ошибки 404, чтобы сообщить браузеру или поисковой системе, что такой страницы сайта больше не существует. В официальной документации такой случай описывается следующим образом:Code (PHP) : Убрать нумерацию
- <?
- header ("HTTP/1.0 404 Not Found");
- ?>
Code (PHP) : Убрать нумерацию
- <?
- Header($_SERVER['SERVER_PROTOCOL']." 404 Not Found");
- ?>
malformed header from script. Bad header=HTTP/1.1 404 Not Found
Хостинговый сервер ведет себя более дружелюбно. Конфигурация: Apache 1.3, PHP версии 4 установлен как CGI, операционная система Linux. При попытке "скачать" скрипт при помощи Download Master, его лог будет вполне ожидаемым, за исключением потери нашего сообщения, что файл не найден Not Found.
Читать статью целиком »
Просмотров: 10758 | Комментариев: 7

Определение браузера посетителя сайта на PHP
16.11.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Для сбора внутренней статистики я написал простую функцию для определения браузеров посетителей сайта. За несколько месяцев активной "дрессировки" в нее были добавлены сигнатуры практически всех популярных браузеров, и вот уже достаточно длительное время она не обновляется. Информация берется из переменной окружения HTTP_USER_AGENT, но так как строка идентификации браузера формируется на стороне пользователя, то она может быть легко подделана. Например, при помощи расширения User Agent Switcher для браузера Firefox или какого-нибудь локального прокси-сервера. Поэтому 100% достоверной эту информацию считать никак нельзя. Но для подавляющего большинства случаев ее будет вполне достаточно. Функция возвращает строку с названием браузера и его версией типа Internet Explorer 6.0, Mozilla Firefox 3.0.14, или же Unknown, если браузер определить не удалось.Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------------
- // Функция определения браузера по данным поля User-Agent
- //-------------------------------------------------------------------
- function GetUserAgent() {
- // Получить переменную окружения
- $str=getenv('HTTP_USER_AGENT');
- // Попытаться определить известные браузеры по сигнатурам
- if (strpos($str,"Avant Browser",0)!==false) {
- return "Avant Browser";
- }
- elseif (strpos($str,"Acoo Browser",0)!==false) {
- return "Acoo Browser";
- }
- elseif (eregi("Iron/([0-9a-z\.]*)",$str,$pocket)) {
- return "SRWare Iron ".$pocket[1];
- }
- elseif (eregi("Chrome/([0-9a-z\.]*)",$str,$pocket)) {
- return "Google Chrome ".$pocket[1];
- }
- elseif (eregi("(Maxthon|NetCaptor)( [0-9a-z\.]*)?",$str,$pocket)) {
- return $pocket[1].$pocket[2];
- }
- elseif (strpos($str,"MyIE2",0)!==false) {
- return "MyIE2";
- }
- elseif (eregi("(NetFront|K-Meleon|Netscape|Galeon|Epiphany|Konqueror|".
- "Safari|Opera Mini)/([0-9a-z\.]*)",$str,$pocket)) {
- return $pocket[1]." ".$pocket[2];
- }
- elseif (eregi("Opera[/ ]([0-9a-z\.]*)",$str,$pocket)) {
- return "Opera ".$pocket[1];
- }
- elseif (eregi("Orca/([ 0-9a-z\.]*)",$str,$pocket)) {
- return "Orca Browser ".$pocket[1];
- }
- elseif (eregi("(SeaMonkey|Firefox|GranParadiso|Minefield|".
- "Shiretoko)/([0-9a-z\.]*)",$str,$pocket)) {
- return "Mozilla ".$pocket[1]." ".$pocket[2];
- }
- elseif (eregi("rv:([0-9a-z\.]*)",$str,$pocket) &&
- strpos($str,"Mozilla/",0)!==false) {
- return "Mozilla ".$pocket[1];
- }
- elseif (eregi("Lynx/([0-9a-z\.]*)",$str,$pocket)) {
- return "Lynx ".$pocket[1];
- }
- elseif (eregi("MSIE ([0-9a-z\.]*)",$str,$pocket)) {
- return "Internet Explorer ".$pocket[1];
- }
- else {
- // Это какой-то неизвестный браузер
- return "Unknown";
- }
- }
Просмотров: 19668 | Комментариев: 16

Определение географического положения по IP-адресу
23.09.2009 | Категория: Web-мастеру и не только | Автор: ManHunter
Определение страны и города посетителя сайта по его IP-адресу применяется во многих случаях. Например, автоматическая подстройка языка отображения сайта, более точный таргетинг рекламных или информационных блоков сайта, разграничение доступа к разделам сайта для разных источников трафика, а также для многих других целей. Наиболее полные базы географического положения IP-адресов в настоящее время предоставляет компания MaxMind в своей базе GeoLite City. Бесплатный вариант базы содержит данные с точностью до города, его можно скачать с сайта в бинарном формате (в распакованном виде около 30 мегабайт) и в формате CSV (в распакованном виде около 130 мегабайт). На сайте также можно оформить подписку на коммерческие варианты базы, содержащие данные с точностью до улиц и обновляющиеся еженедельно, но это только если вашему проекту действительно требуется такая точность. Обновления бесплатной базы выходят регулярно, обычно в первых числах каждого месяца. Пример работы скрипта с коммерческой географической базой можно посмотреть на сайте MaxMind. Там же на сайте можно скачать бесплатные базы стран мира, почтовые индексы некоторых стран и много других полезных данных. К сожалению, самые вкусности предоставляются только за деньги.Доступ к базе осуществляется через API, для некоторых популярных языков программирования они расписаны на сайте. Например, для PHP, кроме собственно самой базы, потребуются еще файлы geoipcity.inc, geoip.inc и geoipregionvars.php. Вызов функции определения положения очень простой:
Code (PHP) : Убрать нумерацию
- <?
- // Подключить класс для работы с базой
- include "geoipcity.inc";
- // IP-адрес для проверки
- $visitor_ip="70.240.110.17";
- // Открыть файл базы
- $gi=GeoIP_open("GeoLiteCity.dat", GEOIP_STANDARD);
- // Получить данные из базы
- $record=GeoIP_record_by_addr($gi,$visitor_ip);
- // Вывести данные на экран
- print_r($record);
- // Закрыть соединение с базой
- GeoIP_close($gi);
- ?>
geoiprecord Object (
[country_code] => US
[country_code3] => USA
[country_name] => United States
[region] => TX
[city] => Houston
[postal_code] =>
[latitude] => 29.7755
[longitude] => -95.4152
[area_code] => 713
[dma_code] => 618
[metro_code] => 618
)
Отдельные параметры можно получить из соответствующих полей объекта. Для более оперативного доступа к данным можно хранить базу в памяти целиком (смотрите примеры в описаниях API на офсайте), но такое расточительное использование ресурсов допустимо только на выделенных серверах.
Читать статью целиком »
Просмотров: 17104 | Комментариев: 16
