diff --git a/banlist.lol b/banlist.lol new file mode 100644 index 0000000..e69de29 diff --git a/config.py b/config.py index f10c2a1..2fa2043 100644 --- a/config.py +++ b/config.py @@ -1,4 +1,4 @@ -name="debweb 1.2.2" +name="debweb 1.2.3" proxied=False addr="localhost" diff --git a/html/403.html b/html/403.html index cee9707..e511630 100644 --- a/html/403.html +++ b/html/403.html @@ -1,7 +1,7 @@ -404 Forbidden +403 Forbidden -

404 Forbidden

+

403 Forbidden


debweb
diff --git a/main.py b/main.py index 7397789..d29ceff 100644 --- a/main.py +++ b/main.py @@ -77,7 +77,6 @@ class WebServer: if real_addr and config.proxied: addr = (real_addr, addr[1]) - request = data.split("\n")[0] parts = request.split() if len(parts) < 2: return @@ -86,7 +85,7 @@ class WebServer: file_name = path[1:] if path.startswith('/') else path file_path = os.path.abspath(os.path.join(config.directory, file_name)) - if not file_path.startswith(os.path.abspath(config.directory)): + if not file_path.startswith(os.path.abspath(config.directory)): # directory traversal await self.log(config.err_msgs[418], addr, file_path) file_size = os.path.getsize(config.err_files[418]) await self.send_headers(writer, 418, file_size) @@ -95,6 +94,17 @@ class WebServer: writer.close() await writer.wait_closed() return + + + if addr[0] in utils.get_banlist(): # banlist for pidors + await self.log(config.err_msgs[403], addr, file_path) + file_size = os.path.getsize(config.err_files[403]) + await self.send_headers(writer, 403, file_size) + await self.send_file(writer, config.err_files[403], file_size) + + writer.close() + await writer.wait_closed() + return if os.path.isfile(file_path): diff --git a/utils.py b/utils.py index ba6b0bf..a2ba424 100644 --- a/utils.py +++ b/utils.py @@ -10,4 +10,8 @@ def get_mod_time(path: str, format: str="%a %b %e %H:%M:%S %Z %Y") -> str: def get_create_time(path: str, format: str="%a %b %e %H:%M:%S %Z %Y") -> str: create_time = os.path.getctime(path) create_datetime = datetime.datetime.fromtimestamp(create_time) - return create_datetime.strftime(format) \ No newline at end of file + return create_datetime.strftime(format) + + +def get_banlist() -> list: + return list(set(open("banlist.lol").readlines())) \ No newline at end of file