图片防止恶意获取服务器文件,防止恶意文件上传最佳实践

本文介绍了如何使用七牛云存储的上传策略来防止非法用户盗用token上传svg, xml, html等垃圾文件或涉黄视频。主要措施包括:指定上传的key以限制文件类型和位置,设置insertOnly为1以禁止文件修改,以及通过mimeLimit字段限制上传文件的MIME类型。这些策略有助于保护用户的业务运营和数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有用户反馈,存在非法用户盗用她们的 token 在空间上传 svg,xml,html 等垃圾文件,注入广告,或者散播涉黄视频等资源,严重影响了用户业务的正常运营,针对此类问题,这边总结了如下处理方案。

通过上传策略限制上传

a.上传策略中 scope 指定 key 值,只允许用户上传指定 key 的文件

参数说明:

字段名

说明

scope

指定上传的目标资源空间 Bucket 和资源键 Key(最大为 750 字节)。有三种格式:

,表示允许用户上传文件到指定的 bucket。在这种格式下文件只能新增(分片上传需要指定insertOnly为1才是新增,否则也为覆盖上传),若已存在同名资源(且文件内容/etag不一致),上传会失败;若已存在资源的内容/etag一致,则上传会返回成功。

:,表示只允许用户上传指定 key 的文件。在这种格式下文件默认允许修改,若已存在同名资源则会被覆盖。如果只希望上传指定 key 的文件,并且不允许修改,那么可以将下面的 insertOnly 属性值设为 1。

:,表示只允许用户上传指定以 keyPrefix 为前缀的文件,当且仅当 isPrefixalScope 字段为 1 时生效,isPrefixalScope 为 1 时无法覆盖上传。

python 示例:

from qiniu import Auth, put_file

access_key =""

secret_key = ""

# 构建鉴权对象

q = Auth(access_key, secret_key)

# 要上传的空间

bucket_name = '2'

key = 'key'

#获取token的方法指定key

token = q.upload_token(bucket_name, key, 3600)

#put方法必须指定相同key才能上传

ret, info = put_file(token, key, 'localfilepath')

print ret

**b.上传策略中 insertOnly 指定为 1 或者指定 forceInsertOnly 为 true,只允许用户上传指定 key ,并且不允许修改**

参数说明:

字段名

说明

insertOnly

默认为0,指定为 1 时,上传指定 key 的文件,并且不允许修改,即上传相同 key ,不同 hash,返回 614 “file exists”,上传相同 key,相同 hash 仍旧返回 200

forceInsertOnly

默认为 False ,指定为 True 时,上传指定 key 的文件,并且不允许修改,只允许上传一次,即上传相同 key,相同 hash 仍旧返回 614 “file exists”,

python 示例:

from qiniu import Auth, put_file

access_key =""

secret_key = ""

# 构建鉴权对象

q = Auth(access_key, secret_key)

# 要上传的空间

bucket_name = 'bucket'

key = 'key'

#insertOnly 指定为 1

policy = {"insertOnly":1}

#获取token的方法指定key

token = q.upload_token(bucket_name, key, 3600, policy)

"""

#forceInsertOnly 为 true

policy = {'forceInsertOnly':True}

# 注意 forceInsertOnly是新增字段,这时候生成token的方法中 strict_policy 这个参数设置成False才能生效

token = q.upload_token(bucket_name, key, 3600, policy, strict_policy=False)

"""

#put方法必须指定相同key才能上传

ret, info = put_file(token, key, 'localfilepath')

print ret

c.上传策略中指定 mimetype ,限制上传文件类型

参数说明:

字段名

说明

mimeLimit

限定用户上传的文件类型。指定本字段值,七牛服务器会侦测文件内容以判断 MimeType,再用判断值跟指定值进行匹配,匹配成功则允许上传,匹配失败则返回 403 状态码。示例:

image/*表示只允许上传图片类型

image/jpeg;image/png表示只允许上传jpg和png类型的图片

!application/json;text/plain表示禁止上传json文本和纯文本。注意最前面的感叹号!

python 示例:

from qiniu import Auth, put_file

access_key =""

secret_key = ""

# 构建鉴权对象

q = Auth(access_key, secret_key)

# 要上传的空间

bucket_name = 'bucket'

key = 'key'

#限制mimeLimit

policy = {

"insertOnly":1,

"mimeLimit":"image/*" #只允许上传图片文件

}

#获取token的方法指定key

token = q.upload_token(bucket_name, key, 3600, policy)

#put方法必须指定相同key才能上传

ret, info = put_file(token, key, 'localfilepath')

print ret

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值