Category Archives: PHP

Добавляем счетчик в footer MediaWiki

Чтобы добавить счетчик, получаем его код, и пишем его в файл (например, count.php), кодировку файла делаем UTF-8.
Заливаем файлик в папку skins сайта.
В файле шаблона, Vector.php в моем случае, находим строку:
<ul id=»footer-icons» class=»noprint»>
После нее подключаем наш файл count.php. У меня получилось так:

При обновлении с версии 1.23.* до 1.24 произошли изменения в темах. Теперь, чтобы добавить счетчик в тему Vector, необходимо скачать эту тему для версии mediawiki 1.24 (https://www.mediawiki.org/wiki/Special:SkinDistributor/Vector), распаковать её в папку skins, файл count.php закинуть в директиву skins/Vector и добавить туже строку что и раньше в файл VectorTemplate.php.

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

3D-фотосъемка и создание вращающихся 3D-изображений (виртуальных 3D-объектов, VR). Рекомендации по работе с поворотным столом, освещению и и обработке отснятого фотоматериала

Работы проводятся в два этапа:

1й этап — фотосъемка предмета на поворотном столе:

Фотографируемый предмет вы помещаете в центр диска поворотного стола (подробнее о поворотных столах для 3D-фотосъемки).

Фотокамеру устанавливаете на штатив, настраиваете оптимальное освещение (см. рекомендации по освещению при съемке).

Отличные результаты даёт фотосъёмка в лайткубе — в нём проще освещать предмет, тени хорошо рассеиваются. На фоне белых стенок лайткуба меньше заметны края белого поворотного круга. С лайткубом можно применять любые осветители: студийные или компактные вспышки, лампы постоянного света (люминесцентные, светодиодные, накаливания), в любом случае результат будет хороший.

1

scheme-3_

Фокусное расстояние объектива устанавливается в интервале от 50мм до 120мм. Чтобы передать правильные пропорции и форму фотографируемого предмета, расстояние от предмета до фотокамеры должно быть больше, чем размеры самого предмета (не менее, чем в 3-5 раз). Желательно, чтобы в кадр не попадал передний край диска поворотного стола, и также боковые края диска слева и справа от предмета. Если в кадре не будет ничего постороннего, и экспозиция будет настроена правильно, то вам не потребуется трудоёмкая обработка отснятого фотоматериала (либо обработка будет очень простая).

Затем фотографируете предмет при разных углах поворота диска. В результате 3D-фотосъемки вы получаете серию однотипных фотоизображений предмета с разным углом поворота относительно камеры.

series

Характер вращения предмета
Вращение может быть полным (на 360 градусов) или частичным (180 градусов — качание предмета влево-вправо, ‘ping-pong’):

Вращение на 360 градусов:


Здесь 36 секторов на полный оборот

Вращение на 180 градусов:


Здесь 19 секторов на пол-оборота

2й этап — создание вращающихся 3D-фотоизображений:

Полученные в результате фотосъемки серии фотоизображений обрабатываются одним из нескольких способов:

1) Javascript (jQuery)
Фотоизображения отображаются в виде бесконечного «мультфильма» с помощью специального скрипта-прокрутчика, установленного на сайте.

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

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

2) Сайт MEGAVISOR.COM
MEGAVISOR.COM — сайт для автоматического создания интерактивных изображений. Этот сайт идеально подходит для быстрого получения 3D-изображений из серии снимков.

Процесс очень простой: вы загружаете отснятую вами серию фотографий на сайт MEGAVISOR, и сразу же получаете готовое вращающееся 3D-изображение (и ссылку для вставки на ваш сайт). Чтобы 3D-изображение появилось на вашем сайте, вам достаточно просто вставить на страницу вашего сайта ссылку на это 3D-изображение — точно так же, как вставляются ссылки на видео с сайта YouTube.

Преимущество сайта MEGAVISOR: от вас не требуется никаких специальных знаний и программ — MEGAVISOR всё сделает сам. А посетители увидят на вашем сайте готовые интерактивные 3D-изображения предметов.

Инструкция по созданию вращающегося 3D-изображения с помощью Мегавизор

3) Flash-анимация
Преимущество формата Flash — файл получается компактный, лёгкий, поэтому изображение быстрее загружается. Формат Flash позволяет наложить на вращающееся изображение кнопки управления вращением, сделать много других полезных опций.

Фотоизображения монтируются во Flash-ролик (SWF) с помощью специализированных программ. Готовый 3D-ролик представляет собой один файл SWF, готовый для загрузки на сайт.

Этот формат имеет ограничение: Flash не поддерживают операционные системы многих мобильных устройств.

Для создания качественных 3D-роликов в формате Flash мы рекомендуем программу Object2VR. Эта программа имеет множество удобных опций и настроек: настраиваются элементы управления вращением, характер и скорость вращения, размер и качество изображения, и т.д.

4) GIF-анимация
Преимущество формата GIF — он без проблем отображается на всех мобильных устройствах. Фотоизображения монтируются в анимированную GIF-картинку с помощью специализированных программ. Готовый 3D-ролик представляет собой один файл GIF, готовый для загрузки на сайт.

Этот формат имеет ограничение: не поддерживается управление вращением (вращение только безостановочное и только в одном направлении).

Для создания 3D-роликов в формате GIF (GIF-анимация) существует несколько специальных программ, например:
UnFREEz (очень простая в работе бесплатная программа),
360° Product Viewer,
WebRotate 360 Product Viewer,
— Easy GIF Animator,
— Babarosa Gif Animator,
— Advanced GIF Animator и другие.
Все эти программы можно найти и скачать в интернете. Освоить работу с программами GIF-анимации совсем несложно. Освоив технологию, можно быстро наполнить сайт вращающимися изображениями товаров.

5) Формат HTML5. Программа 360° Product Viewer (очень удобная и простая в освоении!). Создание вращающихся 3D-изображений в формате HTML5 и GIF

Ссылка на сайт производителя (компании YoFLA):
http://www.yofla.com/3d-rotate

Создание ролика в формате HTML: Программа 360° Product Viewer автоматически создаёт набор папок с файлами, которые достаточно вставить на сайт, сделать ссылку на файл index.html и вы получите на экране вращающееся изображение предмета. Есть включение/выключение кнопок управления вращением, настройка скорости вращения, зумирования и т.д. Можно вставлять свой логотип в ролик. Пользоваться этой программой очень просто, единственный недостаток: программа не русифицирована (тексты на английском), но всё интуитивно понятно. Демо-версия 360° Product Viewer по умолчанию вставляет в окошко с изображением небольшой логотип «YoFLA». Есть несложный способ удаления этого логотипа, при желании можно подставить вместо него собственный текст. Преимущества формата HTML: вращение без проблем отображается на любых мобильных устройствах!

Создание ролика в формате GIF: Программа 360° Product Viewer создаёт файл GIF-анимации, сразу же готовый для загрузки на сайт. Демо-версия не вставляет логотип производителя в GIF-ролик, поэтому можно спокойно пользоваться данной программой без регистрации. Очень просто и удобно работать!

См. подробное описание программы 360° Product Viewer!

Программу 360° Product Viewer можно бесплатно загрузить с сайта:
http://www.yofla.com/3d-rotate/download/

6) Javascript + XML с помощью программы » WebRotate 360 Product Viewer».
Создание вращающихся 3D-изображений на Javascript (а также в формате GIF)

Программа WebRotate 360 Product Viewer отличается разнообразием настроек, предусмотрена пакетная обработка изображений (ретушь, коррекция, обрезка и т.д.).

Скачайте Руководство пользователя к программе WebRotate 360 Product Viewer (на английском): webrotate360.pdf

Программу WebRotate 360 Product Viewer можно бесплатно загрузить с сайта:
http://www.webrotate360.com/360-product-viewer.html

В результате:
Независимо от выбранного вами способа анимации, зрители увидят на вашем сайте анимированное изображение предмета с правильным равномерным вращением.

Подробнее о поворотных столах для 3D-фотосъемки: конструкция, грузоподъемность, варианты разметки и т.д.

Применение дополнительного фона:

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

jewellery_Если же предмет крупный, то в кадр попадет и край диска поворотного стола, и окружающее пространство. В этом случае за диском поворотного стола устанавливается фон. Например, типовой бумажный фотографический фон, лист белого пластика или ватмана.

4 3

Установка света при 3D-фотосъемке предметов на поворотном столе

Освещение настраивается таким образом, чтобы сделать фон чисто-белым и замаскировать границу диск-фон.

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

Обратите внимание: если фотографируемый предмет стоит в центре поворотного круга, он не попадает в пересвеченное световое пятно (на схеме желтый цвет применён условно):

scheme-3_Хороший способ получить ярко-белый фон за предметом — вместо непрозрачного фона установить позади поворотного стола большой софтбокс (или просветовый экран с источником света небольшой мощности):

sm-3-1+softbox_Такая схема освещения поможет вам сделать тень от предмета на поворотном столе практически незаметной (вид сверху):

LightingSetupЭффективно устраняет ненужные тени от предмета кольцевой осветитель (вспышка), закрепляемый на объективе фотокамеры:

sm+cam

 sm+cam+table_

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

halo+camera

halo+rings

Вместо кольцевой вспышки можно применить насадку-рассеиватель, надеваемую на обычную накамерную выспышку. Например, кольцевой рассеиватель марки O-Flash:

o-flash-1

o-flash-4

Подробнее о поворотных столах для 3D-фотосъемки: конструкция, грузоподъемность, варианты разметки и т.д.

Применение поворотного стола M с лайт-кубом (фотобоксом)

Отличные результаты можно получить, поместив поворотный стол внутрь лайткуба — вы сможете гибко управлять характером освещения и успешно бороться с ненужными тенями:

lightbox+sm-1_

LightingSetup

Применение поворотного стола M с люминесцентными или светодиодными осветителями

Можно установить вокруг поворотного стола осветительные приборы с большими светящимися поверхностями. Например, осветители RED Devil:

sm-60+rdl_

Нюансы работы с поворотным столом:

Ось вращения предмета во время съемки должна оставаться неизменной. Поворотный стол ни в коем случае не должен сдвигаться при вращении диска. Поэтому под основу поворотного стола устанавливаем плохо скользящие «прилипучие» силиконовые ножки. Если поверхность очень гладкая, и стол при вращении всё-таки проскальзывает по ней, вы можете во время съемки дополнительно фиксировать основу поворотного стола универсальными зажимами или струбцинами. Например, так:

sm-fix_

Подробнее о ручных поворотных столах:

О недорогих ручных поворотных столах для 3D-фотосъемки: конструкция, грузоподъемность, варианты разметки и т.д.

Цены на поворотные столы для 3D-фотосъемки с вращением рукой (модель M)

Подробнее о всех моделях поворотных столов:

Все варианты поворотных столов (полуавтоматические, автоматические, ручные)

Все цены на поворотные столы для 3D-фотосъемки, 3D-сканирования и видеосъемки (полуавтоматические, автоматические, ручные)

Рекомендации по программному обеспечению для получения вращающихся 3D-изображений предметов:

Для создания качественных 3D-роликов в формате Flash мы рекомендуем использовать программу Object2VR (см. описание и рекомендации по программе Object2VR).

Для создания 3D-роликов в формате GIF рекомендуем вам попробовать программу UnFREEz (см. описание и рекомендации по программе UnFREEz).

Рекомендуем вам также автоматические поворотные столы для предметной 3D-фотосъёмки и светоотражающие фоны

Автоматические поворотные столы для 3D-фотосъемки большой грузоподъемности (модель SA)Автоматические и ручные поворотные столы для 3D-фотосъемки предметов:

Фотографические фоны со светоотражающим эффектом для предметной фотосъемки (бестеневые фоны)

Фотографические фоны со светоотражающим эффектом для предметной фотосъемки

Источник: http://a-r-s.ru/tables/advices.htm#light

 

3d визуализация,3d моделирование,3d визуализация интерьеров,3d визуализация экстерьеров,3d visualization,3d фрилансер,3d freelancer,3d фриланс,3d freelance,визуализация,visualization, 3d визуализация интерьеров,3d визуализация экстерьеров, 3d визуализация моделей,Услуги по 3d визуализации

Визуализация интерьеров и экстерьеров (3D дизайн)

Как заменить однородный фон прозрачным с помощью Imagemagick

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

Часто такая фича нужна для фотографий товаров в интернет-магазине, картинок, которые накладываются на корпоративный фон и других фоток, не портящих дизайн сайта. Вырезать каждую фотку вручную фотошопом довольно грустно, но есть php-методы, с помощью которых это можно «поставить на поток».

ImageMagic

Как это работает

Функция попиксельно ищет где заканчивается однородный цвет. После того, как все координаты вычислены — функция просто вырезает все, что находится снаружи.

Замена белого фона прозрачным возможна только если выходная картинка сохранена в формате PNG или GIF. Подойдут и новые форматы WebP и BPG с поддержкой прозрачности.

ImageMagic

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

Замена фона, пример на bash

Для удаления фона в ImageMagick есть оператор -trim. Он обрезает картинку по заданному цвету:

Перед обрезкой стандартный JPEG конвертируется в PNG. В lossy JPEG’е фон не будет однородным. Соседние пиксели обычно незначительно отличаются по цвету. Например: белый, светло-серый, светло-голубой. Аргумент fuzz устанавливается в значение >0, чтобы разрешить функции считать соседние цвета одинаковыми.

Замена фона, пример на PHP

Пример обрезки белого фона на картинке (входной файл: image.jpg, выходной — trimmed.png):

Оператор borderImage рисует вокруг картинки рамку 1х1 в цвет фона, после чего оператор trimImage обрезает ее вместе с рамкой.

ImageMagic2

Внимание! Оператор trimImage работает, если Imagick скомпилирован с ImageMagick версии не ниже 6.2.9.

Как сделать фон однородным

Похожим способом можно заменить неоднородный фон на однородный при конвертации из JPEG в PNG:

В этом примере — каждый пиксель фона зальется одним цветом — пикселя с координатами (0;0).

ImageMagic3

Много примеров работы кода

Как работает обрезка фона с помощью библиотеки Imagick можно проверить тут. Онлайн-инструмент заменяет любой однородный фон на прозрачный, как с этим яблочком. Вот пример с черным фоном и сложными формами для трима (волосы). Конечно, может оставаться небольшая белая рамка. Но выглядит довольно прилично. Даже кошачьи усы вырезает на ура.

Конспект

 

  1. Для удаления однотонного фона с картинки можно использовать оператор
    -trim или команду trimImage.
  2. Проверить как работает удаление фона с помощью Imagick можно тут.
  3. Выходную картинку нужно сохранить в любом из форматов с поддержкой прозрачности: PNG, GIF, WebP, BPG.

Источник: http://habrahabr.ru/company/io/blog/261529/

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

10 ключевых функций ImageMagick

В двух словах

  1. ImageMagick — консольный графический редактор, работающий практически со всеми существующими форматами графики.
  2. Предоставляет максимум функций для обработки картинок — ресайз, конвертация, рисование, анимация, специальные эффекты и т.д.
  3. Сложноват для новичков.

ImageMagick – незаменимый бесплатный инструмент для создания, конвертации и редактирования картинок. Особенно удобно применять для автоматизации.

Форматы

ImageMagick работает более чем со 100 форматами изображений, в том числе и с основными веб-форматами — JPEG, SVG, GIF, WebP и PNG.

Установка

Все устанавливается из пакетов :

При этом станут доступны 7 утилит: display, animate, identify, convert, montage, mogrify и composite.

Далее пройдемся по самым полезным и популярным свойствам ImageMagick.

1. Конвертация

С помощью функции convert Вы можете конвертировать картинки из одного формата в другой. Простейший пример — переход от JPEG к PNG:

2. Ресайз

Уменьшайте, увеличивайте картинки, задавая необходимый размер.

3. Рисование

Добавляйте к картинкам текст, геометрические фигуры, линии, кривые. Например, простая фигура — белый круг на голубом фоне:

4. Анимация

Вы можете создать GIF-анимацию — несколько картинок в рамках одного файла, сменяющие друг друга через заданный промежуток времени. Выполняется также с помощью утилиты convert. Ниже пример простой закольцованной анимации, где каждая новая картинка сменяет предыдущую:

Правильно комбинируя картинки, можно создавать эффект движения и даже короткие видео.

5. Специальные эффекты

Размытие и увеличение резкости — неотъемлемые части редактирования. Размытие может показаться лишней функцией, пока не понадобится создать фон или тени.

Можно также «размывать» четкие границы геометрических фигур. Параметр -blur 0x8 определяет степень размытия.

6. Прозрачность

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

7. Обрезка и границы

Обрезайте картинки, добавляйте рамки и границы. Это один из способов изменять размер картинки, не искажая качества.

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

8. Комбинирование

Можно соединять изображения — накладывать одно другое или помещать рядом — склеивать.

Накладывать одну картинку поверх другой можно с помощью утилиты composite. Совмещать можно даже картинки разных форматов:

9. Текст и комментарии

Создание подписей, или добавление текста на картинки — наверное наиболее часто используемая функция ImageMagick. Она также одна из самых простых. Создание простейшей подписи из одного слова с выбором цвета фона и цвета текста:

10. Манипуляции

От простых манипуляций — поворотов, масштабирования и сдвига фрагментов, до сложных — искажения перспективы, скручивания и эффекта просмотра через объектив камеры. Можно, например, деформировать какой-либо фрагмент картинки, указав координаты точек, которые необходимо переместить:

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

Источник: https://onthe.io/learn/ru/category/graphic/10-%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D1%85-%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9-ImageMagick

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Собственный хостинг репозиториев с помощью GitLab

Любая команда разработчиков рано или поздно сталкивается с необходимостью использования системы контроля версий. Иначе отслеживать изменения в коде проектов становится сложно. Причем чем крупнее проекты и команды — тем сложнее. Сегодня систем контроля версий существует великое множество, одна лучше другой. Так что же выбрать? Наша команда остановилась на GitLab.

gitlab-projectGitLab — это веб-приложение для хостинга исходного кода проектов, основанное на системе контроля версий Git. Своим функционалом GitLab очень напоминает GitHub, однако заточен под командную работу, в то время как GitHub отдает предпочтение индивидуальной работе.

Страница прав доступа к проекту

Страница прав доступа к проекту

Техническая справка

Git — распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux. Git используют такие проекты, как Chromium, jQuery, PHP, MediaWiki и прочие. Программа является свободной и выпущена под лицензией GNU GPL версии 2.

Статья о Git на Википедии

GitLab существует как в виде SAAS — веб-сайта с открытой регистрацией, так и в качестве индивидуального решения — GitLab Community Edition, которое можно установить на свой сервер и настроить под собственные нужды. Процесс установки достаточно долгий и требует root-доступа к серверу. Для стабильной работы GitLab требует от сервера как минимум двухъядерный процессор и 2 Гб ОЗУ. Такая конфигурация обеспечит быструю работу приложения и поддержку до 500 пользователей. GitLab поддерживает множество различных дистрибутивов Linux, но инструкция по установке расчитана на Debian/Ubuntu.

Установка

Установку можно разбить на несколько этапов:

  • установка необходимых системных утилит
  • установка Ruby
  • создание пользователя для SSH-подключений к GitLab
  • установка и настройка GitLab Shell
  • установка и настройка базы данных
  • установка и настройка самого GitLab
  • установка и настройка Nginx

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

Установка необходимых системных утилит

Для установки и настройки всех компонент, необходимых для работы GitLab, нам понадобятся: утилита sudo, набор библиотек для компиляции Ruby, актуальная версия Git и почтовый сервер.

Перед установкой каких-либо пакетов через утилиту apt-get, следует обновить список источников и существущие пакеты, выполнив в консоли такие команды:

Здесь и далее команды нужно выполнять от имени пользователя root.

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

Теперь установим библиотеки для компиляции Ruby:

Убедитесь, что на сервере установлен git, и его версия не ниже 1.7.10:

Если установлена устаревшая версия, нужно удалить ее:

Если git не установлен либо был удален предыдущей командой, нужно скачать и скомпилировать его:

Обратите внимание на версию git. На момент написания это версия 1.9.0. Уточнить, какая версия git является актуальной, можно на официальной странице проекта.

И наконец, если не установлен почтовый сервер, вот команда для его установки:

В процессе установки почтовый сервер попросит себя сконфигурировать. Для этого нужно выбрать на появившемся экране пункт «Internet Site» и указать правильное имя хоста — IP-адрес или доменное имя.

Установка Ruby

Для работы GitLab требуется Ruby 2.1.6. Если у вас уже установлен Ruby 1.8, его необходимо удалить перед установкой новой версии:

Теперь скачаем и скомпилируем Ruby 2.1.6:

Помимо самого Ruby нам понадобится библиотека bundler:

Создание пользователя для SSH-подключений к GitLab

Создадим для SSH-подключений пользователя git:

Установка и настройка GitLab Shell

GitLab Shell — это отдельная утилита для управления SSH-доступом и репозиториями. Для ее установки необходимо выполнить следущие команды:

После выполнения команд нужно отредактировать файл config.yml. В нем в настройке gitlab_url нужно указать будущий адрес GitLab, например:

Теперь устанавливаем и инициализируем утилиту:

Установка и настройка базы данных

Для работы GitLab требует базу данных. Разработчики GitLab рекомендуют использовать PostgreSQL, однако поддержка MySQL также присутствует. Для установки PostgreSQL, выполните:

Для установки MySQL:

Во время установки необходимо будет придумать и ввести пароль root пользователя MySQL.

Теперь нужно создать саму базу данных для работы GitLab. Для этого нужно выполнить несколько SQL-запросов. Начнем с PostgreSQL. В командной строке это делается так:

Теперь MySQL (не забудьте вместо $password поставить хороший, крепкий пароль):

 

Установка и настройка самого GitLab

Этот этап самый сложный, поэтому будем выполнять его пошагово. Первый шаг — загрузка исходников GitLab. Делается это через git и выглядит примерно вот так:

 

Обратите внимание на флаг -b 6-8-stable во второй команде. На момент написания этой статьи актуальным является GitLab версии 6.8. Однако рекомендую перед установкой уточнить эту информацию на официальном сайте проекта и подставить в эту команду правильную версию. Кроме того, вместе с GitLab периодически обновляется и GitLab Shell, это также нужно учесть.

Второй шаг — развертывание и настройка. Сюда входят создание необходимых файлов конфигурации, создание необходимых приложению папок и установка прав доступа на уже существующие папки:

После выполнения команд нужно отредактировать файл config/gitlab.yml. В нем нужно указать следующие настройки:

Настройка Раздел Описание Пример
host gitlab Cюда надо вписать адрес, по которому будет доступен GitLab gitlab.example.com
email_from gitlab Тут нужно прописать email, с которого будет отправляться почта gitlab@example.com
support_emal gitlab Адрес тех. поддержки. Если его закомментировать, будет использован адрес из email_from support@example.com
bin_path git Установите значение /usr/local/bin/git, если компилировали git вручную на первом этапе установки /usr/local/bin/git

E-mail адрес из email_from также нужно установить в конфигурации git:

Теперь нужно сконфигурировать базу данных. Для PostgreSQL:

Для MySQL:

Не забудьте указать в файле config/database.yml логин и пароль для доступа к вашей базе данных. Следущий шаг — установка зависимостей. Делается это одной простой командой. Если вы используете PostgreSQL:

Если используете MySQL:

Теперь нужно инициализировать приложение. Сюда входят инициализация базы данных и установка ротации логов:

Теперь осталось проверить статус приложения и запустить его. Проверяется статус такой командой:

Корректно установленное приложение должно выдавать примерно следущее:

Страница файлов проекта в GitLab

Страница файлов проекта в GitLab

gitlab-env-infoЕсли все хорошо — приложение можно запускать:

Установка и настройка Nginx

Последний этап установки GitLab — установка и настройка сервера Nginx. Установка выглядит так:

Копируем конфигурационный файл Nginx из дистрибутива GitLab:

Не забудьте указать правильный адрес вашего GitLab в файле /etc/nginx/sites-available/gitlab в настройке server_name раздела server. Мне также пришлось указать IP-адрес сервера в настройке listen раздела server. Теперь нужно перезапустить сервер:

Готово! Установка и настройка GitLab окончена. Убедитесь, что все правильно настроено, выполнив команду:

Если все пункты списка зеленые — значит, приложение установлено и настроено верно и можно начинать работу. Для этого зайдите по адресу приложения и авторизуйтесь, используя данные по умолчанию:

Не забудьте сменить пароль после авторизации! Приятной работы!

P.S. Еще более подробно написано о настройке gitlab в статье: https://www.linode.com/docs/applications/development/how-to-install-and-configure-gitlab-on-ubuntu-14-04-trusty-tahr

 

Источник: http://popel-studio.com/blog/article/sobstvenniy-hosting-repozitoriev-s-pomoshyu-gitlab.html

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Сессии. Подробное описание работы и объяснение механизма

Введение
Как устроены, и как работают сессии?
Область применения.
Возможные проблемы и их устранение.
Безопасность
Дополнительная информация:
Пример авторизации с помощью сессий
ОПС! Очень Полезные Ссылки:
Comments

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

Подробно расписывать нужду в таком механизме я не буду. Это такие хрестоматийнык случаи, как корзина покупок в е-магазине, авторизация, а так же, и не совсем тривиальные проблемы, такие, например, как защита интерактивных частей сайта от спама.

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

Как устроены, и как работают сессии?
Для начала надо как-то идентифицировать браузер. Для этого надо выдать ему уникальный идентификатор и попросить передавать его с каждым запросом. Стыдно признаться, но когда я впервые узнал о сессиях, я думал, что это какой-то особый механизм, некий новый способ общения браузера с сервером — «сессии». Что идентификатор сессии передается каким-то особым образом. Разочарование было жестоким.
Сессии используют стандартные, хорошо известные способы передачи данных. Собственно, других-то просто и нет.
Идентификатор — это обычная переменная. По умолчанию ее имя — PHPSESSID.
Задача PHP отправить ее браузеру, чтобы тот вернул ее со следующим запросом. Из уже упоминавшегося раздела FAQ ясно, что переменную можно передать только двумя способами: в куках или POST/GET запросом.
PHP использует оба варианта.
За это отвечают две настройки в php.ini:
session.use_cookies — если равно 1, то PHP передает идентификатор в куках, если 0 — то нет.
session.use_trans_sid если равно 1, то PHP передает его, добавляя к URL и формам, если 0 — то нет.
Менять эти и другие параметры сессий можно так же, как и другие настройки PHP — в файле php.ini, а так же с помощью команды ini_set() или в файлах настройки веб-сервера

Если включена только первая, то при старте сессии (при каждом вызове session_start()) клиенту устанавливается кука. Браузер исправно при каждом следующем запросе эту куку возвращает и PHP имеет идентификатор сессии. Проблемы начинаются, если браузер куки не возвращает. В этом случае, не получая куки с идентификатором, PHP будет все время стартовать новую сессию, и механизм работать не будет.

Если включена только вторая, то кука не выставляется. А происходит то, ради чего, в основном, собственно, и стоит использовать встроенный механизм сессий. После того, как скрипт выполняет свою работу, и страница полностью сформирована, PHP просматривает ее всю и дописывает к каждой ссылке и к каждой форме передачу идентификатора сессии. Это выглядит примерно так:
<a href="/index.php">Index</a> превращается в
<a href="/index.php?PHPSESSID=9ebca8bd62c830d3e79272b4f585ff8f">Index</a>
а к формам добавляется скрытое поле
<input type="hidden" name="PHPSESSID" value="00196c1c1a02e4c37ac04f921f4a5eec" />
И браузер при клике на любую ссылку, или при нажатии на кнопку в форме, пошлет в запросе нужную нам переменную — идентификатор сессии!
По очевидным причинам идентификатор добавляется только к относительным ссылкам.

Теоретически, в наших с вами самодельных сессиях на куках и базе, можно самому, руками приписать ко всем ссылками передачу ид — и тогда наши собственные сессии будут работать независимо от кук. Но, согласитесь — приятнее, когда эту работу делает кто-то другой? 😉

