Пытаюсь передать соответствие pci, но возникла проблема с межсайтовым скриптингом

StackOverflow https://stackoverflow.com/questions/4671218

Вопрос

В настоящее время я пытаюсь подтвердить соответствие PCI для одного из сайтов моего клиента, но тестирующая компания обнаруживает уязвимость, которую я не понимаю!

(Сайт удален) информация от тестирующей компании выглядит следующим образом:

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

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

ПОЛУЧАЕМ /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E Хост HTTP/1.0:(удален)

HTTP/1.1 302 Found
Connection: close
Date: Tue, 11 Jan 2011 23:33:19 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Location: http://www.(removed).co.uk/index.aspx?osCsid="><iframe src=foo></iframe>
Set-Cookie: ASP.NET_SessionId=bc3wq445qgovuk45ox5qdh55; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 203

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2>
</body></html>

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

Во-первых, я не могу получить результат, который дал тестировщик, он возвращает только заголовок 200, который не включает местоположение, и не возвращает страницу перемещения объекта.Во-вторых, я не уверен, как (в iis 6) остановить возврат заголовка со строкой запроса в нем!Наконец, почему код в заголовке имеет значение, ведь браузеры на самом деле не будут выполнять код из заголовка http?

Это было полезно?

Решение 2

Оказалось, что у меня есть Response.redirect для любых страниц, доступ к которым осуществляется по https, которые не обязательно должны быть безопасными, и это возвращало местоположение как часть перенаправления.Меняем это на:

Response.Status = "301 Moved Permanently";
Response.AddHeader("Location", Request.Url.AbsoluteUri.Replace("https:", "http:"));
Response.End();

Исправлена проблема

Другие советы

Запрос: GET /?osCsid=%22%3E%3Ciframe%20src=foo%3E%3C/iframe%3E HTTP/1.0 Host:(removed)

А <iframe src=foo></iframe> это проблема здесь.

Текст ответа:

 <html><head><title>Object moved</title></head><body>
 <h2>Object moved to <a href="http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>">here</a>.</h2>
 </body></html>

Ссылка ответа:

  http://www.(removed).co.uk/index.aspx?osCsid=&quot;>&lt;iframe src=foo>&lt;/iframe>

Который содержит содержимое из строки запроса.

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


В качестве примечания, он пытается переслать ваш браузер на эту несуществующую страницу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top