PHP Session Security

В ASP.Net Core 2.0 (MVC) это работает, чтобы создать абсолютный URL-адрес для действия.

var url = Url.Action("About", "Home", new { /*Route values here*/ }, Request.Scheme);
125
задан mattytommo 4 May 2012 в 09:39
поделиться

11 ответов

Существует несколько вещей сделать для хранения сессии безопасной:

  1. Используйте SSL при аутентификации пользователей или выполнении секретных операций.
  2. Повторно создайте идентификатор сессии каждый раз, когда уровень безопасности изменяется (такие как вход в систему). Можно даже повторно создать идентификатор сессии каждый запрос, если Вы желаете.
  3. Имейте сессии, испытывают таймаут
  4. Не используйте регистр globals
  5. Аутентификация хранилища детализирует на сервере. Таким образом, не отправляйте детали, такие как имя пользователя в cookie.
  6. Проверьте $_SERVER['HTTP_USER_AGENT']. Это добавляет маленький барьер для перехвата сеанса. Можно также проверить IP-адрес. Но это вызывает проблемы для пользователей, которые имеют изменяющийся IP-адрес из-за выравнивания нагрузки на нескольких интернет-соединениях и т.д. (который имеет место в нашей среде здесь).
  7. Заблокируйте вниз доступ к сессиям в файловой системе или используйте пользовательскую обработку сессии
  8. Поскольку секретные операции полагают, что требование вошло в систему пользователи для предоставления их authenication подробной информации снова
88
ответ дан grom 4 May 2012 в 09:39
поделиться

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

15
ответ дан saint_groceon 4 May 2012 в 09:39
поделиться

Я думаю одна из основных проблем (который обращается в PHP 6), register_globals. Прямо сейчас один из стандартных методов раньше избегал register_globals должен использовать $_REQUEST, $_GET или $_POST массивы.

"Корректный" способ сделать это (с 5,2, хотя это - немного багги там, но стабильный с 6, который прибывает скоро) через фильтры.

Таким образом вместо:

$username = $_POST["username"];

Вы сделали бы:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

или даже просто:

$username = filter_input(INPUT_POST, 'username');
11
ответ дан mattytommo 4 May 2012 в 09:39
поделиться
  • 1
    " возможный источник беспорядка - то, что в выводе разности мерзавца, пробельные ошибки только выделяются в строках, которые представлены, не те, которые удалены " Точно! И нет никакого способа показать его также для удаленных строк? (эй, it' s разность:)) – radarek 10 March 2011 в 15:38

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

Вместо этого я выбрал хранение сессий в отдельной базе данных для доменов на моих серверах. Таким образом, ни у кого в файловой системе нет доступа к той информации о сессии. Это было действительно полезно с phpBB прежде 3.0 (они с тех пор зафиксировали это), но это - все еще хорошая идея, я думаю.

5
ответ дан Eric Lamb 4 May 2012 в 09:39
поделиться
  • 1
    Добавьте - глобальный для установки в ~/.gitconfig – simlmx 25 July 2013 в 15:31

Необходимо быть уверены, что данные сессии безопасны. Путем рассмотрения php.ini или использования phpinfo () можно найти Вас настройками сессии. _session.save_path_ говорит Вам, где они сохраняются.

Проверка разрешение папки и ее родителей. Это не должно быть общедоступно (/tmp) или быть доступно другими веб-сайтами на Вашем общем сервере.

Принятие Вы все еще хотите использовать php сессию, можно установить php, чтобы использовать другую папку путем изменения _session.save_path_ или сохранить данные в базе данных путем изменения _session.save_handler_.

Вы смогли устанавливать _session.save_path_ в своем php.ini (некоторые поставщики позволяют его), или для апача + mod_php, в .htaccess файле в Вашей корневой папке сайта: php_value session.save_path "/home/example.com/html/session". Можно также установить его во время выполнения с _session_save_path () _.

Проверка учебное руководство или Zend_Session_SaveHandler_DbTable Chris Shiflett для установки и альтернативный обработчик сессий.

2
ответ дан Dinoboff 4 May 2012 в 09:39
поделиться

Если Вы, которых Вы используете session_set_save_handler () , можно установить собственный обработчик сессий. Например, Вы могли сохранить свои сессии в базе данных. Обратитесь к комментариям php.net для примеров обработчика сессий базы данных.

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

2
ответ дан ejunker 4 May 2012 в 09:39
поделиться

Основная проблема с сессиями PHP и безопасностью (помимо перехвата сеанса) идет с тем, в какой среде Вы находитесь. По умолчанию PHP хранит данные сессии в файле во временном каталоге ОС. Без любой специальной мысли или планирующий это - мировой читаемый каталог, таким образом, вся Ваша информация о сессии общедоступна любому с доступом к серверу.

Что касается поддержания сессий по нескольким серверам. В той точке было бы лучше переключиться, PHP пользователю обработал сессии, где это звонит, Ваши обеспеченные функции к CRUD (создайте, считайте, обновите, удалите), данные сессии. В той точке Вы могли хранить информацию сессии в базе данных или кэш-памяти как решение так, чтобы все серверы приложений имели доступ к данным.

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

3
ответ дан John Downey 4 May 2012 в 09:39
поделиться

Я проверил бы и IP и Агент пользователя, чтобы видеть, изменяются ли они

if ($_SESSION['user_agent'] != $_SERVER['HTTP_USER_AGENT']
    || $_SESSION['user_ip'] != $_SERVER['REMOTE_ADDR'])
{
    //Something fishy is going on here?
}
2
ответ дан Teifion 4 May 2012 в 09:39
поделиться

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

Вот польза учебное руководство на setTimer () и clearTimer ().

3
ответ дан helloandre 4 May 2012 в 09:39
поделиться

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

9
ответ дан raspi 4 May 2012 в 09:39
поделиться
  • 1
    Не, насколько я знаю, но я, возможно, очень легко пропустил что-то. Я предполагаю, что логика то, что с тех пор you' ре вынимая те строки, кто заботится, были ли у них пробельные ошибки или нет?:) – Mark Longair 11 March 2011 в 01:46

Мои два (или более) цента:

  • Не доверять никому
  • Фильтровать ввод, экранировать вывод (файлы cookie, данные сеанса также являются вашими вводными)
  • Избегайте XSS (держите свой HTML в правильном формате, взгляните на PHPTAL или HTMLPurifier )
  • Глубокая защита
  • Не раскрывайте данные

Есть крошечная, но хорошая книга по этой теме: Essential PHP Security от Криса Шифлетта .

Essential PHP Security http://shiflett.org/images/essential-php-security-small.png

На домашней странице книги вы найдете несколько интересных примеров кода и примеры глав.

Вы можете использовать упомянутую выше технику (IP и UserAgent), описанную здесь: Как избежать кражи личных данных

11
ответ дан 24 November 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: