Skip to content

Commit b12e139

Browse files
committed
🔒 Enhance security: Refine SQL and JS injection patterns; improve ReDoS test cases for input validation.
1 parent c67e3c5 commit b12e139

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

packages/models-library/src/models_library/string_types.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919
_LONG_TRUNCATED_STR_MAX_LENGTH: Final[int] = 65536 # same as github descriptions
2020

2121
_SQL_INJECTION_PATTERN: Final[re.Pattern] = re.compile(
22-
r"(?i)\b(?:SELECT|INSERT|UPDATE|DELETE|DROP|UNION|ALTER|CREATE|EXEC|TRUNCATE|MERGE|GRANT|REVOKE|COMMIT|ROLLBACK|DECLARE|CAST|CONVERT)\b|--|;|/\*|\*/|'",
22+
r"(?i)(?:\b(?:SELECT|INSERT|UPDATE|DELETE|DROP|UNION|ALTER|CREATE|EXEC|TRUNCATE|MERGE|GRANT|REVOKE|COMMIT|ROLLBACK|DECLARE|CAST|CONVERT)\b|--|;|/\*|\*/|')",
2323
)
2424
_JS_INJECTION_PATTERN: Final[re.Pattern] = re.compile(
25-
r"(?i)<(?:script|iframe|object|embed)\b[^>]*>|</(?:script|iframe|object|embed)>|<link\b[^>]*href\s*=\s*[\"']?\s*javascript:|(?:vb|java)script:|data:text/html|&#(?:x6A|106);avascript:|<(?:img|svg)\b[^>]*on\w+\s*=|on[a-z]+\s*=",
25+
r"(?i)<(?:script|iframe|object|embed)(?:\s[^>]{0,100})?>|</(?:script|iframe|object|embed)>|<link(?:\s[^>]{0,200})?href\s*=\s*[\"']?\s*javascript:|(?:vb|java)script:|data:text/html|&#(?:x6A|106);avascript:|<(?:img|svg)(?:\s[^>]{0,200})?on\w+\s*=|on[a-z]+\s*=",
2626
)
2727
STRING_UNSAFE_CONTENT_ERROR_CODE: Final[str] = "string_unsafe_content"
2828

packages/models-library/tests/test_string_types.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,27 @@ class InputRequestModel(BaseModel):
115115
# ❌ ReDoS (Regular expression Denial of Service) test patterns
116116
pytest.param(
117117
"SafeName",
118-
"<script" + ">" * 1000 + "alert(1)</script>",
118+
"<script" + " " * 200 + ">alert(1)</script>",
119119
False,
120-
id="redos-nested-tags",
120+
id="redos-script-spaces",
121121
),
122122
pytest.param(
123123
"SafeName",
124-
"SELECT " + "a" * 10000 + " FROM users",
124+
"<img" + " src='x'" * 100 + " onerror='alert(1)'>",
125125
False,
126-
id="redos-long-sql-keyword",
126+
id="redos-img-attributes",
127+
),
128+
pytest.param(
129+
"SafeName",
130+
"SELECT" + " " * 1000 + "* FROM users",
131+
False,
132+
id="redos-sql-spaces",
133+
),
134+
pytest.param(
135+
"SafeName",
136+
"/*" + "*" * 500 + "*/ SELECT data",
137+
False,
138+
id="redos-sql-nested-comments",
127139
),
128140
],
129141
)

0 commit comments

Comments
 (0)