Как исправить проблемы php XSS

#php #xss

#php #xss

Вопрос:

Я выполнил сканирование своего PHP-кода с помощью инструмента AppScan Source (от HCL Software) и обнаружил, что существует почти 350 проблем типа XSS различных шаблонов.

Хотите знать, какой хороший способ в PHP их исправить? Большинство из них связано с html, который мы повторяем или добавляем динамически.

Пример строки, которая имеет XSS при сканировании, приведен ниже

 echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">'
 

Комментарии:

1. С этой строкой нет проблем с XSS, если только вы не хотите выводить эти данные в виде XML?

2. Ваш вопрос не так ясен. Если я думаю, что вы улучшили это, то вот ваш ответ. Попробуйте обновить свой вопрос, чтобы лучше понять, что вы пытаетесь сделать.

3. мое сканирование показывает, что существует проблема с XSS с lin @MagnusEriksson

4. Возможно, сканер пожаловался на значение в xmlns , поскольку оно указывает на внешний источник. Не случайно, что механизмы сканирования отмечают это как уязвимость.

Ответ №1:

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

Мы хотим предотвратить это. Поскольку вы используете PHP, это не будет решено с помощью http://htmlpurifier.org /. Вам придется использовать другой метод. Что вы можете попробовать, так это следующие варианты:

  • Зашифруйте свои значения внутри оператора echo.
  • Код вашего приложения никогда не должен выводить данные, полученные в качестве входных данных, непосредственно в браузер, не проверяя их на наличие вредоносного кода.

Это простые шаги для предотвращения атаки XSS:

  1. Тренируйте и поддерживайте осведомленность.
  • Чтобы обеспечить безопасность вашего веб-приложения, все, кто участвует в создании веб-приложения, должны знать о рисках, связанных с уязвимостями XSS. Вы должны обеспечить соответствующее обучение безопасности для всех ваших разработчиков, сотрудников отдела контроля качества, DevOps и системных администраторов. Вы можете начать с ссылки на эту страницу.
  1. Не доверяйте никакому пользовательскому вводу.
  • Обрабатывайте весь пользовательский ввод как ненадежный. Любой пользовательский ввод, который используется как часть вывода HTML, создает риск XSS. Обрабатывайте ввод от аутентифицированных и / или внутренних пользователей так же, как вы обрабатываете общедоступный ввод.
  1. Используйте экранирование / кодирование.
  • Используйте соответствующую технику экранирования / кодирования в зависимости от того, где должен использоваться пользовательский ввод: HTML escape, JavaScript escape, CSS escape, URL escape и т. Д. Используйте существующие библиотеки для экранирования, не пишите свои собственные, если это не является абсолютно необходимым.
  1. Очистите HTML.
  • Если пользовательский ввод должен содержать HTML, вы не можете его экранировать / кодировать, потому что это нарушит допустимые теги. В таких случаях используйте надежную и проверенную библиотеку для анализа и очистки HTML. Выберите библиотеку в зависимости от вашего языка разработки, например, HtmlSanitizer для .NET или SanitizeHelper для Ruby on Rails.
  1. Установите флаг HttpOnly.
  • Чтобы смягчить последствия возможной уязвимости XSS, установите флаг HttpOnly для файлов cookie. Если вы это сделаете, такие файлы cookie не будут доступны через JavaScript на стороне клиента.
  1. Используйте политику безопасности контента.
  • Чтобы смягчить последствия возможной уязвимости XSS, также используйте политику безопасности контента (CSP). CSP — это заголовок HTTP-ответа, который позволяет вам объявлять динамические ресурсы, которые разрешено загружать в зависимости от источника запроса.
  1. Регулярно сканируйте (с помощью Acunetix).
  • Уязвимости XSS могут быть введены вашими разработчиками или через внешние библиотеки / модули / программное обеспечение. Вы должны регулярно проверять свои веб-приложения с помощью сканера веб-уязвимостей, такого как Acunetix. Если вы используете Jenkins, вам следует установить плагин Acunetix для автоматического сканирования каждой сборки.

Я приведу здесь два коротких примера кодирования на PHP: Вы можете попробовать htmlspecialchars, которые я предложил вам ранее. Я приведу пример со строкой кода, которую вы указали, на ваш вопрос.

 echo '<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">'
 

Будет изменен на:

 echo htmlspecialchars('<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">', ENT_QUOTES, 'UTF-8');
 

Вы также можете использовать кодировщик html и поместить его, например, в echo:

 echo "amp;<OpenSearchDescription xmlns=amp;quot;http://a9.com/-/spec/opensearch/1.1/amp;quot; xmlns:moz=amp;quot;http://www.mozilla.org/2006/browser/search/amp;quot;amp;>"
 

Все это дает результат:
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/"> .

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

В Google Code University также есть обучающие видеоролики по веб-безопасности:

РЕДАКТИРОВАТЬ: этот веб-сайт также может вам помочь. http://htmlpurifier.org / <- это переписывает ваш код. Как сказано в обзоре IRIS: «Я просто хотел бы сказать, что мы используем HTML Purifier в IRIS для фильтрации электронных писем от XSS-атак, и мы были более чем впечатлены». Посмотрите на это, это может вам помочь.

Комментарии:

1. Я удалю свою старую и обновлю эту более свежую версию. Извините за возможную путаницу.

2. Я попробовал echo htmlspecialchars(‘<OpenSearchDescription xmlns=» a9.com/-/spec/opensearch/1.1 » xmlns:moz=» mozilla.org/2006/browser/search «>’, ENT_QUOTES, ‘UTF-8’); и обнаружил, что после повторного сканирования я получил ту же проблему, о которой сообщалось в отчете о проверке. Затем изменено на echo «< OpenSearchDescription xmlns=» a9.com/-/spec/opensearch/1.1/amp;quot ; xmlns: moz=» mozilla.org/2006/browser/search/amp;quot ;amp;gt ;» и обнаружил, что сканирование привело к нулевым проблемам. Это означает, что с помощью функции я могу определенно защитить динамический сайт, но для статического я должен конвертировать и использовать

3. Рад, что это помогло, вы могли бы просто использовать html-кодировщик онлайн, например: convertstring.com/nl/EncodeDecode/HtmlEncode чтобы закодировать ваши строки.

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

5. У меня была такая же проблема, когда я помогал вам. Что вам нужно сделать, это просто удалить первые и последние несколько символов. Вам нужны только amp;< amp;quot;amp;> части и в конце.