1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/ufangx-AntiXssUF

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 7.2 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 17.03.2025 02:42 f53fa16

Фильтрация кросс-сайтных скриптов (XSS)

Версия NuGet Статус сборки Лицензия GitHub Версия GitHub

netstandard2.1 netstandard2.0 netcoreapp2.1 netcoreapp3.1 netframework4.6.1

Фильтр XSS с использованием белого списка, поддерживающий различные стратегии фильтрации. Можно выбрать подходящую стратегию фильтрации в зависимости от бизнес-сцены или динамически привязывать стратегию фильтрации в зависимости от роли пользователя. Поддерживает конфигурацию проекта OWASP AntiSamy и конфигурацию в формате JSON;

Способ использования:Добавьте зависимость в класс запуска Startup.cs

        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);
        }
        

Не используя внедрение зависимостей и прямое использование

  1. Используя встроенные базовые стратегии
        // использование параметров байндинга для фильтрации стратегии, здесь вам нужно добавить модель байндинг
        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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/ufangx-AntiXssUF.git
git@api.gitlife.ru:oschina-mirror/ufangx-AntiXssUF.git
oschina-mirror
ufangx-AntiXssUF
ufangx-AntiXssUF
master