You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Python使用requests模块调用用户指定URL的GET请求安全性问询

使用Python requests模块向用户指定URL发起GET请求的安全分析与最佳实践

一、是否安全?

不安全。即便设置了10秒超时,直接允许用户指定任意URL发起GET请求仍存在多种严重安全风险,绝不能直接信任用户输入的地址。

二、核心安全风险

  • 服务器端请求伪造(SSRF):用户可构造指向内网服务的URL(如http://localhost:8080、http://192.168.1.1/admin),利用你的应用访问内部未公开的资源,甚至执行未授权操作、窃取敏感信息。
  • 资源耗尽攻击:用户可指向响应缓慢(但在10秒超时内)或返回超大内容的URL,大量这类请求会占用应用的带宽、CPU、内存,导致服务可用性下降甚至崩溃。
  • 恶意重定向风险:requests默认会跟随重定向,用户指定的URL可能跳转到恶意站点,间接触发攻击(如下载恶意代码),还可能泄露应用的上下文信息。
  • 敏感数据泄露:如果请求携带了应用默认的敏感头部(如特定User-Agent)或你不慎添加的认证信息,用户可通过构造URL将这些数据发送到自己控制的服务器,实现数据窃取。

三、最佳实践

  • 严格的URL白名单校验:只允许用户访问预先审核过的域名/URL,拒绝所有不在白名单内的请求。若必须支持动态URL,至少限制域名后缀、禁止私有/内网IP段:
    import ipaddress
    from urllib.parse import urlparse
    
    def is_safe_url(url):
        parsed = urlparse(url)
        # 仅允许HTTP/HTTPS协议
        if not parsed.scheme or parsed.scheme not in ["http", "https"]:
            return False
        # 限制允许的域名,示例为仅允许example.com子域名
        if not parsed.netloc.endswith(".example.com"):
            # 检查是否为私有/内网IP
            try:
                ip = ipaddress.ip_address(parsed.netloc)
                if ip.is_private or ip.is_loopback or ip.is_link_local:
                    return False
            except ValueError:
                pass
        return True
    
  • 禁用或限制重定向:设置allow_redirects=False避免恶意跳转;若需跟随重定向,限制重定向次数(如max_redirects=3)并校验最终跳转地址的安全性。
  • 限制响应资源:除超时外,开启流式读取并限制最大读取字节数,防止超大响应耗尽内存:
    import requests
    
    response = requests.get(user_url, timeout=10, stream=True)
    response.raw.read(1024*1024)  # 仅读取1MB内容
    response.close()
    
  • 清理请求头部:移除默认敏感头部,自定义安全的请求头,避免泄露信息:
    headers = {
        "User-Agent": "YourSafeApp/1.0"
    }
    response = requests.get(user_url, timeout=10, headers=headers)
    
  • 添加请求限流:为每个用户的此类请求设置频率限制,防止恶意用户发起大量请求消耗资源。
  • 记录与监控:记录所有用户发起的URL请求,监控异常行为(如频繁访问内网IP、超大响应),及时发现并拦截攻击。

内容的提问来源于stack exchange,提问作者akash deep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 20:24:31