Регистрация контейнеров в Docker

Перекрестная проводка это как сводная ссылка из бета-версии SO-документации, которая отключается.

Проблема

Межсайтовый скриптинг является непреднамеренным выполнение удаленного кода веб-клиентом. Любое веб-приложение может оказаться в XSS, если оно принимает входные данные от пользователя и выводит его непосредственно на веб-страницу. Если вход включает HTML или JavaScript, удаленный код может быть выполнен, когда это содержимое отображается веб-клиентом.

Например, если сторонняя сторона содержит файл JavaScript:

// http://example.com/runme.js
document.write("I'm running");

И приложение PHP напрямую выводит строку, переданную в нее:

' . $_GET['input'] . '
';

Если параметр unchecked GET содержит , то вывод скрипта PHP будет:

Идет запуск стороннего JavaScript, и пользователь увидит «Я запущен» на веб-странице.

Решение

Как правило, никогда не доверяйте вводам, поступающим из клиент. Каждое значение GET, POST и cookie может быть вообще чем угодно и поэтому должно быть проверено. При выводе любого из этих значений удалите их, чтобы они не были оценены неожиданным способом.

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

PHP предоставляет несколько способов избежать вывода в зависимости от контекста.

Функции фильтра

Функции фильтра PHPs позволяют входным данным для скрипта php быть дезинфицированным или проверенным в многими способами ]. Они полезны при сохранении или выводе на вход клиента.

Кодировка HTML

htmlspecialchars преобразует любые специальные символы HTML в их кодировки HTML, то есть они будут тогда не обрабатывается как стандартный HTML. Чтобы исправить наш предыдущий пример, используя этот метод:

' . htmlspecialchars($_GET['input']) . '
'; // or echo '
' . filter_input(INPUT_GET, 'input', FILTER_SANITIZE_SPECIAL_CHARS) . '
';

Вывод:

<script src="http://example.com/runme.js"></script>

Все, что находится внутри тега

, будут интерпретироваться not как тег JavaScript браузером, а вместо этого как простой текстовый узел. Пользователь будет безопасно видеть:


Кодировка URL

При выводе динамически сгенерированного URL PHP предоставляет функцию urlencode для безопасного вывода допустимых URL-адресов. Например, если пользователь может вводить данные, которые становятся частью другого параметра GET:

Link';

Любой вредоносный ввод будет преобразован в параметр кодированного URL.

Использование специализированных внешних библиотек или списков OWASP AntiSamy

Иногда вам нужно отправить HTML или другие входы кода. Вам необходимо будет сохранить список авторизованных слов (белый список) и неавторизованный (черный список).

Вы можете загружать стандартные списки, доступные на веб-сайте OWASP AntiSamy . Каждый список подходит для определенного вида взаимодействия (ebay api, tinyMCE и т. Д.). И это с открытым исходным кодом.

Существуют библиотеки, которые могут фильтровать HTML и предотвращать атаки XSS для общего случая и выполнять как минимум, так и списки AntiSamy с очень простым использованием. Например, у вас есть HTML Purifier

2
задан tweetysat 18 January 2019 в 13:21
поделиться

1 ответ

Мне не удалось найти явного объяснения этому на сайте докера, но для меня это выглядит следующим образом.

Во-первых, когда вы запускаете свой контейнер (docker run), докер выделяет для этого основной процесс (PID 1), и контейнер считается живым, пока этот процесс не завершается. Этот процесс имеет свои собственные stdin, stdout и stderr, которые, кстати, подключены к вашей консоли (флаг -it).

Это обработчики, которые собираются и регистрируются демоном Docker.

Когда вы запускаете docker exec, он создает новый процесс в контейнере, и этот новый процесс не наследует обработчики io (stdin, stdout и stderr) из PID 1. Итак, все новые сеансы, созданные docker exec, похоже, имеют свои собственные, отдельные потоки, которые не регистрируются демоном.

0
ответ дан grapes 18 January 2019 в 13:21
поделиться
Другие вопросы по тегам:

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