По умолчанию в последних версиях PHP включены обе опции. Как PHP поступает в этом случае? Кука выставляется всегда. А ссылки автодополняются только если РНР не обнаружил куку с идентификатором сессии. Когда пользователь в првый раз за этот сеанс заходит на сайт, ему ставится кука, и дополняются ссылки. При следующем запросе, если куки поддерживаются, PHP видит куку и перестает дополнять ссылки. Если куки не работают, то PHP продолжает исправно добавлять ид к ссылкам, и сессия не теряется.
Пользователи, у которых работают куки, увидят длинную ссылку с ид только один раз.

Фух. С передачей идентификатора закончили.
Теперь осталось привязать к нему файл с данными на стороне сервера.
PHP это сделает за нас. Достаточно просто написать

И PHP запишет в файл, связанный с этой сессией, переменную test.
Здесь очень важное замечание.
Массив $_SESSION — особенный.
В нем, собственно, и находятся переменные, которые мы ходим сделать доступными в различных скриптах.
Чтобы поместить переменную в сессию, достаточно присвоить ее элементу массива $_SESSION.
Чтобы получить ее значение — достаточно обратиться к тому же элементу. Пример будет чуть ниже.

Cборкой мусора — удалением устаревших файлов PHP тоже занимается сам. Как и кодированием данных и кучей всяких других нужных вещей. В результате этой заботы работа с сессиями оказывается очень простой.
Вот мы, собственно, и подошли к примеру работы сессий.
Пример очень маленький:

Мы проверяем, есть ли у нас в сессии переменная counter, если нет, то создаем ее со значением 0, а дальше выводим ее значение и увеличиваем на единицу. Увеличенное значение запишется в сессию, и при следующем вызове скрипта переменная будет иметь значение 1, и так далее.
Все очень просто.

Для того, чтобы иметь доступ к переменным сессии на любых страницах сайта, надо написать ТОЛЬКО ОДНУ(!) строчку в самом начале КАЖДОГО файла, в котором нам нужны сессии:

И далее обращаться к элементам массива $_SESSION. Например, проверка авторизации будет выглядеть примерно так:

Удаление переменных из сессии.
Если у вас register_globals=off, то достаточно написать

Если же нет, то тогда рядом с ней надо написать

Область применения.
Очень важно понимать, для чего сессии стоит использовать, а для чего — нет.

Во-первых, помните, что сессии можно применять только тогда, когда они нужны самому пользователю, а не для того, чтобы чинить ему препятствия. Ведь он в любой момент может избавиться от идентификатора!
Скажем, при проверке на то, что заполняет форму человек, а не скрипт, пользователь сам заинтересован в том, чтобы сессия работала — иначе он не сможет отправить форму! А вот для ограничения количества запросов к скрипту сессия уже не годится — злонамеренный скрипт просто не будет возвращать идентификатор.

Во-вторых. Важно четко себе представлять тот факт, что сессия — это сеанс работы с сайтом, так как его понимает человек. Пришел, поработал, закрыл браузер — сессия завершилась. Как сеанс в кино. Хочешь посмотреть еще один – покупай новый билет. Стартуй новый сеанс. Этому есть и техническое объяснение. Гарантированно механизм сессий работает только именно до закрытия браузера. Ведь у клиента могут не работать куки, а в этом случае, естественно, все дополненные идентификатором ссылки пропадут с его закрытием.
Правда, сессия может пропасть и без закрытия браузера. В силу ограничений, рассмотренных в самом главном разделе этого FAQ, механизм сессий не может определить тот момент, когда пользователь закрыл браузер. Для этого используется таймаут – заранее определенное время, по истечении которого мы считаем, что пользователь ушел с сайта. По умолчанию этот параметр равен 24 минутам.
Если вы хотите сохранять пользовательскую информацию на более длительный срок, то используйте куки и, если надо — базу данных на сервере. В частности, именно так работают все популярные системы авторизации:
— по факту идентификации пользователя стартует сессия и признак авторизованности передается в ней.
— Если надо «запомнить» пользователя, то ему ставится кука, его идентифицирующая.
— При следующем заходе пользователя на сайт, для того, чтобы авторизоваться, он должен либо ввести пароль, либо система сама его опознает по поставленной ранее куке, и стартует сессию. Новую сессию, а не продолжая старую.

В-третьих, не стоит стартовать сессии без разбору, каждому входящему на сайт. Это создаст совершенно лишнюю нагрузку. Не используйте сессии по пустякам – к примеру, в счетчиках. То, что спайлог называет сессиями, считается, конечно же, на основе статистики заходов, а не с помощью механизма сессий, аналогичного пхп-шному.
К тому же, возьмем поисковик, который индексирует ваш сайт. Если поисковый робот не поддерживает куки, то пхп по умолчанию будет поставлять к ссылкам PHPSESSID, что — согласистесь — может не сильно понравится поисковику, который, по слухам, и так-то динамические ссылки не жалует, а тут вообще при каждом заходе — новый адрес!
Если сессии используются для ограничения доступа к закрытому разделу сайта, то все просто поисковик и не должен его индексировать.
Если же приходится показывать одну и ту же страницу как авторизованным, так и не авторизованным пользователям, то тут поможет такой трюк – стартовать сессию только тем, кто ввел пароль, или тем, у кого уже стартовала сессия.
Для этого в начало каждой страницы вместо просто session_start() пишем

таким образом, Мы стартуем сессию только тем, кто прислал идентификатор.
Соответственно, надо еще в первый раз отправить его пользователю – в момент авторизации.
Если имя и проль верные – пишем session_start()!

Возможные проблемы и их устранение.

Самыми распространенными ошибками, которые выдает РНР при попытке работать с сессиями, являются такие:
Две из них,
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent

вызваны одной и той же причиной, решение описано в этом факе здесь
Третья,
Warning: open(/tmp\sess_SID, O_RDWR) failed: No such file or directory (2) in full_script_path on line number (ранее она выглядела, как Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp)),
если перевести ее с английского, подробно объясняет проблему: недоступен указанный в php.ini путь к каталогу, в который пишутся файлы сессий. Эту ошибку исправить проще всего. Просто прописать каталог, который существует, и доступен на запись, например,
session.save_path = c:\windows\temp
И не забыть перезагрузить апач после этого.

Как выясняется, сообразительность людская не имеет пределов, и поэтому я вынужден пояснить:
сообщение о третьей ошибке (невозможно найти каталог) НЕИЗБЕЖНО приведет к появлению первых двух, поскольку сообщение об ошибке — это вывод в браузер и после него заголовками пользоваться нельзя. Поэтому не спешите искать преждевременный вывод, а сначала пропишите правильный путь!

Следующей по распространенности проблемой при работе с сессиями является тяжелое наследие register_globals. НЕ давайте переменным скрипта имена, совпадающие с индексами массива $_SESSION!
При register_globals=on значения будут перезаписывать друг друга, и вы запутаетесь.
А при register_globals=off появится другая ошибка: «Your script possibly relies on a session side-effect which existed until PHP 4.2.3.», в случае, если в скрипте есть переменная сессии не имеющая значения, и глобальная переменная с тем же именем. Чтобы от неё избавиться, надо всегда инициализировать переменные перед использованием (или хотя бы проверять на существование) и не давать глобальным переменным имена, совпадающие с индексами массива $_SESSION.

Если не работает, но и никаких сообщений не выводится, то добавьте в самое начало скрипта две строчки, отвечающие за вывод ВСЕХ ошибок на экран — вполне возможно, что ошибки есть, но вы их просто не видите.

или смотрите ошибки в error_log. Вообще, тема отображения сообщений об ошибках выходит за рамки данной статьи, поэтому просто убедитесь хотя бы, что вы можете их видеть. Чуть продробнее о поиске ошибок можно прочитать в этом разделе.

Если вы уверены, что ошибок нет, но приведенный пример не работает все равно, то, возможно, в PHP не включена передача ид через урл, а куки по каким-то причинам не работают.
Смотрите, что у вас с куками.
Вообще, если у вас «не работают» сессии, то сначала попробуйте передать идентификатор сессии руками, то есть, сделать ссылку и приписать к ней идентификатор:

При этом следует убедиться, что не включена директива session.use_only_cookies, которая запрещает PHP принимать идентификатор сессии, если он был передан через URL

Если этот пример не заработает, то проблема либо в банальных опечатках (половина «проблем» с сессиями происходит от неправильно написанного имени переменной), либо в слишком старой версии PHP: поддержка сессий появилась в версии 4.0, а массив $_SESSION — в 4.1 (До этого использовался $HTTP_SESSION_VARS).
Если же заработает — то проблема в куках. Отслеживайте — что за куку ставит сервер браузеру, возвращает ли браузер ее. Искать очень полезно, просматривая просматривая обмен HTTP-заголовками между браузером и сервером.
Объяснение принципа работы кук выходит за рамки этого и так уж слишком большого текста, но хотя бы убедитесь, что сервер куку с идентификатором посылает, а браузер — возвращает. И при этом идентификаторы совпадают друг с другом =)
Установка куки должна выглядеть, как
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6;
или как
Set-Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; path=/
(если вы запрашиваете скрипт не из корневого каталога)
Ответ сервера должен выглядеть, как
Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6
либо
Cookie: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b
если браузер возвращает другие куки, кроме идентификатора сессии.

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

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

Еще одна проблема может возникнуть, если вы используете перенаправление через header или навигацию с помощью JavaScript.
Дело в том, что РНР автоматически дописывает идентификатор сессии только к ссылкам вида <a href=>, но не делает этого для header-ов, яваскрипта, мета-тегов.
Поэтому надо добавлять идентификатор руками, например, так:

Следует помнить, что пхп лочит файл сессии. То есть, если один ваш скрипт стартует сессию и долго выполняется, а другой пытается в это время стартовать её с тем же идентификатором, то он зависнет. Поэтому в долго выполняющихся скриптах следует стартовать сессию только тогда, когда она нужна, и тут же закрывать её, с помощью session_write_close()

Так же, весьма редкая, и совершенно непонятно, откуда появляющаяся, проблема бывает в том, что настройка session.save_handler имеет значение, отличное от files. Если это не так — исправляйте.

Безопасность
Безопасность сессий — тема обширная. Поэтому остановлюсь на нескольких основных моментах.
Самый хрестоматийный — не передавать идентификатор через адресную строку. Об этом написано даже в php.ini, но это ограничивает функциональность сессий. Если вы решите последовать этому совету, то кроме session.use_trans_sid = 0 не забудьте session.use_only_cookies = 1
Желательно привязывать сессию к IP адресу: таким образом, если идентификатор будет украден, то злодей все равно не сможет им воспользоваться в большинстве случаев.
Рекомендуется пользоваться директивой session.save_path, с помощью которой задать собственный каталог для сохранения файлов сессий. Это более безопасно, чем когда они хранятся в общем временном каталоге сервера по умолчанию.

Дополнительная информация:

  • Кроме кук, механизм сессий посылает еще и заголовки, запрещающие кэширование страниц (тот самый cache limiter). Для html это правильно и необходимо. Но вот когда вы пытаетесь скриптом, проверяющим авторизацию, отдать файл, то интернет эксплорер отказывается его скачивать. Именно из-за этого заголовка. Вызов

 

  • перед стартом сессии должен решить проблему.
  • Как это ни кажется странным, но в массиве $_SESSION нельзя использовать числовые индексы — $_SESSION[1], $_SESSION['10'] — cессии работать не будут.
  • Где-то между версиями 4.2 и 5.0 невозможно было установить session.use_trans_sid с помощью ini_set(). Начиная с 5.0 уже можно снова.
  • До версии 4.3.3 куку PHP отправлял куку только если при старте сессии в запросе отсутстввал идентификатор. Теперь же кука посылается при каждом вызове session_start()

Пример авторизации с помощью сессий
Проиллюстрируем все вышенаписанное небольшим примером:
создадим файл auth.php:

теперь достаточно написать во всех защищаемых скриптах строчку
require «auth.php»;

ОПС! Очень Полезные Ссылки:
http://www.php.net/manual/ru/ref.session.php — самая последняя и свежая информация о поддержке сессий в PHP в официальной документации, плюс многочисленные комментарии пользователей. Настоятельно рекомендуется к прочтению.
http://phpclub.ru/manrus/f/ref.session.html — ВЕСЬМА устаревший перевод этой главы на русский, из документации в переводе Александра Пирамидина.
http://phpclub.ru/detail/article/sessions
Статья с пафосным названием «Правда о сессиях». Двойственное впечатление оставляет. Вначале автор ОЧЕНЬ доступно рассказывает о механизме сессий, но методы, которые он предлагает к концу статьи — совершенно мутные.

Хрестоматийная статья Дмитрия Бородина с сайта
http://php.spb.ru/ настоятельно НЕ рекомендуется.
Ребята, она страшно устарела. Мало того, что в ней есть фактические неточности, так с сессиями в PHP уже давно просто не работают.
Огромное Диме спасибо за нее, это была первая статья по сессиям на русском языке, я сам по ней учился, но сейчас надо ее отправить на заслуженный отдых.
Так же, устарели к сожалению, и многие другие статьи, лежащие в интернете и не обновлявшиеся годами.

Источник: http://phpfaq.ru/sessions

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Ubuntu: установка и настройка связки nginx + apache + php + mysql

В это статье я расскажу как быстро развернуть LAMP сервер на Ubuntu с кеширующим nginx

Для всех команд необходим sudo, потому сразу войдем для удобства в этот режим:

Далее, обновляем данные из репозитариев:

Установка MySQL сервер:

Во время установки нас попросят ввести пароль root для сервера MySQL, вводим 2 раза. Дожидаемся окончания установки.

Установка Apache, nginx, php:

Дожидаемся окончания установки.
Включаем модули rewrite и include в apache2 при помощи утилиты — a2enmod:

Меняем порт в apache2 со стандартного 80 на 8080 (2 строчки):

Создаем новый веб сервер (VirtualHost), создаем файл конфигурации:

И вставляем в него следующий текст:

Далее, создаем папку сайта и запускаем сайт:

Проверяем в браузере — http://domain.com:8080

Конфигурируем nginx:

Приводим конфиг к такому виду:

Далее создаем и правим конфиг нашего сайта:

Вносим в него следующие записи:

Перезапускаем сервисы и проверяем работу:

Источник: http://evolan.org/linux/ubuntu-ustanovka-i-nastrojka-svyazki-nginx-apache-php-mysql/

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Возможность указания пароля пользователя в MantisBT вручную

Автор: Рудюк С . А.
https://corp2.net

E-Mail: rs@corp2.net

При создарнии пользователя MantisBT приходит письмо с паролем пользователя по электронной почте. Но, бывает, что письмо попадает в спам или не доходит, бывает почта вообще не работает. При этом, администратор системы не имеет возможность проверить, что письмо не дошло и в систему не удается войти. Это вызывает массу проблем при первичном создании пользователя в системе баг-репорта MantisBT. Хочется иметь возможность указывать пароль вручную.

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

1. Найдите файл manage_user_edit_page.php.
2. В нем найдите строчку: <!— Email —>
3. Вставьте перед ней такой скрипт:

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

4. Теперь, найдите файл manage_user_update.php.
5. После строчки с переменной $f_user_id втавьте скрипт:

6. Прокрутите текст и найдите строчку, где написано: $result = db_query( $query );
7. Вставьте перед данной строчкой скрипт:

Автор: Рудюк С . А. https://corp2.net

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Ещё 10 уловок для защиты WordPress’a

31e5c23c01dd3cf983925ba6b7d3fb39На сегодняшний день WordPress как никогда популярен. Блоги, мини-сайты, а то и целые порталы — всё это строится на основе такого удобного движка-конструктора как WordPress. Но за удобностью и лёгкостью освоения кроются, прежде всего, вопросы, связанные с безопасностью вашего сайта. Большая распространённость — большее внимание злоумышленников.

В этой статье описаны десять простых уловок, которые позволят сделать ваш сайт на WordPress’e ещё более защищённым и позволят спокойнее спать по ночам.

1. Защищаем WordPress от XSS-инъекций

В чём проблема?
Программисты всегда стараются защитить GET- и POST- запросы, однако, иногда этого недостаточно. Необходимо защитить блог от XSS-инъекций и попыток модификации переменных GLOBALS и _REQUEST.

Что делаем?
Этот код блокирует использование XSS-инъекций и попытки модифицировать переменные GLOBALS и _REQUEST. Вставьте код в ваш файл .htaccess, расположенный в корне сайта. (И не забывайте бэкапить этот файл перед внесением любых изменений).

Как это работает?
Код позволяет проверять все запросы. Если запрос содержит тег или попытку модифицировать значение переменных GLOBALS и _REQUEST, он просто блокирует его и выдаёт пользователю 403-ю ошибку.

 

2. Убираем показ лишней информации


В чём проблема?
Если при попытке зайти в админку WordPress’a вы ошибётесь с логином или паролем, вежливый движок скажет вам об этом. Ну а зачем злоумышленнику знать, что пароль, который он пытается подобрать – неверен? Давайте просто уберём вывод этой информации и чуток запутаем его.

Что делаем?
Открываем functions.php, лежащий в папке с активной темой нашего блога (wp-content/themes/название-вашей-темы/) и добавляем следующий код:

сохраняем файл. Вуаля – больше никаких сообщений.

Как это работает?
С помощью этого хука мы переписываем стандартную функцию login_errors(). В результате этого, в случае, когда введены неправильный логин или пароль, никакой информации, объясняющей ситуацию не появится — то, что нам нужно.

 

3. Принудительное использование SSL


В чём проблема?
Если вы хотите, чтобы передаваемая вами информация была защищена, вам необходимо использовать SSL—протокол, обеспечивающий целостность и конфиденциальность обмена данными. В WordPress’e это сделать проще простого.

Что делаем?
Прежде всего узнаём, есть ли возможность у вашего провайдера использовать SSL. Если да, то открываем файл wp-config.php (обитающий в корне сайта) и добавляем следующую строку:

Как это работает?
Всё просто. WordPress использует множество констант и FORCE_SSL_ADMIN всего лишь одна из них. Эта константа включает принудительное использование SSL при заходе в панель администратора.

 

4. Используем .htaccess для защиты файла wp-config


В чём проблема?
wp-config.php содержит все данные, необходимые для подключения к серверу MySQL и базе данных. Защита этого файла – одна из самых главных задач.

Что делаем?
Находим файл .htaccess в корне нашего сайта и добавляем следующие строки:

Как это работает?
Мы просто запрещаем доступ к этому файлу кому бы то ни было. Теперь уж точно ни один бот не сможет и близко подойти к этому файлу.

 

5. Скрываем версию WordPress’a


В чём проблема?
Wordpress автоматически вставляет номер своей версии в исходный код страниц. К сожалению, не всегда удаётся вовремя обновлять движок. А это означает, что зная какая у вас версия WordPress’a со всеми её брешами и слабыми местами, злоумышленник может очень-очень огорчить вас. Что делаем? Правильно, убираем вывод версии.

Что делаем?
Снова открываем functions.php, лежащий в папке с активной темой нашего блога (wp-content/themes/название-вашей-темы/) и добавляем туда этот код —

Как это работает?
Хуки WordPress'a позволяют легко заменять одну функцию на другую. Именно этим мы сейчас и воспользовались – мы просто запретили вывод информации о версии нашего движка.

+ как справедливо указал пользователь rOOse, необходимо также удалить файл readme.html, находящийся в корне сайта. В нём тоже содержится информация о текущей версии WordPress’a.

 

6. Баним спамеров и ботов

 

af963c4e9c2a3c07fc7695bd1cc9d5bbВ чём проблема?
Надоедливые постеры и спамеры. Решение – запретить им доступ к сайту по IP. Конечно, это не защитит от спам-скриптов, постоянно меняющих прокси, но немного облегчить жизнь вполне может.

Что делаем?
Вставьте этот код в файл .htaccess. Просто поменяйте адрес 123.456.789 на IP того редиски нехорошего человека, который вас достаёт и всё — он забанен всерьёз и надолго.

Как это работает?
И снова нам на помощь приходит apache. Посредством файла .htaccess мы запрещаем доступ к сайтe пользователям с конкретным IP. Нужно забанить ещё кого-то? Просто добавим ещё одну строку, к примеру -

7. Пишем плагин для защиты от зловредных url-запросов

266ee8d62ecf692be36531fcaafdab99 В чём проблема?
Хакеры и недохакеры всех родов очень часто пытаются найти слабые места при помощи всевозможных зловредных запросов. WordPress неплохо защищён от этого, но лишняя защита никогда не повредит.

Что делаем?
Создаём новый файл под названием blockbadqueries.php и помещаем его в папку wp-content/plugins. Затем просто активируйте его в админке как любой другой плагин.

Как это работает?
Работа этого плагина проста – он проверяет все длинные запросы (более 255 символов) и наличие php-функций eval или base64 в URI. Если что-то из этого находится, браузеру пользователя отдаётся страница с ошибкой 414.

 

8. Личеры!


В чём проблема?
Мир полон добрых людей, которые изо всех сил пытаются донести до других новость или статью, написанную вами. Всё бы ничего, но ведь по доброте душевной они берут картинки прямо с наших с вами серверов, скромно забывая при этом про слово «трафик». А теперь представьте что будет, если ссылки на наши картинки попадут на какой-нибудь популярный китайский блог, с их-то почти уже четырёхсотмиллионным интернет-населением! Свят-свят-свят… Значит сейчас будем защищать хотлинкинг, a.k.a. личинг, a.k.a. «да я просто вставил ссылки на файлы с вашего сервера».

