Фильтр XSS с использованием белого списка, поддерживающий различные стратегии фильтрации. Можно выбрать подходящую стратегию фильтрации в зависимости от бизнес-сцены или динамически привязывать стратегию фильтрации в зависимости от роли пользователя. Поддерживает конфигурацию проекта OWASP AntiSamy и конфигурацию в формате JSON;
public void ConfigureServices(IServiceCollection services)
{
// Добавляем политики и устанавливаем дефолтную политику
services.AddXssFilter(opt => opt.DefaultSchemeName = "DefaultPolicy")
.AddScheme<AntisamyPolicy>("antisamy", () => File.ReadAllTextAsync(Path.Combine(HostEnvironment.ContentRootPath, "resources/antisamy.xml")))
.AddScheme<AntisamyPolicy>("anythinggoes", () => File.ReadAllTextAsync(Path.Combine(HostEnvironment.ContentRootPath, "resources/antisamy-anythinggoes.xml")))
.AddScheme<AntisamyPolicy>("ebay", () => File.ReadAllTextAsync(Path.Combine(HostEnvironment.ContentRootPath, "resources/antisamy-ebay.xml")))
.AddScheme<AntisamyPolicy>("myspace", () => File.ReadAllTextAsync(Path.Combine(HostEnvironment.ContentRootPath, "resources/antisamy-myspace.xml")))
.AddScheme<AntisamyPolicy>("slashdot", () => File.ReadAllTextAsync(Path.Combine(HostEnvironment.ContentRootPath, "resources/antisamy-slashdot.xml")))
.AddScheme<AntisamyPolicy>("test", () => File.ReadAllTextAsync(Path.Combine(HostEnvironment.ContentRootPath, "resources/antisamy-test.xml")))
.AddScheme<JsonFilterPolicy>("DefaultPolicy", () => File.ReadAllTextAsync(Path.Combine(HostEnvironment.ContentRootPath, "resources/DefaultPolicy.json")));
// Добавляем модели биндеров
services.AddControllers(options =>
{
options.ModelBinderProviders.Insert(0, new RichTextBinderProvider());
});
services.AddControllersWithViews();
}
```. В конструкторе внедряются зависимости
---------------------------------------
```C#
// в зависимости от внедрения
public HomeController(IFilterPolicyFactory policyFactory)
{
this.policyFactory = policyFactory;
}
public async Task<IActionResult> Test(string source)
{
var policyName = "ebay"; // имя стратегии
var filter = await policyFactory.CreateHtmlFilter(policyName); // создание фильтра
var clean = filter.Filters(source); // фильтрация опасного кода
return Content(clean);
}
// стратегия фильтрации модели байндинга
public class TestModel
{
public string Name { get; set; }
[XssSchemeName("ebay")]
public RichText RichText { get; set; }
}
public IActionResult Test(TestModel model)
{
string clean = model?.RichText; // здесь автоматически фильтруется опасный код
return Content(clean ?? string.Empty);
}
// использование параметров байндинга для фильтрации стратегии
public IActionResult Test([XssSchemeName("ebay")] RichText richText)
{
string clean = richText; // здесь автоматически фильтруется опасный код
return Content(clean ?? string.Empty);
}
// использование параметров байндинга для фильтрации стратегии, здесь вам нужно добавить модель байндинг
public IActionResult Test(RichText richText)
{
string clean = richText; // здесь автоматически фильтруется опасный код
return Content(clean ?? string.Empty);
}
// Здесь нет необходимости добавлять модель байндинг
public IActionResult Test(string source)
{
RichText richText = source;
string clean = richText; // здесь автоматически фильтруется опасный код
return Content(clean ?? string.Empty);
}
```2. Указание стратегии
```C#
public IActionResult Test(string source)
{
var policy = new AntisamyPolicy(); // для JSON-формата используйте класс JsonFilterPolicy
policy.Init(File.ReadAllText("c:/www/resources/antisamy-ebay.xml"), "ebay");
var filter = new HtmlFilter(policy);
var clean = filter.Filters(source); // фильтрация опасного кода
return Content(clean ?? string.Empty);
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )