Skip to content

Commit 0ab2c2f

Browse files
committed
find_hostname_in_userinput, cleanup & use new normalize function
1 parent 15ecfec commit 0ab2c2f

File tree

2 files changed

+8
-22
lines changed

2 files changed

+8
-22
lines changed

aikido_zen/vulnerabilities/ssrf/find_hostname_in_userinput.py

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,27 @@
22
Only exports find_hostname_in_userinput function
33
"""
44

5-
from typing import Optional, List, Tuple
5+
from typing import Optional, List
66

77
from aikido_zen.helpers.get_port_from_url import get_port_from_url
88
from aikido_zen.helpers.try_parse_url import try_parse_url
9+
from aikido_zen.vulnerabilities.ssrf.normalize_string_to_hostname_and_port import (
10+
normalize_string_to_hostname_and_port,
11+
)
912

1013

1114
def find_hostname_in_userinput(
12-
user_input: str, normalized_hostname: str, port: Optional[int] = None
15+
user_input: str, hostname_variants: List[str], port: Optional[int] = None
1316
):
1417
"""
1518
Returns true if the hostname is in userinput
1619
"""
17-
normalized_hostname = normalized_hostname.lower()
1820
if len(user_input) <= 1:
1921
return False
2022

21-
user_input_variants = [user_input, f"http://{user_input}", f"https://{user_input}"]
22-
user_input_normalized_variants = normalize_raw_url_variants(user_input_variants)
23+
user_input_variants = normalize_string_to_hostname_and_port(user_input)
2324

24-
for user_input_hostname, user_input_port in user_input_normalized_variants:
25-
hostname_variants = [normalized_hostname, f"[{normalized_hostname}]"]
25+
for user_input_hostname, user_input_port in user_input_variants:
2626
if user_input_hostname in hostname_variants:
2727
# We were unable to retrieve the port from the URL, likely because it contains an invalid port.
2828
# Let's assume we have found the hostname in the user input, even though it doesn't match on port.
@@ -36,17 +36,3 @@ def find_hostname_in_userinput(
3636
return True
3737

3838
return False
39-
40-
41-
def normalize_raw_url_variants(
42-
url_variants: List[str],
43-
) -> List[Tuple[str, Optional[int]]]:
44-
normalized_variants = []
45-
for variant in url_variants:
46-
# Try parse the variant as an url,
47-
user_input_url = try_parse_url(variant)
48-
if not user_input_url or not user_input_url.hostname:
49-
continue
50-
port = get_port_from_url(user_input_url.geturl())
51-
normalized_variants.append((user_input_url.hostname.lower(), port))
52-
return normalized_variants

aikido_zen/vulnerabilities/ssrf/find_hostname_in_userinput_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def find_hostname_in_userinput(user_input, hostname, port=None):
1111
if not hostname_url:
1212
return False
1313
normalized_hostname = hostname_url.hostname
14-
return _find_hostname_in_userinput(user_input, normalized_hostname, port)
14+
return _find_hostname_in_userinput(user_input, [normalized_hostname], port)
1515

1616

1717
def test_returns_false_if_user_input_and_hostname_are_empty():

0 commit comments

Comments
 (0)