Общую информация о безопасности (веб-)приложений можно найти в Обсуждении безопасности (англ.)
Чтобы быть в курсе выявления проблем с безопасностью в DokuWIki, пожалуйста подпишитесь к рассылке проекта DokuWiki на freshmeat.net (для подписки нужен рабочий ящик электронной почты).
Все выявленные проблемы с безопасностью можно найти в системе отслеживания ошибок.
Если вы нашли ошибку, связанную с безопасностью в Dokuwiki, пожалуйста сообщите в первую очередь ведущему разработчику проекта (Andi) через его личный электронный адрес, он указан на этой странице.
Если ошибка некритическая, вы так же можете создать заявку о ошибке, но она будет общедоступной!
По умолчанию, при установка DokuWiki открыта всем для чтения и изменения. Как только вы установили DokuWiki, возможно кто-то уже получил к ней доступ. Поэтому во время самой установки желательно ограничить доступ другим посетителям.
Если вы используете веб-сервер Apache, вы можете организовать такой доступ добавлением нижеследующих строк в начало файла .htaccess, находящегося в корне установки DokuWiki:
Deny from all Allow from 192.168.1.1
Замените “192.168.1.1” на ваш IP адрес (с которого будете выполнять установки и настройку). Если вы не знаете ваш IP адрес, то его можно посмотреть зайдя на http://www.whatsmyip.org/
Если ваш адрес используется и другими людьми (единый прокси школ или провайдеров типа AOL, локальная сеть и т.п.), то все компьютеры испоользующие этот адрес будут иметь доступ к DokuWiki.
Не забудьте убрать добавленые в файл .htaccess прежде чем вы запустите для всех свою wiki.
На следующие параметры конфигурационного файла следует обратить особое внимание при настройке DokuWiki:
(То есть разрешения создания файлов и папок.) Установите их как можно более закрытыми. Это важное условие обеспечения безопасности установки DokuWiki! Пожалуйста прочитайте страницу о разрешениях .
(Требуется - слишком важная и потенциально опасная информация чтобы разрешить её видеть всем)
В папке config DokuWiki, исправьте ваш файл conf/local.php (создайте если его там нет) и добавтье строку:
$conf['allowdebug'] = 0;
Ссылки в wiki на внешнее содержимое, например на внешние картинки, заставляют ваш вебсервер копировать эти картинки на ваш веб-сервер через специальный скрипт lib/exe/fetch.php в целях обеспечения нормальной производительности и возможности “на лету” менять размеры таких картинок. Существует возможность ограничить закачку из внешних источников по размеру файлов, с помощью опции $conf['fetchsize'] (задаётся в байтах). Установка этой опции в 0 позволит не закачивать ничего извне, т.е. отключить кеширование.
Используя mod_rewrite, мы можем принудительно заставить пользователей авторизироваться через HTTPS, что предотвратит передачу паролей в чистом виде через Интернет.
Добавьте следующие строки в ваш apache.conf:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{QUERY_STRING} do=log
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R,QSA,L]
Возможно вам нужно будет изменить ${HTTP_HOST} на ${ИМЯ_СЕРВЕРА}, где server name совпадает с именем хоста в вашем сертификате SSL.
Posted by Travis Sidelinger: travis@ilive4code.net - 2006Oct01
The login page is served when you hit logout as well, so replacingdo=loginwithdo=log(in|out)is a slight improvement.
— Gerard Neil 2007-01-27 04:01
Question: is it possible through mod_rewrite magic somehow drop the user back to non-ssl right after the login? — Alex Popov 2007-10-31 14:03
After some hacking, I figured this one out. To use non-ssl for all pages except the login/logout pages, insert the following after the lines above:
RewriteCond %{HTTPS} on
RewriteCond %{QUERY_STRING} !do=log
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^(.*) http://%{HTTP_HOST}/$1 [R,QSA,L]
Note the test for GET; without this, the login page will fail and drop you back to the main page (because it requires a POST to doku.php, which would otherwise be lost in the redirect).
— wirehead@notapattern.net 2007-Jan-04 23:00
Посмотрите этот раздел ЧАВО.
В добавление к настройкам перечисленным на этой страница, нижеперечисленные настройки также могут нарушить безопасность и/или конфиденциальность. Однако это не исчерпывающий список.
Следующие пункты очень рекомендуются - даже если они помечены как Опциональные, стоит портратить на них некоторое время.
Основная цель - убрать все что можно убрать из корневого каталога вашего веб сервера 1) — кроме тех скриптов, которые однозначно должны лежать там.
Для этого, исходя из стандартного для Юникс корневого каталога /, предположим что ваш рабочий каталог на сервере будет /home/yourname а корневой каталог сайтов, скажем, /home/yourname/www, то следует сделать папку /home/yourname/dokuwiki которая должна быть вне корневого каталого сайта и расположить часть Dokuwiki в ней, как описано ниже. (т.е. пихать не всю DokuWiki в папку сайта, а тока часть, а другую часть расположить в отдельной, недоступной через браузер папке)
(Требуется - Хотя он защищен настройками .htaccess нет ни одной причины выкладывать его в публичный доступ.
Уберите bin из каталога сайтов или просто удалите эту папку. Эта папка содержит скрипты запускаемые только из командной строки и не должны быть публичными.
Если у вас нет необходимости использовать эти скрипты или вы просто не знаете что с ними делать - просто удалите эту папку, это ничего в DokuWiki не нарушит (т.к. не требуется для её работы).
(Опционально - каталог защищен настройками .htaccess но это не всегда безопасное решение)
Уберите каталоги data, media и attic из каталога сайтов.
Простейший способ сделать это такой:
data (и все его содержимое) вне корневого каталога сайтовdata.
Для примера, если каталог data перемещен в /home/yourname/data, добавтье следующую строку в conf/local.php:
$conf['savedir'] = '/home/yourname/data';
Каталоги media и attic расположены внутри каталога data, соответственно вышепроделанные шаги обеспечат также и их безопасность.
(Опционально - каталог защищен настройками .htaccess но это не всегда безопасное решение)
Уберите подкаталог настроек из каталога сайта. Это немного труднее сделать в текущей версии DokuWIki, самый легкий путь - это использовать auto-prepend-file настройку файла ini в PHP , для загрузки простейшего PHP скрипта который будет указывать на новое положение каталога настроек.
Создайте файл вида (путь будет другим для вашей системы) /home/yourname/dokuwiki/prepend.php содержащий:
<?php define('DOKU_CONF','/home/yourname/dokuwiki/conf/');
(Тег для закрытиея PHP не указан специально! Не нужно добавлять ?> в конце)
Переместите каталог conf в /home/yourname/dokuwiki/ чтобы получился такой путь /home/yourname/dokuwiki/conf.
Теперь измените файл .htaccess расположеный в корневом каталоге сайта (т.е. /home/yourname/www/.htaccess) и добавьте следущее;
php_value auto_prepend_file "/home/yourname/dokuwiki/prepend.php"
Это заставит PHP запускать скрипт prepend.php перед любым другим скриптом. Указание этой константы перекрывает получение её Dokuwiki's через скриптinc/init.php.
(Опционально - каталог защищен настройками .htaccess но это не всегда безопасное решение)
Теоретические тут не должно быть ничего опасного, но в то же время нет причин оставлять код в этом каталое публично открытым, лучше поберечься чем потом каятся. Имейте в виду что этот шаг потребует шелла (доступа к командной строке) сервера, когда для почти всех остальных шагов достаточно FTP клиента.
Итк, предположим что вы выполнили предыдущий шаг по перемещению каталога config вне корневого каталога сайта, тогда вам нужно просто добавить еще одну строку в файл prepend.php;
<?php define('DOKU_CONF','/home/yourname/dokuwiki/conf/'); define('DOKU_INC','/home/yourname/dokuwiki/');
Переместите каталог inc в /home/yourname/dokuwiki чтобы получилось /home/yourname/dokuwiki/inc. Кроме того вам также нужно перенести каталог lib, после чего сделать символическую ссылку в корневой каталог сайта, т.е.;
$ mv /home/yourname/www/dokuwiki/lib /home/yourname/dokuwiki $ ln -s /home/yourname/dokuwiki/lib /home/yourname/www/dokuwiki/lib
Эти команды создадут символическую ссылку на каталог lib в корневом каталоге вашего сайта, в тоже время позволив правильно работать переопределению DOKU_INC.
это должно быть объединено в wiki:config:php и ссылаться отсюда.
Нижеследующие является “хорошим тоном”. Хорошее описание по общей защите PHP можно найти в Главе 3 Apache Security, также главу 3 можно бесплатно скачать в формате PDF отсюда.
Если вы запускаете Dokuwiki / PHP на сервере, который вы полностью управляете, то можно рассмотреть вариант использования т.н. chroot “тюрьмы”. Имееся много разнозненных руководств в Сети как это сделано, однако наиболее полным / точным и эффективным скорее всего является Apache + Chroot + FastCGI + PHP FAQ
Вы можете включить это в вашем главном файле .htaccess, находящимся в корне - /home/yourname/www/.htaccess.
(Опционально это хорошая идея - чем больше информации вы получите о атакующем, тем лучше)
Добавьте следующее в файл .htaccess находящийся в корневом каталоге вашего сайта (т.е. /home/yourname/www/.htaccess - каталог, который отвечает на http запросы и содержит файлы index.php и doku.php)
# Disable display of public PHP error messages php_flag display_errors "off" # Log all PHP errors to a file in private directory ( and not in the Dokuwiki data dir either! ) # here you'd need to create the directory and the file then make sure the file has world write # permissions php_flag error_log "/home/yourname/logs/errors.log" # Don't keep reporting the same error again and again (keep log file smaller) php_flag ignore_repeated_errors On # Dokuwiki generates a lot of notices... best prevent reporting them # in .htaccess files E_ALL, E_NOTICE have no effect, you must use the # values from http://www.php.net/manual/en/function.error-reporting.php # E_ALL & ~E_NOTICE => 2047 - 8 => 2039 (Note: E_ALL is different for 5.2.x and above, see # http://www.php.net/manual/en/ref.errorfunc.php#errorfunc.constants.errorlevels.e-all) php_flag error_reporting 2039
Вам нужно создать папку и файл ошибок, указанных выше. Это можно сделать (зайдя в шелл) примерно так;
$ mkdir ~/logs $ touch ~/logs/errors.log $ chmod 662 ~/logs/errors.log
Если PHP обнаружит что файл отсутствует он не создат его автоматически (а значит сообщения о ошибках будут уходить в никуда). Между тем вы должны убедится что этот файл не стал слишком большим (он будет расти если вы не сделаете чтонибудь с ним). Простейший способ уменьшить его размер таков;
$ tail -100 ~/logs/errors.log > ~/logs/errors.log
Эта команда оставит в файле только последние 100 линий, удалив все остальное - вы можете добавить эту команду к примеру в еженедельную обработку cron.
Инструкции для dokuwiki работающей под Linux/Unix и Apache. Тестировалось на Centos 4.4
Два параметра очень важны для безопасности PHP: 2)
Добавьте следующие строки в ваш httpd.conf, также иногда их надо добавить и в файл /wiki/.htaccess too:
# dokuwiki is installed in : /var/www/html/wiki/
# your php pear packages are in : /usr/share/pear/
# php is installed in : /usr/lib/php4/
# use a new tmp directory in : /var/www/html/wiki/tmp/
<Directory /var/www/html/wiki>
php_admin_flag safe_mode On
php_admin_value safe_mode_exec_dir "/usr/lib/php4"
php_admin_value safe_mode_include_dir "/usr/share/pear/"
php_admin_value open_basedir "/var/www/html/wiki/:/var/www/wiki/:/usr/share/pear/"
php_admin_value upload_tmp_dir "/var/www/html/wiki/tmp/"
</Directory>
Затем вам нужно настроить все разрешение папок wiki например следующей Linux/Unix командой:
# chown apache:apache -R /var/www/html/wiki/
Если вы не имеете аккаунта с шеллом или используете ftp для заливки dokuwiki, все разрешение должны быть настроены автоматически. В этих случаях не нужно запускать команду chown.
Is the above line something one has to do with telnet? My presence provider doesn't provide a command line… Over-all, all I got out of this page was to delete the .bin directory and moving the ./data directory. By the way, I've been unable to delete the old ./data on the server with FileZilla; it tells me “directory not empty” and when I go to the subdirectories, and to the files in them, all my attempts to delete seem to result in PWD commands. No apparent way to get rid of them. The rest of the stuff on this page either didn't work for me, or was too obscure to follow. Need to explain things with dummies in mind. We dummies are a majority
Don't know wether there are ftp-clients with the ability to change owner and group attributes as withchownon the command line, but probably your provider will not grant you the right to change owner and group attributes of your files. This also may be the reason why you can't get rid of 'your' files in the data dir (presumably they aren't yours). If you set the fmode/dmode param too restrictive (lesser okt. values than 666/777, esp. in 3rd position) you won't be able to del files written and hence owned by the webserver (i.e. files created via dokuwiki) cf. permissions, fmode and hosted /Leif
Assuming your webserver is apache and is running as the user apache. This is needed because safe_mode runs the PHP script as the user that is the owner of the .php files.
Dokuwiki имеет множество разрабатываемых сообществом плагинов. Они распространяются отдельно от Dokuwiki и соответственно требуют отдельного подхода с точки зрения безопасности. Вот несколько советов по их использованию;
lib DokuWiki существуют возможность общего доступа. Необходимо очень внимательно просматривать код таких плагинов и закрывать доступ к ним через файл .htaccess.
Why couldn't I define – I see, some plugins link to files in their directory, such as the icons in the note plugin. / Viktor
DOKU_PLUGIN in prepend.php, as with other constants, and put it outside the document root as well?
Question: Could a setup like Mozilla's https://addons.mozilla.org be something for DokuWiki ?
That site hosts all the reviewed plugins for the Mozilla products (eg. Firefox, Thunderbird). Only stable and secure plugins make it to that site. Users know when they install plugins from that source that they are relatively safe opposed to obscure third party sites.
The bigger DokuWiki gets, the more important it is to safeguard for plugin vulnerabilities.
charlieMOGUL 07-12-2006 10:00 GMT +01:00
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported