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