• 欢迎使用千万蜘蛛池,网站外链优化,蜘蛛池引蜘蛛快速提高网站收录,收藏快捷键 CTRL + D

“如何设置Flask的IP黑名单?5个简单步骤保护你的网站安全” “那些不受欢迎的IP,让Flask说bye了:教你设置IP黑名单” “Flask入门:如何限制黑名单IP访问你的网站?”


在Web开发中,身份验证和权限控制是很重要的一部分。在使用Flask框架开发网站时,我们可能需要实现IP黑名单功能来限制特定IP地址的访问。这篇文章将详细介绍如何使用Flask框架实现IP黑名单功能。

准备工作

在开始使用Flask框架实现IP黑名单功能之前,我们需要先安装Flask框架。可以使用以下命令在终端中安装:

pip install Flask

创建Flask应用

接下来,我们需要创建一个Flask应用。在项目目录下创建一个名为app.py的文件,并添加以下代码:

from flask import Flask, request, abort

app = Flask(__name__)

@app.route('/')
def index():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

实现IP黑名单功能

为了实现IP黑名单功能,我们需要记录访问者的IP地址,并在每次请求时检查该IP地址是否在黑名单中。如果IP地址在黑名单中,我们将拒绝访问并返回403禁止访问状态码。以下是实现IP黑名单功能的代码:

from flask import Flask, request, abort

app = Flask(__name__)

# 定义一个IP黑名单列表,可以根据需要添加或删除IP地址
ip_blacklist = ['192.168.1.1', '192.168.1.2']

@app.before_request
def check_ip_blacklist():
    # 获取访问者的IP地址
    client_ip = request.remote_addr
    # 检查IP地址是否在黑名单中
    if client_ip in ip_blacklist:
        # 如果IP地址在黑名单中,返回403禁止访问状态码并结束请求处理过程
        abort(403)

@app.route('/')
def index():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run()

在上面的代码中,我们使用了before_request装饰器来在每次请求之前执行check_ip_blacklist函数。这个函数会获取访问者的IP地址,并检查其是否在黑名单中。如果IP地址在黑名单中,我们将调用abort函数返回403禁止访问状态码并结束请求处理过程。这样,黑名单中的IP地址将无法访问我们的网站。

测试IP黑名单功能

现在,我们可以运行我们的Flask应用并测试IP黑名单功能。确保你已经安装了Flask框架,在项目目录下运行以下命令启动Flask应用:

python app.py

接下来,我们尝试使用不同的IP地址访问我们的网站。我们可以使用浏览器访问http://127.0.0.1:5000/,或者使用curl命令行工具访问:

curl http://127.0.0.1:5000/

如果我们使用的IP地址在黑名单中(例如192.168.1.1),我们将看到403禁止访问状态码。否则,我们将看到"Hello, World!"的欢迎信息。这表明我们的IP黑名单功能已经生效。

动态更新IP黑名单

在实际开发中,我们可能需要根据需要动态更新IP黑名单。例如,当检测到恶意攻击时,我们可能需要将攻击者的IP地址添加到黑名单中。为了实现这一功能,我们可以将IP黑名单存储在一个文件中,并在需要时读取和更新该文件。以下是实现动态更新IP黑名单的代码:

from flask import Flask, request, abort, jsonify, send_from_directory
import os
import time
import json
import socket

server_host = ''
server_port = 5000
blacklist_file = 'blacklist.txt'

app = Flask(__name__)

# 读取IP黑名单文件
def read_blacklist_file():
    try:
        with open(blacklist_file, 'r') as f:
            return f.read().splitlines()
    except Exception as e:
        # 如果读取文件失败,返回一个空列表
        print(e)
        return []

# 写入IP黑名单文件
def write_blacklist_file(blacklist):
    with open(blacklist_file, 'w') as f:
        f.write('\n'.join(blacklist))

# 获取本机IP地址
def get_ip_address():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        return s.getsockname()[0]
    except:
        return 'localhost'

# 定义一个IP黑名单列表,可以根据需要添加或删除IP地址
ip_blacklist = read_blacklist_file()

@app.before_request
def check_ip_blacklist():
    # 获取访问者的IP地址
    client_ip = request.remote_addr
    # 检查IP地址是否在黑名单中
    if client_ip in ip_blacklist:
        # 如果IP地址在黑名单中,返回403禁止访问状态码并结束请求处理过程
        abort(403)

@app.route('/')
def index():
    return 'Hello, World!'

@app.route('/ip', methods=['GET'])
def get_ip():
    return jsonify({'ip': request.remote_addr})

@app.route('/blacklist', methods=['GET'])
def get_blacklist():
    return jsonify({'blacklist': ip_blacklist})

@app.route('/blacklist', methods=['POST'])
def add_to_blacklist():
    if 'ip' in request.form:
        ip = request.form['ip']
        if ip not in ip_blacklist:
            ip_blacklist.append(ip)
            write_blacklist_file(ip_blacklist)
            return jsonify({'status': 'ok', 'message': 'IP address added to blacklist.'})
        else:
            return jsonify({'status': 'error', 'message': 'IP address already in blacklist.'})
    else:
        return jsonify({'status': 'error', 'message': 'Missing IP address parameter.'})

if __name__ == '__main__':
    # 获取本机IP地址
    server_host = get_ip_address()
    # 启动Flask应用
    app.run(host=server_host, port=server_port)

在上面的代码中,我们使用一个blacklist.txt文件存储IP黑名单。在启动Flask应用时,我们首先读取blacklist.txt文件,并将其中的IP地址添加到ip_blacklist列表中。我们还实现了三个路由函数:/ip返回访问者的IP地址,/blacklist返回当前的IP黑名单列表,/blacklist接受POST请求以将IP地址添加到黑名单中。当我们调用/blacklist路由函数以添加IP地址时,我们将更新blacklist.txt文件。

现在,我们可以运行我们的Flask应用并测试IP黑名单功能。在终端中进入项目目录,运行以下命令启动Flask应用:

python app.py

接下来,我们可以使用浏览器或者curl命令行工具访问不同的路由函数,例如http://127.0.0.1:5000/http://127.0.0.1:5000/iphttp://127.0.0.1:5000/blacklist。我们还可以使用curl命令行工具向/blacklist路由函数发送POST请求以添加IP地址到黑名单中:

curl -X POST -d "ip=192.168.1.1" http://127.0.0.1:5000/blacklist

现在,我们已经学会了如何使用Flask框架实现IP黑名单功能,以及如何动态更新IP黑名单。希望这篇文章对你有所帮助,如果你有任何疑问或建议,请在评论区留言。感谢观看!

关注点赞评论,感谢支持!

本文链接:https://www.24zzc.com/news/171316168967862.html

相关文章推荐

    无相关信息

蜘蛛工具

  • 域名筛选工具
  • 中文转拼音工具
  • WEB标准颜色卡