Skip to main content

Security-oriented Python library for detecting SQLi, SSTI and XSS payloads

Project description

DataFilter - документация

Автор: qwertyvs
Репозиторий: https://github.com/qwertyvs/DataFilter

Оглавление

Кратко о проекте

DataFilter - это лёгкая библиотека на Python, предназначенная для анализа входных данных и обнаружения возможных попыток эксплуатации распространённых веб‑уязвимостей.

Библиотека умеет обнаруживать признаки:

  • SQL Injection (SQLi)
  • Server-Side Template Injection (SSTI)
  • Cross-Site Scripting (XSS)

DataFilter выполняет статический анализ строк и ищет сигнатуры, характерные для вредоносных полезных нагрузок.


Установка

  1. Установите библиотеку:
pip install DataFilter
  1. Импортируйте нужные функции:
from datafilter import strSQLICheck, strSSTICheck, strXSSCheck, strMultCheck

Ожидаемое поведение

Обычный пользователь

Обычный пользователь отправляет обычные значения:

  • имена пользователей
  • email
  • короткие текстовые поля

В этом случае библиотека должна вернуть:

status = OK
issecure = True

Нарушитель (злоумышленник)

Злоумышленник может отправлять вредоносные полезные нагрузки, например:

1' OR 1=1 --
<script>alert(1)</script>
{{7*7}}

В таких случаях библиотека должна вернуть:

status = FOUND
или
status = DETECTED

Значения статусов

Статус: Значение

OK: Подозрительных паттернов не обнаружено
FOUND*: Обнаружены подозрительные признаки
DETECTED: Высокая вероятность вредоносной нагрузки

* В strSQLICheck означает, что найдено ключевое слово sql, в контексте проверки осмысленного текста на английском языке является защитой от ложных срабатываний


Глобальные параметры

В библиотеке есть три глобальных параметра, отвечающих за защиту от слишком долгого выполнения регулярных выражений.

sqli_patern_time = 0.1
ssti_patern_time = 0.1
xss_patern_time = 0.2

Эти значения задают максимальное время выполнения одного regex‑паттерна в секундах.

Если выполнение превышает тайм‑аут, библиотека помечает это как:

dos_payload

Это может указывать на попытку ReDoS‑атаки (нагрузки через сложные регулярные выражения).

Если процессор досточно мощный можно уменьшить, переопределив в программе


Классы

DataFilterException

Внутреннее исключение библиотеки.

Возникает если:

  • переданы неверные типы данных
  • произошла внутренняя ошибка

Пример сообщения:

INVALID_INPUT: expected str

filterReport

Структура отчёта, возвращаемая всеми функциями проверки.

Поля:

Поле: Описание

data: исходная проверенная строка
type: тип проверки (SQLI / SSTI / XSS)
status: итоговый статус
detections: список сработавших сигнатур
issecure: True если строка считается безопасной
processtime: время выполнения проверки в наносекундах


Функции

strSQLICheck()

Проверяет строку на признаки SQL Injection.

Параметры:

data : str
allowedSymbols : str

Если параметр allowedSymbols задан и строка содержит символ вне этого набора, функция сразу возвращает:

status = DETECTED
detections = ["banned_symbol_usage"]

Функция ищет такие признаки SQL‑инъекций как:

  • UNION SELECT
  • SQL комментарии
  • логические таутологии
  • time‑based атаки
  • ключевые SQL слова

Возвращает объект filterReport.


strSSTICheck()

Проверяет строку на Server-Side Template Injection.

Обнаруживает конструкции, используемые в шаблонизаторах.

Примеры:

{{ ... }}
{% ... %}
${ ... }
#{ ... }

Также ищет опасные вызовы:

eval()
exec()
os.popen()
Runtime.getRuntime()

Возвращает filterReport.


strXSSCheck()

Проверяет строку на признаки Cross-Site Scripting.

Перед анализом строка проходит нормализацию:

  1. URL‑декодирование
  2. декодирование HTML‑сущностей
  3. удаление управляющих символов
  4. нормализация Unicode

После этого выполняется поиск таких паттернов как:

  • <script>
  • протокол javascript:
  • обработчики событий onload=
  • <iframe>
  • теги svg или math

Возвращает filterReport.


strMultCheck()

Позволяет выполнить несколько проверок сразу.

Пример:

strMultCheck(data, modes=["SQLI","SSTI","XSS"])

Возвращает словарь:

{
 "SQLI": filterReport,
 "SSTI": filterReport,
 "XSS": filterReport,
 "total_status": str,
 "total_issecure": bool,
 "total_processtime": int
}

Пример использования

from DataFilter import strMultCheck

payload = "1' OR 1=1 --"

result = strMultCheck(payload)

print(result["SQLI"].status)
print(result["total_status"])

Обратная связь

Контакты

Пожалуйста помните, что ни одно решение не является идеальным, и DataFilter - не исключение.

Если у вас есть вопросы или предложения, вы можете написать мне.
Я постараюсь ответить как только появится возможность (обычно в течение одного рабочего дня).

Спасибо за использование DataFilter!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

web_datafilter-0.1.0.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

web_datafilter-0.1.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file web_datafilter-0.1.0.tar.gz.

File metadata

  • Download URL: web_datafilter-0.1.0.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.1

File hashes

Hashes for web_datafilter-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c797fee375be24526d3993b6f00fd9281e42dc8d862fc9ba9b6d309d8cb18cd3
MD5 ad260bc85f8d1968305fbfbf09840eea
BLAKE2b-256 7ebbd8d4b36b1198017b3d828b6b951a9da5e149ce865819124d890072fb8e4d

See more details on using hashes here.

File details

Details for the file web_datafilter-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: web_datafilter-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.1

File hashes

Hashes for web_datafilter-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 13a9d3f2c2e3705ff0ff589dfc836a7fcbea91e42eed10a4cb931a8761ce67c0
MD5 525bcbbc777d97582049eb88febefa82
BLAKE2b-256 96a65526c546906e8a6bda81ec31307cfe1071801868eadf88c6c52380c818a7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page