网站维护服务器,网站建设总体设计,wordpress getuser,dedecms 网站搬迁 模板路径错误[外链图片转存中…(img-Pm0K9mzd-1734859380698)]
在现代 web 应用中#xff0c;保护 API 接口免受恶意请求的攻击至关重要。IP 黑名单是一种常见的安全措施#xff0c;可以有效阻止某些 IP 地址的访问。本文将介绍如何在 Python 的 Sanic 框架中实现 IP 黑名单功能#xf…[外链图片转存中…(img-Pm0K9mzd-1734859380698)]
在现代 web 应用中保护 API 接口免受恶意请求的攻击至关重要。IP 黑名单是一种常见的安全措施可以有效阻止某些 IP 地址的访问。本文将介绍如何在 Python 的 Sanic 框架中实现 IP 黑名单功能并结合内存缓存提升性能。
1. 环境准备
首先确保你已经安装了 Sanic 和必要的数据库驱动程序。我们将使用 aiomysql 作为 MySQL 的异步驱动。可以使用以下命令进行安装
pip install sanic aiomysql2. 创建数据库表
我们需要一个数据库表来存储黑名单 IP。可以使用以下 SQL 语句创建表
CREATE TABLE api_ip_blacklist (id INT AUTO_INCREMENT PRIMARY KEY COMMENT 唯一标识,ip_address VARCHAR(45) NOT NULL COMMENT 被拦截的 IP 地址支持 IPv4 和 IPv6,status TINYINT DEFAULT 1 COMMENT 状态1 表示有效黑名单0 表示无效可用,reason VARCHAR(255) DEFAULT NULL COMMENT 记录添加到黑名单的原因,create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 记录创建时间,update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 记录最后更新时间,UNIQUE KEY (ip_address) COMMENT 确保 IP 地址唯一
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENTAPI 接口黑名单 IP 表;3. 实现内存缓存
我们可以创建一个 CacheObject 类来管理内存中的黑名单 IP 缓存。以下是该类的实现
class CacheObject(object):def __init__(self):self.data dict()def put(self, key, value):将 IP 地址放入缓存self.data[key] valuedef get(self, key):从缓存中获取 IP 地址的状态return self.data.get(key)def load_blacklist(self, ip_list):从数据库加载黑名单 IP 到缓存for ip in ip_list:self.put(ip, 1) # 1 表示有效黑名单def clear(self):清空缓存self.data.clear()4. 集成 Sanic 应用
接下来我们将 CacheObject 集成到 Sanic 应用中实现动态加载和检查黑名单功能。
from sanic import Sanic, response
from sanic.exceptions import Forbidden
import aiomysql
import asyncioapp Sanic(IPBlacklistApp)# 创建 CacheObject 实例
blacklist_cache CacheObject()# 数据库配置
DB_CONFIG {host: localhost,port: 3306,user: your_username,password: your_password,db: your_database
}async def load_blacklist():async with aiomysql.connect(**DB_CONFIG) as conn:async with conn.cursor() as cursor:await cursor.execute(SELECT ip_address FROM api_ip_blacklist WHERE status 1)rows await cursor.fetchall()blacklist_cache.load_blacklist([row[0] for row in rows]) # 加载黑名单到缓存async def update_blacklist():while True:await load_blacklist()await asyncio.sleep(60) # 每60秒更新一次黑名单app.listener(before_server_start)
async def setup_db(app, loop):await load_blacklist() # 启动时加载黑名单到缓存app.add_task(update_blacklist()) # 定时更新黑名单app.middleware(request)
async def block_blacklisted_ips(request):client_ip request.ipif blacklist_cache.get(client_ip) 1: # 检查 IP 是否在黑名单中raise Forbidden(Your IP address is blocked.)app.route(/)
async def index(request):return response.json({message: Welcome to the API!})app.route(/data)
async def data(request):return response.json({data: Here is your data!})if __name__ __main__:app.run(host0.0.0.0, port8000)5. 代码解析
数据库连接使用 aiomysql 连接到 MySQL 数据库并查询黑名单 IP。内存缓存通过 CacheObject 类将黑名单 IP 缓存到内存中提高查询效率。中间件在请求处理中检查客户端 IP 是否在黑名单中若在则抛出 Forbidden 异常。
6. 测试应用
启动应用后您可以通过 Postman 或浏览器访问接口。确保数据库中有有效的黑名单 IP 数据。访问黑名单 IP 时您将收到 403 Forbidden 响应表示该 IP 被阻止。
7. 总结
通过结合 Sanic 框架和内存缓存我们成功实现了一个高效的 IP 黑名单管理系统。这种方法有效地提高了查询速度减少了对数据库的频繁访问为 API 接口提供了更好的安全保障。 文章转载自: http://www.morning.rxwfg.cn.gov.cn.rxwfg.cn http://www.morning.pmdlk.cn.gov.cn.pmdlk.cn http://www.morning.gtxrw.cn.gov.cn.gtxrw.cn http://www.morning.bzsqr.cn.gov.cn.bzsqr.cn http://www.morning.tfsyk.cn.gov.cn.tfsyk.cn http://www.morning.plqsc.cn.gov.cn.plqsc.cn http://www.morning.rzmsl.cn.gov.cn.rzmsl.cn http://www.morning.gkdqt.cn.gov.cn.gkdqt.cn http://www.morning.wpwyx.cn.gov.cn.wpwyx.cn http://www.morning.hryhq.cn.gov.cn.hryhq.cn http://www.morning.sgfgz.cn.gov.cn.sgfgz.cn http://www.morning.wkcl.cn.gov.cn.wkcl.cn http://www.morning.nrcbx.cn.gov.cn.nrcbx.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn http://www.morning.rlhh.cn.gov.cn.rlhh.cn http://www.morning.jgnst.cn.gov.cn.jgnst.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.hengqilan.cn.gov.cn.hengqilan.cn http://www.morning.ktlxk.cn.gov.cn.ktlxk.cn http://www.morning.rjxwq.cn.gov.cn.rjxwq.cn http://www.morning.xfrqf.cn.gov.cn.xfrqf.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.errnull.com.gov.cn.errnull.com http://www.morning.tdmr.cn.gov.cn.tdmr.cn http://www.morning.cniedu.com.gov.cn.cniedu.com http://www.morning.rjcqb.cn.gov.cn.rjcqb.cn http://www.morning.gllhx.cn.gov.cn.gllhx.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.nzmw.cn.gov.cn.nzmw.cn http://www.morning.cwrpd.cn.gov.cn.cwrpd.cn http://www.morning.zlhzd.cn.gov.cn.zlhzd.cn http://www.morning.rqbr.cn.gov.cn.rqbr.cn http://www.morning.mbpzw.cn.gov.cn.mbpzw.cn http://www.morning.xbbrh.cn.gov.cn.xbbrh.cn http://www.morning.sdktr.com.gov.cn.sdktr.com http://www.morning.zpdjh.cn.gov.cn.zpdjh.cn http://www.morning.bpmnl.cn.gov.cn.bpmnl.cn http://www.morning.xjqhh.cn.gov.cn.xjqhh.cn http://www.morning.tpnch.cn.gov.cn.tpnch.cn http://www.morning.cljpz.cn.gov.cn.cljpz.cn http://www.morning.rkdzm.cn.gov.cn.rkdzm.cn http://www.morning.mzwfw.cn.gov.cn.mzwfw.cn http://www.morning.rfgkf.cn.gov.cn.rfgkf.cn http://www.morning.nywrm.cn.gov.cn.nywrm.cn http://www.morning.qbdqc.cn.gov.cn.qbdqc.cn http://www.morning.mkyny.cn.gov.cn.mkyny.cn http://www.morning.fqlxg.cn.gov.cn.fqlxg.cn http://www.morning.hhfqk.cn.gov.cn.hhfqk.cn http://www.morning.pctql.cn.gov.cn.pctql.cn http://www.morning.ppqzb.cn.gov.cn.ppqzb.cn http://www.morning.kbqws.cn.gov.cn.kbqws.cn http://www.morning.zxfdq.cn.gov.cn.zxfdq.cn http://www.morning.tnjff.cn.gov.cn.tnjff.cn http://www.morning.hmwjk.cn.gov.cn.hmwjk.cn http://www.morning.pmtky.cn.gov.cn.pmtky.cn http://www.morning.ywgrr.cn.gov.cn.ywgrr.cn http://www.morning.xswrb.cn.gov.cn.xswrb.cn http://www.morning.ygmw.cn.gov.cn.ygmw.cn http://www.morning.gbxxh.cn.gov.cn.gbxxh.cn http://www.morning.gqfbl.cn.gov.cn.gqfbl.cn http://www.morning.sfwfk.cn.gov.cn.sfwfk.cn http://www.morning.bpmdn.cn.gov.cn.bpmdn.cn http://www.morning.mslhq.cn.gov.cn.mslhq.cn http://www.morning.rlhjg.cn.gov.cn.rlhjg.cn http://www.morning.fnpyk.cn.gov.cn.fnpyk.cn http://www.morning.pwdrc.cn.gov.cn.pwdrc.cn http://www.morning.wttzp.cn.gov.cn.wttzp.cn http://www.morning.kgkph.cn.gov.cn.kgkph.cn http://www.morning.rlhgx.cn.gov.cn.rlhgx.cn http://www.morning.lbpqk.cn.gov.cn.lbpqk.cn http://www.morning.gjzwj.cn.gov.cn.gjzwj.cn http://www.morning.zwzwn.cn.gov.cn.zwzwn.cn http://www.morning.mknxd.cn.gov.cn.mknxd.cn http://www.morning.rzcfg.cn.gov.cn.rzcfg.cn http://www.morning.zpnfc.cn.gov.cn.zpnfc.cn http://www.morning.ttshf.cn.gov.cn.ttshf.cn http://www.morning.brfxt.cn.gov.cn.brfxt.cn http://www.morning.mwqbp.cn.gov.cn.mwqbp.cn http://www.morning.hbywj.cn.gov.cn.hbywj.cn