Что делаем?
И опять всемогущий apache поможет защищить нам наш трафик. Достаём в очередной раз файлик .htaccess и пишем следующее:

Как это работает?
При помощи этих правил мы заставляем сервер проверять откуда пришёл запрос на нашу фотку — если со страниц нашего сайта, он отдаёт её пользователю. Если с «вражеского» — то показывает личерам какую-нибудь обидную картинку.

 

9. Убить админа. (Нет дефолтному юзернейму «admin»)!

80a6f9955e1b96bde313b8ef36811321В чём проблема?
Злоумышленникам всегда проще получить доступ к сайту при помощи брута, если уже известен логин. При этом на протяжении многих лет дефолтный логин админа был примитивным до зубного скрежета — «admin».

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

Что делаем?
Просто выполняем этот запрос к базе данных:

Как это работает?
С помощью sql-запроса меняем дефолтный логин. Правда, есть одно «но». Посты, написанные ранее admin'ом не поменяют своего автора. А для того чтобы извести admin'a на корню, необходимо выполнить ещё один запрос:

10. Защита директорий на сервере от просмотра


В чём проблема?
Очень многие хостеры позволяют просматривать директории на своих серверах. Поэтому, если ввести в адресную строку www.вашблог.ru/wp-includes, то очень часто можно увидеть всё содержимое этой директории. Безусловно это небезопасно, поэтому лучше это сразу запретить.

Что делаем?
Вы можете либо добавить пустые файлы index.html в папки, просмотр которых хотели бы запретить. Либо дополнить наш .htaccess ещё одной строкой:

Как это работает?
Пустой index.html будет выдаваться каждый раз, когда последует запрос к директории. Ну а директива в .htaccess просто запрещает апачу выдавать список содержимого директории.


Источник: http://habrahabr.ru/post/98083/

 

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

Безопасность WordPress. 3 самых эффективных способа защиты от брутфорса

По статистике, около 19% от общего количества всех сайтов Интернета, работают на WordPress — это почти каждый пятый сайт. Успех платформы вполне логичен и закономерен, не зря еще 5 лет назад я сделал ставку именно на нее. Но сегодня речь пойдет не о преимуществах WordPress, а о его безопасности. Высокая популярность платформы активизировала злые силы, и вот уже на протяжении нескольких месяцев в Рунете идут массовые атаки на сайты, работающие на WordPress. Атаки настолько серьезные и настолько массовые, что не выдерживают даже самые мощные серверы. Хостинг-провайдеры, конечно, принимают меры, порой даже самые радикальные, вплоть до полной блокировки администраторских консолей WordPress. Поэтому, если вас еще не заблокировали, лучше самостоятельно провести ряд несложный действий по укреплению обороны вашего WordPress.

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

1. Первое с чего нужно начать — это избавиться от пользователя admin. Если у вас нет пользователя admin, можете сразу переходить к пункту 2. В WordPress начиная с 3 версии это делается очень просто. Достаточно создать нового пользователя, наделить его администраторскими правами, а старого пользователя «admin» — удалить. При его удалении, WordPress предложит вам выбрать нового пользователя, который станет автором публикаций старого администратора.

В старых версиях WordPress эта процедура проделывается с помощью пары SQL-запросов:

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

3. При бутфорсе WordPress, производится огромное количество запросов к файлу авторизации «wp-login.php», и будет правильно обеспечить ему двойную защиту.

Если вы работаете с сайтом один, и ваш интернет-провайдер предоставляет вам статичный IP-адрес, вы можете разрешить доступ к директории «wp-admin» только с вашего IP-адреса, заблокировав тем самым для всех остальных даже возможность авторизации. Делается это следующим образом. В директории «wp-admin» создаем файл «.htaccess» следующего содержания:

Где IP — это ваш IP-адрес. Узнать его вы можете, например, здесь.

Если же, кроме вас с сайтом работают еще люди со статическими IP-адресами, вы можете просто добавить их в список ниже. Например, так:

Где, IP1, IP2, IP3 — разрешенные IP-адреса.

Благодаря этому, все пользователи (боты) с IP-адресами, не указанными в списке разрешенных, просто не получат доступа к директории «wp-admin» и, соответственно, не смогут брутфорсить файл «wp-login.php». Всем им будет возвращаться ошибка 403.

Если провайдер вам выдает динамический IP-адрес, меняющийся с каждым новым подключением к Интернету, тогда этот способ не пройдет, т.к «.htaccess» придется редактировать при каждом вашем подключении к Сети. С помощью все того же «.htaccess» мы можем установить дополнительную серверную HTTP-авторизацию. Делается это следующим образом.

Все в той же директории «wp-admin» создаются два файла: «.htaccess» и «.htpasswd». В первом будут храниться инструкции, во втором разрешенные данные для доступа к директории.

В «.htaccess» пишем следующее:

Где fullpath — полный путь к файлу «.htpasswd». Обратите на это должное внимание, т.к это самая частая ошибка. Полный путь вы можете узнать у своего хостинг-провайдера или с помощью небольшого php-скрипта:

Или другим способом:

Если вы по каким-то причинам не хотите паролить всю директорию «wp-admin», вы можете запаролить непосредственно файл «wp-login.php». Делается это аналогично, но в «.htaccess» нужно написать следующее:

Файл «.htpasswd» в обоих случаях должен выглядеть следующим образом:

Где username — это имя разрешенного пользователя, а password — это пароль. Обратите внимание, что пароль хранится в зашифрованном виде. Поэтому, предварительно ваш пароль нужно зашифровать. Сделать это можно, например, с помощью этого сервиса. На пароль действуют те же правила, что указаны в пункте 2 данной публикации.

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

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

В Safari 6.0.5 на Mac OS это выглядит примерно так:

htpasswd

В других браузерах возможно немного иначе.

Выполнив хотя бы эти 3 пункта, вы в разы снизите вероятность взлома вашего WordPress.

Дополнительные меры по защите WordPress

Дополнительно вы можете защитить таким же образом файл настроек WordPress «wp-config.php». Я бы рекомендовал его защитить, потому что в нем содержатся данные для подключения к БД MySQL. Делается это аналогично:

Также, я бы рекомендовал вам проверить директории вашего сайта. Дело в том, что очень многие хостеры и безалаберные сисадмины не закрывают по-дефолту просмотр директорий сайтов своих клиентов. Если, к примеру, ввести в адресную строку браузера: http://вашсайт/wp-includes/ и вы увидете содержимое этой директории — нужно бить тревогу и срочно закрывать просмотр. Для этого можно создать в директориях, которые вы хотите закрыть от просмотра, пустые файлы «index.html» или дописать в ваш «.htaccess» всего одну строку:

Которая запретит серверу показывать содержимое директорий.

Кроме всего прочего, вы можете самостоятельно установить плагины безопасности WordPress, рекомендованные разработчиками платформы.

Их обзор в рамках данной публикации я проводить не буду.

Если в процессе настройки защиты WordPress от брутфорса у вас возникнут сложности — вы всегда можете обратиться ко мне за помощью. Контакты здесь.