IP-Überprüfung mit X-Forwarded-For-Header hinzugefügt
This commit is contained in:
21
app.py
21
app.py
@@ -7,6 +7,7 @@ from datetime import datetime, timedelta
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
import requests
|
import requests
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
import ipaddress
|
||||||
|
|
||||||
app = Flask(__name__, static_folder='static')
|
app = Flask(__name__, static_folder='static')
|
||||||
app.secret_key = 'your_secret_key' # Setzen Sie einen sicheren geheimen Schlüssel für die Session
|
app.secret_key = 'your_secret_key' # Setzen Sie einen sicheren geheimen Schlüssel für die Session
|
||||||
@@ -54,6 +55,26 @@ def load_data():
|
|||||||
|
|
||||||
@app.route('/login', methods=['GET', 'POST'])
|
@app.route('/login', methods=['GET', 'POST'])
|
||||||
def login():
|
def login():
|
||||||
|
# Versuche, die tatsächliche Client-IP aus dem X-Forwarded-For-Header zu erhalten
|
||||||
|
client_ip = request.headers.get('X-Forwarded-For', request.remote_addr)
|
||||||
|
allowed_ip_ranges = os.getenv('ALLOWED_IP_RANGES', '').split(',')
|
||||||
|
|
||||||
|
logger.info(f"Client-IP: {client_ip}")
|
||||||
|
logger.info(f"Erlaubte IP-Bereiche: {allowed_ip_ranges}")
|
||||||
|
|
||||||
|
# Überprüfen, ob die IP-Adresse in einem der erlaubten Subnetze liegt
|
||||||
|
client_ip_obj = ipaddress.ip_address(client_ip)
|
||||||
|
for ip_range in allowed_ip_ranges:
|
||||||
|
try:
|
||||||
|
network = ipaddress.ip_network(ip_range.strip(), strict=False)
|
||||||
|
logger.info(f"Überprüfe Netzwerk: {network}")
|
||||||
|
if client_ip_obj in network:
|
||||||
|
logger.info("Client-IP ist im erlaubten Bereich.")
|
||||||
|
session['logged_in'] = True
|
||||||
|
return redirect(url_for('index'))
|
||||||
|
except ValueError:
|
||||||
|
logger.error(f"Ungültiges Netzwerkformat: {ip_range}")
|
||||||
|
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
password = request.form.get('password')
|
password = request.form.get('password')
|
||||||
if password == STATIC_PASSWORD:
|
if password == STATIC_PASSWORD:
|
||||||
|
Reference in New Issue
Block a user