npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

xss-defender

v1.0.3

Published

A standalone library for XSS sanitization and detection.

Readme

XssDefender

Надёжная защита от XSS‑атак для современных веб‑приложений на TypeScript

npm build

XssDefender — это лёгкая TypeScript‑библиотека для детектирования и нейтрализации XSS‑векторов, включая Unicode‑обфусцированные скрипты, javascript:‑URL, data:‑URI, CSS‑expression() и десятки других приёмов, которые остаются актуальными и завтра.

Ключевые особенности

  • Глубокая эвристика — расширенные регулярные выражения ловят даже нестандартные и смешанные регистром вставки.
  • Гибкая конфигурация — разрешайте только нужные теги/атрибуты, управляйте логированием.
  • Безопасность по умолчанию — если тег не разрешён, он будет либо удалён, либо закодирован.
  • Полная типизация — написано на TypeScript, API удобно использовать в Node .js и браузере.
  • Продуманное логирование — лаконичное или подробное, чтобы быстро разбирать реальные инциденты.
  • Высокое покрытие тестами — десятки edge‑кейсов уже в репозитории.

Установка

npm i xss-defender
# или
yarn add xss-defender

Библиотека не имеет внешних зависимостей и легко встраивается в любую сборку.

Быстрый старт

import { XssDefender } from "xss-defender";

const defender = new XssDefender();

defender.sanitizeString(`<script>alert('XSS')</script>`);
// => ""

defender.hasXssRisks("<img src=x onerror=alert(1)>");
// => true

Кастомная конфигурация

import {
  XssDefender,
  DEFAULT_SANITIZATION_CONFIG,
  SanitizationConfig,
} from "xss-defender";

const config: Partial<SanitizationConfig> = {
  ...DEFAULT_SANITIZATION_CONFIG,
  allowedTags: ["p", "a"],
  allowedAttributes: ["href"],
  stripIgnoreTag: true,
  enableLogging: true,
  logFormat: "detailed",
};

const defender = new XssDefender(config);

API

| Метод | Описание | | ---------------------------------- | -------------------------------------------------------------------- | | sanitizeString(value) | Возвращает очищенную строку. null/undefined/"""". | | hasXssRisks(value) | true, если в строке найден потенциальный XSS. | | sanitizeObject(obj) | Рекурсивно проходит по объекту/массиву и очищает все строковые поля. | | sanitizeHtmlForElement(el, html) | Безопасно устанавливает innerHTML DOM‑элемента. | | checkUrlParams(params) | Анализирует URL‑параметры: { isSafe, issues[] }. | | setConfig(partial) | Патч‑обновление конфигурации на лету. | | getConfig() | Текущая конфигурация (readonly). |

Параметры конфигурации

| Поле | Тип | По умолчанию | Значение | | ------------------- | ------------------------ | ---------------------------------------------- | ----------------------------------------------------------------- | | allowedTags | string[] | список распространённых безопасных тегов | Какие теги оставить живыми. | | allowedAttributes | string[] | ["id","class","style","href","target","src"] | Разрешённые атрибуты для разрешённых тегов. | | stripIgnoreTag | boolean | false | true — вырезать запрещённые теги, false — HTML‑кодировать их. | | enableLogging | boolean | false | Включить консольное логирование. | | logFormat | 'simple' \| 'detailed' | 'simple' | Формат логов. |

Совет: оставляйте stripIgnoreTag = true, если очищаете данные перед вставкой в DOM. Кодирование полезно при хранении/отображении «как есть».

Проверка URL‑параметров

const { isSafe, issues } = defender.checkUrlParams({
  search: "<script>alert(1)</script>",
  page: "2",
});

if (!isSafe) {
  console.warn("Опасные параметры!", issues);
}

Работа с React/Vue/Angular

sanitizeString подходит для любого UI‑фреймворка. Просто пропускайте туда данные, полученные от пользователя или API, прежде чем показать их в dangerouslySetInnerHTML / v-html / innerHTML.

Тесты

npm test

В репозитории лежат spec‑тесты на Jest (см. spec/core/xss-defender.spec.ts). Они демонстрируют работу со сложными нагрузками: смешанный регистр, скрытые комментарии, Unicode‑экранирование.

План развития

  • 🔍 Расширяемые паттерны — возможность добавлять/отключать собственные регулярки.
  • ⚙️ Web‑Worker режим для тяжёлых потоков очистки.
  • 🧩 Плагины (например, отчёты Sentry).

Ваши PR и идеи приветствуются!

Вклад и поддержка

  1. Сделайте fork и создайте ветку feature/<название>.
  2. Запустите npm i и npm test — убедитесь, что все тесты зелёные.
  3. Оформите PR с описанием мотивации и изменений.

Перед отправкой не забудьте добавить/обновить тесты для новых сценариев.

Лицензия

MIT © 2025 — Вы.