web-datafilter 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- web_datafilter-0.1.0/LICENCE +21 -0
- web_datafilter-0.1.0/PKG-INFO +299 -0
- web_datafilter-0.1.0/README.md +284 -0
- web_datafilter-0.1.0/pyproject.toml +30 -0
- web_datafilter-0.1.0/setup.cfg +4 -0
- web_datafilter-0.1.0/src/DataFilter/DataFilter.py +472 -0
- web_datafilter-0.1.0/src/DataFilter/__init__.py +20 -0
- web_datafilter-0.1.0/src/DataFilter/config.py +3 -0
- web_datafilter-0.1.0/src/web_datafilter.egg-info/PKG-INFO +299 -0
- web_datafilter-0.1.0/src/web_datafilter.egg-info/SOURCES.txt +11 -0
- web_datafilter-0.1.0/src/web_datafilter.egg-info/dependency_links.txt +1 -0
- web_datafilter-0.1.0/src/web_datafilter.egg-info/requires.txt +1 -0
- web_datafilter-0.1.0/src/web_datafilter.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 qwertyvs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: web-datafilter
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Security-oriented Python library for detecting SQLi, SSTI and XSS payloads
|
|
5
|
+
Author-email: qwertyvs <NuhUh@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: security,sqli,xss,ssti,input-validation
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Requires-Python: >=3.8
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENCE
|
|
13
|
+
Requires-Dist: regex
|
|
14
|
+
Dynamic: license-file
|
|
15
|
+
|
|
16
|
+
# DataFilter - документация
|
|
17
|
+
|
|
18
|
+
**Автор:** qwertyvs<br>**Репозиторий:** https://github.com/qwertyvs/DataFilter
|
|
19
|
+
|
|
20
|
+
## Оглавление
|
|
21
|
+
|
|
22
|
+
* [Кратко о проекте](#Кратко-о-проекте)
|
|
23
|
+
* [Установка](#установка)
|
|
24
|
+
* [Ожидаемое поведение](#ожидаемое-поведение)
|
|
25
|
+
|
|
26
|
+
* [Обычный пользователь](#обычный-пользователь)
|
|
27
|
+
* [Нарушитель (злоумышленник)](#нарушитель-злоумышленник)
|
|
28
|
+
* [Значения статусов](#значения-статусов)
|
|
29
|
+
* [Глобальные параметры](#глобальные-параметры)
|
|
30
|
+
* [Классы](#классы)
|
|
31
|
+
|
|
32
|
+
* [DataFilterException](#datafilterexception)
|
|
33
|
+
* [filterReport](#filterreport)
|
|
34
|
+
* [Функции](#функции)
|
|
35
|
+
|
|
36
|
+
* [strSQLICheck()](#strsqlicheck)
|
|
37
|
+
* [strSSTICheck()](#strssticheck)
|
|
38
|
+
* [strXSSCheck()](#strxsscheck)
|
|
39
|
+
* [strMultCheck()](#strmultcheck)
|
|
40
|
+
* [Пример использования](#пример-использования)
|
|
41
|
+
* [Обратная связь](#обратная-связь)
|
|
42
|
+
|
|
43
|
+
# Кратко о проекте
|
|
44
|
+
|
|
45
|
+
**DataFilter** - это лёгкая библиотека на Python, предназначенная для
|
|
46
|
+
анализа входных данных и обнаружения возможных попыток эксплуатации
|
|
47
|
+
распространённых веб‑уязвимостей.
|
|
48
|
+
|
|
49
|
+
Библиотека умеет обнаруживать признаки:
|
|
50
|
+
|
|
51
|
+
- SQL Injection (SQLi)
|
|
52
|
+
- Server-Side Template Injection (SSTI)
|
|
53
|
+
- Cross-Site Scripting (XSS)
|
|
54
|
+
|
|
55
|
+
DataFilter выполняет **статический анализ строк** и ищет сигнатуры,
|
|
56
|
+
характерные для вредоносных полезных нагрузок.
|
|
57
|
+
|
|
58
|
+
------------------------------------------------------------------------
|
|
59
|
+
|
|
60
|
+
# Установка
|
|
61
|
+
|
|
62
|
+
1. Установите библиотеку:
|
|
63
|
+
|
|
64
|
+
``` bash
|
|
65
|
+
pip install DataFilter
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
2. Импортируйте нужные функции:
|
|
69
|
+
|
|
70
|
+
``` python
|
|
71
|
+
from datafilter import strSQLICheck, strSSTICheck, strXSSCheck, strMultCheck
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
------------------------------------------------------------------------
|
|
75
|
+
|
|
76
|
+
# Ожидаемое поведение
|
|
77
|
+
|
|
78
|
+
## Обычный пользователь
|
|
79
|
+
|
|
80
|
+
Обычный пользователь отправляет обычные значения:
|
|
81
|
+
|
|
82
|
+
- имена пользователей
|
|
83
|
+
- email
|
|
84
|
+
- короткие текстовые поля
|
|
85
|
+
|
|
86
|
+
В этом случае библиотека должна вернуть:
|
|
87
|
+
|
|
88
|
+
status = OK
|
|
89
|
+
issecure = True
|
|
90
|
+
|
|
91
|
+
## Нарушитель (злоумышленник)
|
|
92
|
+
|
|
93
|
+
Злоумышленник может отправлять вредоносные полезные нагрузки, например:
|
|
94
|
+
|
|
95
|
+
1' OR 1=1 --
|
|
96
|
+
<script>alert(1)</script>
|
|
97
|
+
{{7*7}}
|
|
98
|
+
|
|
99
|
+
В таких случаях библиотека должна вернуть:
|
|
100
|
+
|
|
101
|
+
status = FOUND
|
|
102
|
+
или
|
|
103
|
+
status = DETECTED
|
|
104
|
+
|
|
105
|
+
### Значения статусов
|
|
106
|
+
|
|
107
|
+
Статус: Значение
|
|
108
|
+
|
|
109
|
+
OK: Подозрительных паттернов не обнаружено<br>
|
|
110
|
+
FOUND*: Обнаружены подозрительные признаки<br>
|
|
111
|
+
DETECTED: Высокая вероятность вредоносной нагрузки
|
|
112
|
+
|
|
113
|
+
\* **В strSQLICheck означает, что найдено ключевое слово sql, в контексте проверки осмысленного текста на английском языке является защитой от ложных срабатываний**
|
|
114
|
+
|
|
115
|
+
------------------------------------------------------------------------
|
|
116
|
+
|
|
117
|
+
# Глобальные параметры
|
|
118
|
+
|
|
119
|
+
В библиотеке есть три глобальных параметра, отвечающих за защиту от
|
|
120
|
+
слишком долгого выполнения регулярных выражений.
|
|
121
|
+
|
|
122
|
+
sqli_patern_time = 0.1
|
|
123
|
+
ssti_patern_time = 0.1
|
|
124
|
+
xss_patern_time = 0.2
|
|
125
|
+
|
|
126
|
+
Эти значения задают **максимальное время выполнения одного
|
|
127
|
+
regex‑паттерна в секундах**.
|
|
128
|
+
|
|
129
|
+
Если выполнение превышает тайм‑аут, библиотека помечает это как:
|
|
130
|
+
|
|
131
|
+
dos_payload
|
|
132
|
+
|
|
133
|
+
Это может указывать на попытку **ReDoS‑атаки** (нагрузки через сложные
|
|
134
|
+
регулярные выражения).
|
|
135
|
+
|
|
136
|
+
Если процессор досточно мощный можно уменьшить, переопределив в программе
|
|
137
|
+
|
|
138
|
+
------------------------------------------------------------------------
|
|
139
|
+
|
|
140
|
+
# Классы
|
|
141
|
+
|
|
142
|
+
## DataFilterException
|
|
143
|
+
|
|
144
|
+
Внутреннее исключение библиотеки.
|
|
145
|
+
|
|
146
|
+
Возникает если:
|
|
147
|
+
|
|
148
|
+
- переданы неверные типы данных
|
|
149
|
+
- произошла внутренняя ошибка
|
|
150
|
+
|
|
151
|
+
Пример сообщения:
|
|
152
|
+
|
|
153
|
+
INVALID_INPUT: expected str
|
|
154
|
+
|
|
155
|
+
------------------------------------------------------------------------
|
|
156
|
+
|
|
157
|
+
## filterReport
|
|
158
|
+
|
|
159
|
+
Структура отчёта, возвращаемая всеми функциями проверки.
|
|
160
|
+
|
|
161
|
+
Поля:
|
|
162
|
+
|
|
163
|
+
Поле: Описание
|
|
164
|
+
|
|
165
|
+
data: исходная проверенная строка<br>
|
|
166
|
+
type: тип проверки (SQLI / SSTI / XSS)<br>
|
|
167
|
+
status: итоговый статус<br>
|
|
168
|
+
detections: список сработавших сигнатур<br>
|
|
169
|
+
issecure: True если строка считается безопасной<br>
|
|
170
|
+
processtime: время выполнения проверки в наносекундах
|
|
171
|
+
|
|
172
|
+
------------------------------------------------------------------------
|
|
173
|
+
|
|
174
|
+
# Функции
|
|
175
|
+
|
|
176
|
+
## strSQLICheck()
|
|
177
|
+
|
|
178
|
+
Проверяет строку на признаки SQL Injection.
|
|
179
|
+
|
|
180
|
+
Параметры:
|
|
181
|
+
|
|
182
|
+
data : str
|
|
183
|
+
allowedSymbols : str
|
|
184
|
+
|
|
185
|
+
Если параметр `allowedSymbols` задан и строка содержит символ вне этого
|
|
186
|
+
набора, функция сразу возвращает:
|
|
187
|
+
|
|
188
|
+
status = DETECTED
|
|
189
|
+
detections = ["banned_symbol_usage"]
|
|
190
|
+
|
|
191
|
+
Функция ищет такие признаки SQL‑инъекций как:
|
|
192
|
+
|
|
193
|
+
- UNION SELECT
|
|
194
|
+
- SQL комментарии
|
|
195
|
+
- логические таутологии
|
|
196
|
+
- time‑based атаки
|
|
197
|
+
- ключевые SQL слова
|
|
198
|
+
|
|
199
|
+
Возвращает объект `filterReport`.
|
|
200
|
+
|
|
201
|
+
------------------------------------------------------------------------
|
|
202
|
+
|
|
203
|
+
## strSSTICheck()
|
|
204
|
+
|
|
205
|
+
Проверяет строку на Server-Side Template Injection.
|
|
206
|
+
|
|
207
|
+
Обнаруживает конструкции, используемые в шаблонизаторах.
|
|
208
|
+
|
|
209
|
+
Примеры:
|
|
210
|
+
|
|
211
|
+
{{ ... }}
|
|
212
|
+
{% ... %}
|
|
213
|
+
${ ... }
|
|
214
|
+
#{ ... }
|
|
215
|
+
|
|
216
|
+
Также ищет опасные вызовы:
|
|
217
|
+
|
|
218
|
+
eval()
|
|
219
|
+
exec()
|
|
220
|
+
os.popen()
|
|
221
|
+
Runtime.getRuntime()
|
|
222
|
+
|
|
223
|
+
Возвращает `filterReport`.
|
|
224
|
+
|
|
225
|
+
------------------------------------------------------------------------
|
|
226
|
+
|
|
227
|
+
## strXSSCheck()
|
|
228
|
+
|
|
229
|
+
Проверяет строку на признаки Cross-Site Scripting.
|
|
230
|
+
|
|
231
|
+
Перед анализом строка проходит нормализацию:
|
|
232
|
+
|
|
233
|
+
1. URL‑декодирование
|
|
234
|
+
2. декодирование HTML‑сущностей
|
|
235
|
+
3. удаление управляющих символов
|
|
236
|
+
4. нормализация Unicode
|
|
237
|
+
|
|
238
|
+
После этого выполняется поиск таких паттернов как:
|
|
239
|
+
|
|
240
|
+
- `<script>`
|
|
241
|
+
- протокол `javascript:`
|
|
242
|
+
- обработчики событий `onload=`
|
|
243
|
+
- `<iframe>`
|
|
244
|
+
- теги `svg` или `math`
|
|
245
|
+
|
|
246
|
+
Возвращает `filterReport`.
|
|
247
|
+
|
|
248
|
+
------------------------------------------------------------------------
|
|
249
|
+
|
|
250
|
+
## strMultCheck()
|
|
251
|
+
|
|
252
|
+
Позволяет выполнить несколько проверок сразу.
|
|
253
|
+
|
|
254
|
+
Пример:
|
|
255
|
+
|
|
256
|
+
``` python
|
|
257
|
+
strMultCheck(data, modes=["SQLI","SSTI","XSS"])
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Возвращает словарь:
|
|
261
|
+
|
|
262
|
+
{
|
|
263
|
+
"SQLI": filterReport,
|
|
264
|
+
"SSTI": filterReport,
|
|
265
|
+
"XSS": filterReport,
|
|
266
|
+
"total_status": str,
|
|
267
|
+
"total_issecure": bool,
|
|
268
|
+
"total_processtime": int
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
------------------------------------------------------------------------
|
|
272
|
+
|
|
273
|
+
# Пример использования
|
|
274
|
+
|
|
275
|
+
``` python
|
|
276
|
+
from DataFilter import strMultCheck
|
|
277
|
+
|
|
278
|
+
payload = "1' OR 1=1 --"
|
|
279
|
+
|
|
280
|
+
result = strMultCheck(payload)
|
|
281
|
+
|
|
282
|
+
print(result["SQLI"].status)
|
|
283
|
+
print(result["total_status"])
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
------------------------------------------------------------------------
|
|
287
|
+
|
|
288
|
+
# Обратная связь
|
|
289
|
+
|
|
290
|
+
## Контакты
|
|
291
|
+
|
|
292
|
+
Пожалуйста помните, что ни одно решение не является идеальным, и
|
|
293
|
+
**DataFilter** - не исключение.
|
|
294
|
+
|
|
295
|
+
Если у вас есть вопросы или предложения, вы можете написать мне.\
|
|
296
|
+
Я постараюсь ответить как только появится возможность (обычно в течение
|
|
297
|
+
одного рабочего дня).
|
|
298
|
+
|
|
299
|
+
**Спасибо за использование DataFilter!**
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# DataFilter - документация
|
|
2
|
+
|
|
3
|
+
**Автор:** qwertyvs<br>**Репозиторий:** https://github.com/qwertyvs/DataFilter
|
|
4
|
+
|
|
5
|
+
## Оглавление
|
|
6
|
+
|
|
7
|
+
* [Кратко о проекте](#Кратко-о-проекте)
|
|
8
|
+
* [Установка](#установка)
|
|
9
|
+
* [Ожидаемое поведение](#ожидаемое-поведение)
|
|
10
|
+
|
|
11
|
+
* [Обычный пользователь](#обычный-пользователь)
|
|
12
|
+
* [Нарушитель (злоумышленник)](#нарушитель-злоумышленник)
|
|
13
|
+
* [Значения статусов](#значения-статусов)
|
|
14
|
+
* [Глобальные параметры](#глобальные-параметры)
|
|
15
|
+
* [Классы](#классы)
|
|
16
|
+
|
|
17
|
+
* [DataFilterException](#datafilterexception)
|
|
18
|
+
* [filterReport](#filterreport)
|
|
19
|
+
* [Функции](#функции)
|
|
20
|
+
|
|
21
|
+
* [strSQLICheck()](#strsqlicheck)
|
|
22
|
+
* [strSSTICheck()](#strssticheck)
|
|
23
|
+
* [strXSSCheck()](#strxsscheck)
|
|
24
|
+
* [strMultCheck()](#strmultcheck)
|
|
25
|
+
* [Пример использования](#пример-использования)
|
|
26
|
+
* [Обратная связь](#обратная-связь)
|
|
27
|
+
|
|
28
|
+
# Кратко о проекте
|
|
29
|
+
|
|
30
|
+
**DataFilter** - это лёгкая библиотека на Python, предназначенная для
|
|
31
|
+
анализа входных данных и обнаружения возможных попыток эксплуатации
|
|
32
|
+
распространённых веб‑уязвимостей.
|
|
33
|
+
|
|
34
|
+
Библиотека умеет обнаруживать признаки:
|
|
35
|
+
|
|
36
|
+
- SQL Injection (SQLi)
|
|
37
|
+
- Server-Side Template Injection (SSTI)
|
|
38
|
+
- Cross-Site Scripting (XSS)
|
|
39
|
+
|
|
40
|
+
DataFilter выполняет **статический анализ строк** и ищет сигнатуры,
|
|
41
|
+
характерные для вредоносных полезных нагрузок.
|
|
42
|
+
|
|
43
|
+
------------------------------------------------------------------------
|
|
44
|
+
|
|
45
|
+
# Установка
|
|
46
|
+
|
|
47
|
+
1. Установите библиотеку:
|
|
48
|
+
|
|
49
|
+
``` bash
|
|
50
|
+
pip install DataFilter
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
2. Импортируйте нужные функции:
|
|
54
|
+
|
|
55
|
+
``` python
|
|
56
|
+
from datafilter import strSQLICheck, strSSTICheck, strXSSCheck, strMultCheck
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
------------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
# Ожидаемое поведение
|
|
62
|
+
|
|
63
|
+
## Обычный пользователь
|
|
64
|
+
|
|
65
|
+
Обычный пользователь отправляет обычные значения:
|
|
66
|
+
|
|
67
|
+
- имена пользователей
|
|
68
|
+
- email
|
|
69
|
+
- короткие текстовые поля
|
|
70
|
+
|
|
71
|
+
В этом случае библиотека должна вернуть:
|
|
72
|
+
|
|
73
|
+
status = OK
|
|
74
|
+
issecure = True
|
|
75
|
+
|
|
76
|
+
## Нарушитель (злоумышленник)
|
|
77
|
+
|
|
78
|
+
Злоумышленник может отправлять вредоносные полезные нагрузки, например:
|
|
79
|
+
|
|
80
|
+
1' OR 1=1 --
|
|
81
|
+
<script>alert(1)</script>
|
|
82
|
+
{{7*7}}
|
|
83
|
+
|
|
84
|
+
В таких случаях библиотека должна вернуть:
|
|
85
|
+
|
|
86
|
+
status = FOUND
|
|
87
|
+
или
|
|
88
|
+
status = DETECTED
|
|
89
|
+
|
|
90
|
+
### Значения статусов
|
|
91
|
+
|
|
92
|
+
Статус: Значение
|
|
93
|
+
|
|
94
|
+
OK: Подозрительных паттернов не обнаружено<br>
|
|
95
|
+
FOUND*: Обнаружены подозрительные признаки<br>
|
|
96
|
+
DETECTED: Высокая вероятность вредоносной нагрузки
|
|
97
|
+
|
|
98
|
+
\* **В strSQLICheck означает, что найдено ключевое слово sql, в контексте проверки осмысленного текста на английском языке является защитой от ложных срабатываний**
|
|
99
|
+
|
|
100
|
+
------------------------------------------------------------------------
|
|
101
|
+
|
|
102
|
+
# Глобальные параметры
|
|
103
|
+
|
|
104
|
+
В библиотеке есть три глобальных параметра, отвечающих за защиту от
|
|
105
|
+
слишком долгого выполнения регулярных выражений.
|
|
106
|
+
|
|
107
|
+
sqli_patern_time = 0.1
|
|
108
|
+
ssti_patern_time = 0.1
|
|
109
|
+
xss_patern_time = 0.2
|
|
110
|
+
|
|
111
|
+
Эти значения задают **максимальное время выполнения одного
|
|
112
|
+
regex‑паттерна в секундах**.
|
|
113
|
+
|
|
114
|
+
Если выполнение превышает тайм‑аут, библиотека помечает это как:
|
|
115
|
+
|
|
116
|
+
dos_payload
|
|
117
|
+
|
|
118
|
+
Это может указывать на попытку **ReDoS‑атаки** (нагрузки через сложные
|
|
119
|
+
регулярные выражения).
|
|
120
|
+
|
|
121
|
+
Если процессор досточно мощный можно уменьшить, переопределив в программе
|
|
122
|
+
|
|
123
|
+
------------------------------------------------------------------------
|
|
124
|
+
|
|
125
|
+
# Классы
|
|
126
|
+
|
|
127
|
+
## DataFilterException
|
|
128
|
+
|
|
129
|
+
Внутреннее исключение библиотеки.
|
|
130
|
+
|
|
131
|
+
Возникает если:
|
|
132
|
+
|
|
133
|
+
- переданы неверные типы данных
|
|
134
|
+
- произошла внутренняя ошибка
|
|
135
|
+
|
|
136
|
+
Пример сообщения:
|
|
137
|
+
|
|
138
|
+
INVALID_INPUT: expected str
|
|
139
|
+
|
|
140
|
+
------------------------------------------------------------------------
|
|
141
|
+
|
|
142
|
+
## filterReport
|
|
143
|
+
|
|
144
|
+
Структура отчёта, возвращаемая всеми функциями проверки.
|
|
145
|
+
|
|
146
|
+
Поля:
|
|
147
|
+
|
|
148
|
+
Поле: Описание
|
|
149
|
+
|
|
150
|
+
data: исходная проверенная строка<br>
|
|
151
|
+
type: тип проверки (SQLI / SSTI / XSS)<br>
|
|
152
|
+
status: итоговый статус<br>
|
|
153
|
+
detections: список сработавших сигнатур<br>
|
|
154
|
+
issecure: True если строка считается безопасной<br>
|
|
155
|
+
processtime: время выполнения проверки в наносекундах
|
|
156
|
+
|
|
157
|
+
------------------------------------------------------------------------
|
|
158
|
+
|
|
159
|
+
# Функции
|
|
160
|
+
|
|
161
|
+
## strSQLICheck()
|
|
162
|
+
|
|
163
|
+
Проверяет строку на признаки SQL Injection.
|
|
164
|
+
|
|
165
|
+
Параметры:
|
|
166
|
+
|
|
167
|
+
data : str
|
|
168
|
+
allowedSymbols : str
|
|
169
|
+
|
|
170
|
+
Если параметр `allowedSymbols` задан и строка содержит символ вне этого
|
|
171
|
+
набора, функция сразу возвращает:
|
|
172
|
+
|
|
173
|
+
status = DETECTED
|
|
174
|
+
detections = ["banned_symbol_usage"]
|
|
175
|
+
|
|
176
|
+
Функция ищет такие признаки SQL‑инъекций как:
|
|
177
|
+
|
|
178
|
+
- UNION SELECT
|
|
179
|
+
- SQL комментарии
|
|
180
|
+
- логические таутологии
|
|
181
|
+
- time‑based атаки
|
|
182
|
+
- ключевые SQL слова
|
|
183
|
+
|
|
184
|
+
Возвращает объект `filterReport`.
|
|
185
|
+
|
|
186
|
+
------------------------------------------------------------------------
|
|
187
|
+
|
|
188
|
+
## strSSTICheck()
|
|
189
|
+
|
|
190
|
+
Проверяет строку на Server-Side Template Injection.
|
|
191
|
+
|
|
192
|
+
Обнаруживает конструкции, используемые в шаблонизаторах.
|
|
193
|
+
|
|
194
|
+
Примеры:
|
|
195
|
+
|
|
196
|
+
{{ ... }}
|
|
197
|
+
{% ... %}
|
|
198
|
+
${ ... }
|
|
199
|
+
#{ ... }
|
|
200
|
+
|
|
201
|
+
Также ищет опасные вызовы:
|
|
202
|
+
|
|
203
|
+
eval()
|
|
204
|
+
exec()
|
|
205
|
+
os.popen()
|
|
206
|
+
Runtime.getRuntime()
|
|
207
|
+
|
|
208
|
+
Возвращает `filterReport`.
|
|
209
|
+
|
|
210
|
+
------------------------------------------------------------------------
|
|
211
|
+
|
|
212
|
+
## strXSSCheck()
|
|
213
|
+
|
|
214
|
+
Проверяет строку на признаки Cross-Site Scripting.
|
|
215
|
+
|
|
216
|
+
Перед анализом строка проходит нормализацию:
|
|
217
|
+
|
|
218
|
+
1. URL‑декодирование
|
|
219
|
+
2. декодирование HTML‑сущностей
|
|
220
|
+
3. удаление управляющих символов
|
|
221
|
+
4. нормализация Unicode
|
|
222
|
+
|
|
223
|
+
После этого выполняется поиск таких паттернов как:
|
|
224
|
+
|
|
225
|
+
- `<script>`
|
|
226
|
+
- протокол `javascript:`
|
|
227
|
+
- обработчики событий `onload=`
|
|
228
|
+
- `<iframe>`
|
|
229
|
+
- теги `svg` или `math`
|
|
230
|
+
|
|
231
|
+
Возвращает `filterReport`.
|
|
232
|
+
|
|
233
|
+
------------------------------------------------------------------------
|
|
234
|
+
|
|
235
|
+
## strMultCheck()
|
|
236
|
+
|
|
237
|
+
Позволяет выполнить несколько проверок сразу.
|
|
238
|
+
|
|
239
|
+
Пример:
|
|
240
|
+
|
|
241
|
+
``` python
|
|
242
|
+
strMultCheck(data, modes=["SQLI","SSTI","XSS"])
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Возвращает словарь:
|
|
246
|
+
|
|
247
|
+
{
|
|
248
|
+
"SQLI": filterReport,
|
|
249
|
+
"SSTI": filterReport,
|
|
250
|
+
"XSS": filterReport,
|
|
251
|
+
"total_status": str,
|
|
252
|
+
"total_issecure": bool,
|
|
253
|
+
"total_processtime": int
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
------------------------------------------------------------------------
|
|
257
|
+
|
|
258
|
+
# Пример использования
|
|
259
|
+
|
|
260
|
+
``` python
|
|
261
|
+
from DataFilter import strMultCheck
|
|
262
|
+
|
|
263
|
+
payload = "1' OR 1=1 --"
|
|
264
|
+
|
|
265
|
+
result = strMultCheck(payload)
|
|
266
|
+
|
|
267
|
+
print(result["SQLI"].status)
|
|
268
|
+
print(result["total_status"])
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
------------------------------------------------------------------------
|
|
272
|
+
|
|
273
|
+
# Обратная связь
|
|
274
|
+
|
|
275
|
+
## Контакты
|
|
276
|
+
|
|
277
|
+
Пожалуйста помните, что ни одно решение не является идеальным, и
|
|
278
|
+
**DataFilter** - не исключение.
|
|
279
|
+
|
|
280
|
+
Если у вас есть вопросы или предложения, вы можете написать мне.\
|
|
281
|
+
Я постараюсь ответить как только появится возможность (обычно в течение
|
|
282
|
+
одного рабочего дня).
|
|
283
|
+
|
|
284
|
+
**Спасибо за использование DataFilter!**
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "web-datafilter"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Security-oriented Python library for detecting SQLi, SSTI and XSS payloads"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.8"
|
|
11
|
+
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "qwertyvs", email = "NuhUh@gmail.com" }
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
license = { text = "MIT" }
|
|
17
|
+
|
|
18
|
+
dependencies = [
|
|
19
|
+
"regex"
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
keywords = ["security", "sqli", "xss", "ssti", "input-validation"]
|
|
23
|
+
|
|
24
|
+
classifiers = [
|
|
25
|
+
"Programming Language :: Python :: 3",
|
|
26
|
+
"Operating System :: OS Independent"
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[tool.setuptools.packages.find]
|
|
30
|
+
where = ["src"]
|