Есть ли какие-нибудь анти-XSS библиотеки для ASP.Net? - PullRequest
1 голос
/ 21 апреля 2011

Я читал несколько вопросов, пытаясь найти хорошее решение для предотвращения XSS в предоставленных пользователем URL (которые превращаются в ссылку).Я нашел один для PHP , но я не могу найти ничего для .Net.

Для ясности, все, что мне нужно, - это библиотека, которая сделает текст, предоставленный пользователем, безопасным (в том числе unicode gotchas?) И сделает URL-адреса, предоставленные пользователем безопасными (используется в тегах a или img)

Я заметил, что StackOverflow имеет очень хорошую защиту XSS, но, к сожалению, эта часть их реализации Markdown отсутствует в MarkdownSharp.(и я использую MarkdownSharp для большей части моего контента)

Ответы [ 4 ]

6 голосов
/ 21 апреля 2011

Microsoft располагает библиотекой Anti-Cross Site Scripting * ;Вы могли бы начать с рассмотрения и определения того, соответствует ли оно вашим потребностям.У них также есть некоторые рекомендации о том, как избежать атак XSS, которым вы могли бы следовать, если решите, что предлагаемый ими инструмент не совсем то, что вам нужно.

2 голосов
/ 22 апреля 2011

Здесь нужно рассмотреть несколько вещей.Во-первых, у вас есть ASP.NET Request Validation , который поймает многие из распространенных шаблонов XSS.Не полагайтесь исключительно на это, но это приятное небольшое добавление.

Затем вы хотите проверить ввод по белому списку, и в этом случае ваш белый список полностью соответствуетожидаемая структура URL.Попробуйте использовать Uri.IsWellFormedUriString для соответствия RFC 2396 и RFC 273:

var sourceUri = UriTextBox.Text;
if (!Uri.IsWellFormedUriString(sourceUri, UriKind.Absolute))
{
  // Not a valid URI - bail out here
}

AntiXSS имеет Encoder.UrlEncode, который отлично подходит для кодирования строки, добавляемой к URL, то есть вСтрока запроса.Проблема в том, что вы хотите взять исходную строку и , а не экранирующие символы, такие как косая черта, в противном случае http://troyhunt.com заканчивается как http%3a%2f%2ftroyhunt.com, и у вас возникла проблема.

Какконтекст, для которого вы кодируете, является атрибутом HTML (это атрибут «href», который вы устанавливаете), вы хотите использовать Encoder.HtmlAttributeEncode:

MyHyperlink.NavigateUrl = Encoder.HtmlAttributeEncode(sourceUri);

Это означает, что строка типа http://troyhunt.com/<script> получит экранирование до http://troyhunt.com/&lt;script> - но, конечно, проверка запроса в любом случае поймает его первым.

Также взгляните на OWASP Top 10 Unvalidated Redirects and Forwards .

0 голосов
/ 28 апреля 2017

Я полагаюсь на HtmlSanitizer .Это библиотека .NET для очистки фрагментов HTML и документов от конструкций, которые могут привести к атакам XSS .Он использует AngleSharp для анализа, манипулирования и рендеринга HTML и CSS.

Поскольку HtmlSanitizer основан на надежном анализаторе HTML, он также может оградить вас от преднамеренного или случайного «отравления тегами», если оно недопустимоHTML в одном фрагменте может повредить весь документ, что приведет к нарушению макета или стиля.

Использование:

var sanitizer = new HtmlSanitizer();
var html = @"<script>alert('xss')</script><div onload=""alert('xss')"""
    + @"style=""background-color: test"">Test<img src=""test.gif"""
    + @"style=""background-image: url(javascript:alert('xss')); margin: 10px""></div>";
var sanitized = sanitizer.Sanitize(html, "http://www.example.com");
Assert.That(sanitized, Is.EqualTo(@"<div style=""background-color: test"">"
    + @"Test<img style=""margin: 10px"" src=""http://www.example.com/test.gif""></div>"));

Есть онлайн-демонстрация , плюс еще .NET Fiddle вы можете играть с.

(копировать / вставить из их readme)

0 голосов
/ 21 апреля 2011

Я думаю, что вы можете сделать это самостоятельно, создав массив символов и другой массив с кодом,
если вы нашли символы из массива, замените его кодом, это поможет вам![но определенно не на 100%]

массив символов
<<br>>
...

Code Array
& lt;
& gt;
...

...