Попытка передать pci-совместимость, но есть проблема межсайтового скриптинга - PullRequest
4 голосов
/ 12 января 2011

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

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

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

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

GET /? 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 ]

2 голосов
/ 12 января 2011

Запрос: 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, или сделать страницу совершенно другой.


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

0 голосов
/ 22 июля 2011

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

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

Исправлена ​​ошибка

...