предотвращение межсайтового скриптинга в wtrealm

Мы создаем сообщение, подобное следующему, которое является SignInRequestMessage

var message = Microsoft.IdentityModel.Protocols.WSFederation.WSFederationMessage.CreateFromUri(Request.Url);

Он имеет следующие свойства:

Microsoft.IdentityModel.Protocols.WSFederation.SignInRequestMessage

Action: "wsignin1.0"

message.Parameters

Count = 2
    [0]: {[wa, wsignin1.0]}
    [1]: {[wtrealm, javascript:alert(/test/)]}

Обратите внимание, что второй параметр в сообщении — это javascript, и когда adfs перенаправляет на него, мы фактически видим предупреждение.

Это происходит, когда пользователь вошел в систему, и в рамках того же сеанса мы пытаемся ввести URL-адрес, как показано ниже.

https://localhost/StarterSTSLib/Login.aspx?wa=wsignin1.0&wtrealm=javascript:alert(/test/)

Есть ли у кого-нибудь предложения о том, как предотвратить wtrealm из-за этой уязвимости межсайтового скриптинга?


person VoodooChild    schedule 16.08.2012    source источник
comment
Интересный вопрос. У меня нет под рукой adfs, и прежде чем я на самом деле попробую, я задаюсь вопросом, какие проблемы с безопасностью это может создать (если таковые имеются).   -  person Wiktor Zychla    schedule 16.08.2012


Ответы (2)


Готовая к работе STS, такая как ADFS, не полагается на wtrealm для ответа на токен. Тот, кто управляет ADFS, настроит приложение/проверяющую сторону и укажет точку ednpoint, в которую отправляется токен.

STS, сгенерированный WIF «добавить ссылку sts», будет использовать wtrealm в качестве конечной точки для публикации токена. Вот почему это STS разработки, а не готовая к производству.

Короче говоря, зависит от реализации STS, использовать ли wtrealm в качестве конечной точки. У вас должен быть репозиторий, который связывает области с URL-адресами, такими как adfs.

person woloski    schedule 16.08.2012
comment
Мы используем реализацию StarterSTS/IdentityServer. Не могли бы вы сказать, что это представляет тот же риск, который вы упомянули в своем ответе. - person VoodooChild; 17.08.2012
comment
identityserver поддерживает указание конечной точки для каждой проверяющей стороны в их административной консоли, например adfs. Они также поддерживают указание wreply в запросе на вход (путем включения параметра конфигурации, который отключен по умолчанию), но не уверены, делают ли они что-то, чтобы избежать открытых перенаправлений/межсайтовых сценариев. - person woloski; 17.08.2012

Здесь вам нужна кодировка URL. Небуквенно-цифровые символы необходимо заменить их представлениями %xx (hex)...

https://example.com/StarterSTSLib/Login.aspx?wa=wsignin1.0&wtrealm=javascript%3aalert%28%2ftest%2f%29

person atk    schedule 16.08.2012