Первостепенная защита сайта на PHP

12
B
На сайте с 04.12.2008
Offline
69
3271

Продолжаю изучение защиты сайта.

Недавно прочел несколько статей с предложением отключения некоторых функций PHP.

Но так как хостинг у меня только виртуальный и возможности править php.ini нет

Придется править .htaccess

Подскажите, поправте что не так. Что вкл а что выкл :) ?

Вот несколько директив / функций которые как я понял желательно отключить:

safe_mode

- проверяет владельца запущенного скрипта и если скрипт пытается открыть

какой-либо файл - делает это с правами этого владельца

php_admin_flag safe_mode on
register_globals

- Запретить создание глобальных переменных из пользовательского ввода

если включена, переменные GET, POST, Cookie, Server будут регистрироваться как глобальные переменные.

Если директива выключена, то глобальный доступ можно получить через массивы $HTTP_ENV_VARS, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS

php_flag register_globals 0

php_value register_globals 0
allow_url_fopen

- запрет подключению сайта к удалённым страницам, скриптам.

это несколько замедлит работу программы - при каждом вызове *.php скриптов

будет происходить обращение к файлу .htaccess

	php_value allow_url_fopen 0

php_flag allow_url_fopen 0
phpinfo

запретить опасные функции:

disable_functions=phpinfo,system,passthru,cmd
expose_php

- директива сообщает, может ли PHP оповещать пользователей о своем существовании на данном сервере, например, добавляя HTTP заголовок.

expose_php off
max_filesize

Ограничить размер загружаемого файла на сервер

upload_max_filesize = 2M
Ограничения на время работы

max_execution_time = 30
Отключить вывод ошибок

И включить директиву записи ошибок в лог-файл сервера.

В результате такого запроса, становится известен путь к скрипту и имя файла.

Если нет доступа к php.ini, можно добавить в начало скрипта строку error_reporting(0); это подавит вывод ошибок.

php_flag display_errors off

php_flag log_errors on
php_value error_log /home/ваш_путь/web/php_error.log
php_value error_reporting 2039
magic_quotes_gpc

- если включена, автоматически добавляет слеши к данным пришедшим от пользователя - из POST, GET запросов и cookie.

php_flag magic_quotes_gpc 0
magic_quotes_runtime

- если включена, автоматически добавляет слеши к данным, полученным во время исполнения скрипта - например, из файла или базы данных.


php_flag magic_quotes_runtime 0
Под вопросом:

php_value magic_quotes_sybase Off

php_value post_max_size 20M

php_value max_input_time 200

PS

Немного запутался в следующем:

1. safe_mode должен быть выключен или выключен?

2. функции должны включатся с помощью php_value или php_flag ? - поэтому некоторые примеры представлены в разных(двух) вариантах.

3. как включить некоторые функции в htaccess мне не удалось узнать поэтому они написаны в виде настроек для php.ini

ewg777
На сайте с 04.06.2007
Offline
225
#1

Вы не туда идёте. Если у Вас кривая фильтрация входящих данных, тут уже htaccess не помощник.

A2
На сайте с 11.02.2007
Offline
49
#2

blacks, как и Вы начал интересоваться вопросами безопасности изучая php. Рекомендую помимо статей и пару книг по веб-безопасности посмотреть, например

М. Низамутдинов "Тактика защиты и нападения на web-приложения", 2005

М. Фленов "PHP глазами хакера", 2005

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

[Удален]
#3
blacks:
это несколько замедлит работу программы - при каждом вызове *.php скриптов
будет происходить обращение к файлу .htaccess

это будет происходить в любом случае. даже если его нет.

blacks:
expose_php
- директива сообщает, может ли PHP оповещать пользователей о своем существовании на данном сервере, например, добавляя HTTP заголовок.

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

blacks:
запретить опасные функции:

лучше запретить их вызов без вашего ведома.

Короче все это конечно хорошо, но от дырок в скриптах не спасает.

Prior
На сайте с 03.03.2008
Offline
194
#4
Aspid2:
М. Фленов "PHP глазами хакера", 2005

Это случаем не известная книга из анекдота? Где первые три главы:

- Что такое PHP?

- Кто такие хакеры?

- Как стать хакером?

:D

По теме: обычно использую следующую защиту входных данных на сайтах...


foreach($_GET as $key => $val) {
$$key = stripslashes(strip_tags(htmlspecialchars($val, ENT_QUOTES)));
}
foreach($_POST as $key => $val) {
if (gettype ($val)!='array') {
$$key = stripslashes(strip_tags(htmlspecialchars($val, ENT_QUOTES)));
} else {
foreach($val as $k => $v) {
$$val[$k] = stripslashes(strip_tags(htmlspecialchars($v, ENT_QUOTES)));
}
$$key=$val;
}
}
Ответы на вопрос - https://answers.net.pl
Y5
На сайте с 16.07.2009
Offline
10
#5


<?
$post_arr=implode('.',$_POST);
$get_arr=implode('.',$_GET);
$cook_arr=implode('.',$_COOKIE);
$post_arr_key=implode('.',@array_flip($_POST));
$get_arr_key=implode('.',@array_flip($_GET));
$cook_arr_key=implode('.',@array_flip($_COOKIE));
$other_shtuki=@file_get_contents('php://input');
$cracktrack = strtolower($post_arr.$get_arr.$cook_arr.$post_arr_key.$get_arr_key.$cook_arr_key.$other_shtuki);
$wormprotector = array('union','select','substring','/**/'); //тут дополни по своему вкусу кейворды SQL- и PHP-инжекторов
$checkworm = str_replace($wormprotector, '*', $cracktrack);
if ($cracktrack != $checkworm)
die("");
?>

(c)M4g

[Удален]
#6

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

K
На сайте с 19.03.2008
Offline
159
kkc
#7

blacks, не все из этих параметров можно в .htaccess менять, это зависит от настроек хоста. Так что перед тем, как менять проверьте, сработает ли это на вашем хостинге.

aleksey_php
На сайте с 17.03.2008
Offline
53
#8
blacks:
Немного запутался в следующем:
1. safe_mode должен быть выключен или выключен?

Ещё бы тут не запутаться... :D

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

A2
На сайте с 11.02.2007
Offline
49
#9
Prior:
Это случаем не известная книга из анекдота? Где первые три главы:
- Что такое PHP?
- Кто такие хакеры?
- Как стать хакером?
:D

не, это на самом деле самоучитель по PHP для начинающих с упором на безопасность.

B
На сайте с 04.12.2008
Offline
69
#10
ewg777:
Вы не туда идёте. Если у Вас кривая фильтрация входящих данных, тут уже htaccess не помощник.

Вы о том что загружается через формы на сайт?

Aspid2:
blacks
М. Низамутдинов "Тактика защиты и нападения на web-приложения", 2005
М. Фленов "PHP глазами хакера", 2005

Спасибо :)

Придется читать, читать... 🙅 - времени катастрофически не хватает

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

А если я с помощью htaccess сократил отображение/к-во информации в заголовке

И переписал модреврайтом php на html

neolord:
лучше запретить их вызов без вашего ведома.

- вы про администратора сервера?

- а если он их не закрыл/отключил?

- проверять вкл/выкл через php инфо?

Prior:
По теме: обычно использую следующую защиту входных данных на сайтах...
y4b53:
(c)M4g

Я с PHP не очень знаком 🙄

Как это применять?

neolord:
такой мудацкий метод что и придумать хуже наверное нельзя.

вы про y4b53 ?

kkc:
Так что перед тем, как менять проверьте, сработает ли это на вашем хостинге.

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий