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

如何在开启防盗链保护的前提下让Flutter应用访问MySQL服务器的图片及文件

可行实现方案

方案1:调整服务端防盗链规则(推荐,改动量最小)

常规基于域名的防盗链核心逻辑为校验HTTP请求的Referer头是否属于白名单域名范围,Flutter移动端默认发起请求时不会携带符合要求的Referer参数,因此会被拦截。可在原有防盗链规则基础上新增放行规则,无需修改移动端代码:

  • 规则1:允许无Referer的请求,同时新增自定义User-Agent校验避免被恶意爬虫利用。以Nginx服务端配置为例,原有规则基础上调整如下:
valid_referers none blocked server_names *.your-allow-domain.com;
# 新增自定义UA校验
if ($http_user_agent !~* "your_flutter_app_custom_ua") {
    set $invalid_referer 1;
}
if ($invalid_referer) {
    return 403;
}

对应Flutter端可全局配置自定义User-Agent,避免被误拦截。

  • 规则2:新增签名校验逻辑。约定动态签名生成规则,Flutter端请求资源时在URL后拼接签名和时间戳参数,服务端校验签名合法则直接跳过Referer校验,该方案安全性最高,可有效避免请求头伪造问题。

方案2:Flutter端主动携带合法Referer头

无需修改服务端原有防盗链规则,仅在移动端所有资源请求中主动添加已加入白名单的域名作为Referer即可:

  • 图片请求使用Image.network组件时直接传入headers参数:
Image.network(
  'https://your-server-domain.com/resource/img.png',
  headers: const {
    'Referer': 'https://your-allow-listed-domain.com',
  },
)
  • 使用Dio等网络库请求其他文件时,全局配置默认请求头即可:
final dio = Dio(
  BaseOptions(
    baseUrl: 'https://your-server-domain.com',
    headers: {
      'Referer': 'https://your-allow-listed-domain.com',
    },
  ),
);

注意:部分设备系统的底层网络栈可能会强制覆盖自定义Referer参数,遇此情况优先选择方案1。

安全优化建议

  • 若选择放行无Referer的请求,必须加自定义请求头/UA校验,避免公开资源被无限制爬取
  • 敏感资源优先使用签名校验方案,即使请求头被伪造,也无法生成合法有效签名,安全性更高

内容的提问来源于stack exchange,提问作者Zeeshan Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:24:02