Intellect Board — cистема управления сайтом

Построение сайта на основе форума

Intellect Board — cистема управления сайтом »   Документация для пользователя »   Безопасность Intellect Board
RSS
Безопасность Intellect Board
Автор статьи: XXXX Pro
Первоисточник: Официальный сайт Intellect Board


1. Обработка наиболее частых ошибок


Наиболее распространенными уязвимостями для PHP-скриптов являются следующие:
1) SQL-injection (нарушение нормальной работы SQL-операторов при передаче из формы данных, содержащих " и ')
2) возможность указания произвольных файлов при передаче их имен через URL (например, index.php?m=../../../../../../etc/passwd или index.php?m=http://openproj.ru/hacking.php)
3) XSS-уязвимости (перехват cookies или идентификатора сессии с помощью JavaScript)
4) возможность DDoS-атаки (автоматическая регистрация большого количества пользователей или отправка большого количества сообщений или сообщений большого объема, что приведет к прекращению нормальной работы форума)
5) подбор пароля путем последовательного перебора (brute-force).

Для защиты от этих уязвимостей в Intellect Board были предприняты следующие меры:
1) для защиты от SQL-injection производится фильтрация ВСЕЙ вводимой пользователем информации с целью экранирования символов ' и " путем добавления перед ними символа \ (осуществляется в функциях getvar, build_sql и build_sql_all). Кроме этого, все значения (включая цифровые), в SQL-запросах прописаны с кавычками;
2) единственным именем файла, которое передается через URL (в пользовательской части форума), является имя модуля (параметр m при вызове index.php). Для защиты от подключения произвольных файлов приняты следующие меры: если имя содержит символы /, . и \, выполнение скрипта немедленно останавливается с выдачей ошибки и ее фиксации в логе, проверка производится в файле index.php перед подключением соответствующего модуля;
3) защита от XSS осуществляется путем замены спецсимволов HTML (таких как <,> и прочих) на их HTML-обозначения (вида &lt; &gt;). Для данных, не являющихся текстом сообщения в разделе (поля, содержащие в названии слово text), замена осуществляется в функциях getvar, build_sql, build_sql_all. Для полей с именем, содержащим слово text, экранирование производится непосредственно перед выводом содержимого (в функции textout, если запрещено использование HTML, и в функции textarea - всегда).
4) для предотвращения DDoS-атак в Intellect Board предусмотрены следующие функции: 1) показ картинки с кодом, который затем требуется ввести для успешной регистрации (по умолчанию - выключена), 2) ограничение на время, которое должно пройти с момента отправки предыдущего сообщения, 3) ограничение на минимальный и максимальный размер сообщения.
5) для защиты от подмены информации, редактировать которую пользователь не имеет права (например, уровень доступа), в Intellect Board приняты следующие соглашения по именам: все поля в таблицах БД, которые могут быть отредактированны пользователем без дополнительных проверок (за исключением фильтрации кавычек и спецсимволов HTML), имеют вид код_имя, где код - это одно буквенный или двухбуквенный префикс, одинаковый и уникальный для каждой таблицы, а имя - это осмысленное название столбца, отражающее его предназначение. SQL-запросы для редактирования таких столбцов могут быть сформированы автоматически с помощью функции build_sql. Для тех же столбцов, которые не могут быть отредактированы пользователем (или требуют дополнительных проверок) используется имена вида код__имя (два символа _ подряд). Функцией build_sql такие столбцы не обрабатываются, они добавляются в SQL-запрос непосредственно функцией, отвечающей за реализацию определенного действия после проверки на допустимость.
6) механизм аутентификации построен таким образом, что даже в случае перехвата cookies на компьютере пользователя извлечение из них пароля крайне затруднено (см. описание механизма аутентификации).
7) начиная с версии 2.14 - добавлена защита от перебора пароля: если в течение указанного времени после неудачной попытки аутентификации предпринята еще одна попытка, пользователю будет выдано сообщение о неправильном пароле вне зависимости от того, правильно ли введен пароль или нет.
8) начиная с версии 2.14 - предусмотрена проверка типа запроса (GET или POST) на выполнение действий администратора и модератора (а также ряд пользовательских действий), что позволяет защититься от атак путем внедрения специально сформированного URL в тег img или атак с применением социальной инженерии (когда администратору предлагается зайти по "прикольной ссылке", которая на самом содержит URL, который приводит к повышению уровня пользователя форума до Администратора).

2. Рекомендации администратору по обеспечению безопасности


Для обеспечения безопасности сайта Администратору необходимо учитывать следующее:

1) В Intellect Board есть два вида уровней пользователя: уникальные, которые могут быть проставлены только администратором форума через ЦентрАдминистрирования и неуникальные, которые присваиваются после набора определенного количества сообщений. Поэтому будьте внимательны и не создавайте неуникальных уровней с правами выше 500, так как это может привести к несанкционированному получению прав модератора или администратора.
2) Наиболее вероятный способ взлома сайта - XSS-атака, т.е. внедрение JavaScript и перехват cookies или идентификатора сессии администратора и его использование для входа на форум от имени администратора. Данная атака становится легко реализуемой, если на форуме разрешено использование HTML, так как в этом случае какой-либо фильтрации HTML-тегов не производится.
Поэтому при создании любого раздела проверяйте уровень доступа, необходимый для отправки HTML-сообщений!
3) Внутри Центра Администрирования не существует каких-либо разграничений прав доступа. Если пользователь имеет туда доступ, то он может сделать практически любые действия, вплоть до полного уничтожения форума (за исключением нескольких действий, для которых требуются права пользователя System). Поэтому не предоставляйте доступ в Центр Администрирования пользователям, которым вы не доверяете полностью.
4) Никогда не кому не сообщайте пароль пользователя System.

3. Дополнительные меры безопасности


Если имеющихся в Intellect Board мер безопасности вам кажеися недостаточно, вы можете сделать следующее:
1) запаролить доступ к Центру Администрирования стандартными средствами Apache с помощью файлов .htaccess и .htpasswd (их нужно разместить в каталоге admin каталога форума)
2) заходить на форум с отключенным JavaScript
3) включить привязку учетной записи к переменной HTTP_USER_AGENT
4) входить только в режиме с повышенной безопасностью
5) регулярно менять пароли администратора и делать backup базы данных и файлов настроек.

4. Описание механизма аутентификации


Intellect Board имеет централизованно-модульную структуру (т.е. все действия выполняются путем выполнения скрипта index.php, который подключает другие модули по мере необходимости), поэтому механизм аутентификации пользователя в нем централизованный. Также централизовано производится проверка прав пользователя на просмотр выбранного раздела.
Проверка подлинности пользователя осуществляется сразу же после начальной инициализации скрипта (подключения файлов конфигурации и установки соединения с базой данных). Проверка происходит следующим образом:
1) проверяется наличие полей inusername и inuserpass в POST-запросе
2) если таких полей нет, переход к пункту 12
3) от inuserpass берется MD5-хеш
4) из базы данных извлекается профиль пользователя с указанным именем
5) если в БД пароль пользователя хранится в нешифрованном виде, от него берется MD5-хеш
6) производится сравнение хешей паролей
7) если хеши не совпадают, то выдается сообщение об ошибке и работа скрипта завершается
8) в переменную $_SESSION сохраняется имя пользователя, его номер, а в случае входа с повышенной безопасностью - также время входа и IP-адрес
9) генерируется случайное число, после чего к паролю прибавляется строка, хранимая в поле u__key (она является случайной и генерируется при регистрации). Если в настройках форума выбрана "привязка к броузеру", то к данной строке также прибавляется $HTTP_USER_AGENT. От получившейся строки берется функция crypt (где случайное число - используется в качестве параметра salt) и результат этой функции сохраняется в $_SESSION, также в session сохраняется salt.
10) в случае, если пользователь выбрал вход с запоминанием, переменная $_SESSION сериализуется и сохраняется пользователю в cookies.
11) скрипт продолжает работу в нормальном режиме, при этом считается, что пользователь вошел на форум (переход к п. 21)
12) из базы данных извлекается информация о пользователе, идентификатор которого указан в $_SESSION['uid']
13) если пароль хранится в базе в нешифрованном виде, от него берется MD5-хеш
14) к MD5-хешу пароля прибавляется u__key, а при необходимости - также $HTTTP_USER_AGENT и время последнего действия, если применяется режим повышенной безопасности,
15) от получившейся строки берется функция crypt, параметр $salt для которой также извлекается из данных сессии пользователя.
16) производится сравнение полученной с помощью $crypt строки со строкой пароля, полученной из $_SESSION
17) если строки не совпали, переход к пункту 20
18) в случае режима с повышенной безопасностью снова генерируется строка md5(пароль)+$u__key+$HTTP_USER_AGENT+время, от нее берется функция crypt с прежним $salt и результат записывается в $_SESSION['password']
19) данные пользователя заносятся в глобальную переменную $inuser, после чего скрипт продолжает свою работу, считая, что пользователь действительно то, за кого себя выдает (переход к п. 21)
20) выводится сообщение "Неправильный пользователь или пароль", после чего переменная $_SESSION полностью обнуляется
21) конец аутентификации



Текущий рейтинг темы: 6.0000



Показать комментарии (0 комментариев)

1 посетитель просмотрел эту тему за последние 10 минут
В том числе: 1 гость, 0 скрытых пользователей

Последние RSS
Ограничение доступа
не отображаются разделы
Архив версий
Установка стиля на Intellect Board 2.22
Завершилась работа над новой версией 3.00

Самые активные 5 тем RSS


Время выполнения скрипта: 0.0234. Количество выполненных запросов: 12, время выполнения запросов 0.0000
Creative Commons License Rambler's Top100 Rambler's Top100 Рейтинг@Mail.ru Valid HTML 4.01 Transitional Valid CSS!