Ajax和OSS文件上传、删除

Ajax和OSS文件上传、删除

情况介绍

这里我们预期的页面是这样的:

<form action="?" method="post">
    <input type="hidden" name="Final_Result" value="NULL">
    <input type="file"><br>
    <input type="button" value="点击上传文件">
</form>

当用户选择完要上传的文件后,点击“点击上传文件”按钮,之后使用Ajax将文件提交到后台服务器。
之后后台服务器返回一个object的名称,将该object的值存放在

Final_Result

中,最后再使用Ajax将表单提交回后台,这里使用Ajax是不想读取

<input type="file">

的值。这样就可以将文件比较大的图片提前传回后台,从而在最后提交表单时能加快响应速度。

问题1

这样进行的问题是,当用户发现自己的文件上传错误了,想重新上传正确的文件。对于用户来说,需要进行的操作很简单,点击

<input type="file">

,之后点击“点击上传文件”按钮,完成。但是这时有一个问题,我们必须把旧文件删除掉,否则该文件会一直保留在OSS服务器中,而且你不确定是否需要可以删除该文件。

而要进行旧文件的删除是很简单的,直接把保存在

Final_Result

中的值传回后台,后台根据这个值进行删除就可以了,但是这样又引出了问题2

问题2

用户传过来的object直接进行删除吗?如果他将别人上传的文件的文件名通过浏览器控制平台写入:

Final_Result

这时就可能产生错误。所以为了预防上述情况的发生,我们该怎么做?

设想解决方案1:

  • 使用对称密钥进行加密,在传输会后台后再解密

这样对方在不知道你密钥的情况下就难以刻意设置Final_Result字段值了。

设想解决方案2:

  • 在object中植入时间信息

当用户传回的Final_Result中的时间信息表示该object是在一天以前上传到后台服务器的,那么表示用户操作的一定是旧的数据,那么该数据在数据库中应该有相应记录(当然筛选记录时会加入当前用户的身份信息)。

如果是当天之内的,则表示该object可能是用户刚才上传时发现上传错误后决定重新上传的。也可能恰巧另一个用户上传了一张图片,被该打算进行恶意操作的用户得知,
于是利用该程序漏洞进行恶意删除他人数据。这个方法实现起来简单,但是是存在问题的,当同一时间上传的量较小的可以尝试该方式。

设想解决方案3:

  • 拷贝最后的object

在用户上传阶段,不对用户的上传进行删除操作,统一将用户上传的文件保存在担任暂存功能的temp_bucket的bucket下,当用户完成最后的输入,则将最后的Final_Result的object从temp_bucket中复制到保存最后结果的bucket中。

而OSS是支持object复制的,只是速度我就不知道了。同时只需要定期对temp_bucket进行清理就可以了,其中中间步骤减少了对旧的object的删除,速度上也更快。

而且由于没有设置删除操作,都是上传,所以不需要担心用户在上传部分,借用object的删除进行恶意删除他人文件的功能了。

本人菜鸟,所以想到的解决办法可能实际使用起来存在漏洞,或者是我想的不够全面,望大神多喷喷我,我需要进步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值