如果没有特定于用户的限制,使用 IP 限制代替 JWT 是否足够

问题描述 投票:0回答:1

我有一个 fastapi 服务器和一个 React 客户端应用程序,我是实现安全功能的新手。当前的react应用程序使用Auth0来处理用户身份验证。

我试图确保向 fastapi 应用程序发出的请求只能由我的同事发出。此应用程序供内部办公室使用,只有使用办公室 WiFi 的人员才能访问此应用程序。如下所示实施 ip 地址限制就足够了吗? (由chatgpt生成的代码)。还是还需要实现json web token(jwt)来验证前端发出请求的用户?

我的理解是否正确,如果我实施IP地址限制,我不需要实施jwt,因为没有特定于用户的要求,并且应用程序将是安全的,因为只有可以访问办公室wifi并访问前端的用户在办公室就能让它工作吗?

from fastapi import FastAPI, HTTPException, Request

app = FastAPI()

# Replace this with the WiFi IP range
allowed_wifi_range = "192.168.1."

# Middleware to check the incoming request's IP address
@app.middleware("http")
async def check_ip(request: Request, call_next):
    client_ip = request.client.host

    # Check if the client IP address is within the allowed WiFi range
    if not client_ip.startswith(allowed_wifi_range):
        raise HTTPException(
            status_code=403,
            detail="Access Forbidden: Your IP address is not allowed.",
        )

    response = await call_next(request)
    return response

# Your protected endpoint
@app.get("/protected")
def protected_route():
    return {"message": "This is a protected route"}
security jwt fastapi ip-restrictions
1个回答
0
投票

仅使用 IP 身份验证通常被认为是非常低的安全态势,并且忽略了许多常见的攻击模式。

例如,考虑跨站请求伪造的场景。攻击者控制了恶意站点。他们将 Javascript 插入到该网站上调用您的 API 的页面中。然后,他们向您网络上的用户发送一条消息,其中包含指向其恶意页面的链接。当用户单击链接时,他们会在浏览器中运行脚本并访问您的 API。由于您只检查 IP,因此此方法有效,攻击者现在可以针对您的应用程序执行 API 调用。

防御此问题需要对 API 请求进行身份验证。在身份提供商向您的前端应用程序发出的请求上使用 JWT 可以让您的 API 知道该请求是在您的预期用例的上下文中发出的并且经过了正确的身份验证。

您还应该研究 CORS(跨源资源共享)和相关的安全标头,以确保您向连接到 API 的浏览器建议页面可以与 API 交互的上下文。

也许与您的情况无关,但这种类型的 IP 过滤的另一个问题是,如果您决定在网络外部托管 API,那么您将无法区分办公室中的一个网络和另一个网络,除非它们映射到不同的互联网地址。例如,与公司 WiFi 分离的访客 WiFi 网络可能仍会在 Internet 上显示为您的路由器/防火墙 IP,然后 API 无法仅过滤到您的公司 WiFi。

© www.soinside.com 2019 - 2024. All rights reserved.