如何安全地检查上传文件的大小?(How to check size of uploaded file safely in bottlepy?)

我真的害怕read()操作,因为它使用内存。 例如,任何人都可以通过上传1GB文件来对服务器进行DDoS,对吗?

name = request.forms.get('name')

data = request.files.get('data')

if name and data.file:

raw = data.file.read() # This is dangerous for big files

filename = data.filename

return "Hello %s! You uploaded %s (%d bytes)." % (name, filename, len(raw))

有没有安全的解决方案来获取上传的文件大小? 一个猜测是从文件系统获取文件大小; request.files.get('data')可能存储在临时文件的某个地方?

I'm really afraid of that read() operation because it uses memory. For instance, anybody could DDoS my server by uploading a 1gb file, correct?

name = request.forms.get('name')

data = request.files.get('data')

if name and data.file:

raw = data.file.read() # This is dangerous for big files

filename = data.filename

return "Hello %s! You uploaded %s (%d bytes)." % (name, filename, len(raw))

Is there any safe solution to get the uploaded file size? One guess would be to get file size from the file system; request.files.get('data') is probably stored somewhere in temp file right?

原文:https://stackoverflow.com/questions/11218422

更新时间:2020-01-20 23:45

最满意答案

你能否检查一次是否可以读取大块数据。

如果这是可能的,那么:

name = request.forms.get('name')

data = request.files.get('data')

raw = ""

if name and data.file:

while True:

datachunk = data.file.read(1024)

if not datachunk:

break

raw = raw + datachunk

filename = data.filename

return "Hello %s! You uploaded %s (%d bytes)." % (name, filename, len(raw))

如果这是可能的,那么你应该也可以添加一个跟踪机制来确定你想要读取的文件大小,如果超过这个大小,就会中止这个操作。

这只能解决DDOS的一种可能的方式。

Can you check if you can read chunks of data, one at a time.

If this is possible then:

name = request.forms.get('name')

data = request.files.get('data')

raw = ""

if name and data.file:

while True:

datachunk = data.file.read(1024)

if not datachunk:

break

raw = raw + datachunk

filename = data.filename

return "Hello %s! You uploaded %s (%d bytes)." % (name, filename, len(raw))

If this is possible, then you should be able to also add a tracking mechanism on how large a file you want to read and if exceeded abort this operation.

How ever this solves only one of the possible ways of DDOS.

2012-07-10

相关问答

关于这个问题,有一个名为file-uploader的插件可以解决问题。 使用此插件,您可以在config.groovy中定义一些限制。 这是一个例子: fileuploader {

avatar {

maxSize = 1024 * 256 //256 kbytes

allowedExtensions = ["jpg","jpeg","gif","png"]

path = "/tmp/avatar/"

}

docs {

...

您可以使用commons-fileupload设置setSizeThreshold 这是相同的例子 注意: * 如果不直接将其直接发送到服务器,您无法确定文件大小 * You can set setSizeThreshold using commons-fileupload Here is example of the same Note: *You can't determine the file size without streaming it up directly to server*

从PHP 4.2.0开始,PHP会返回适当的错误代码以及文件数组。 所以, <?php

if ($_FILES['txtImage']['error'] === UPLOAD_ERR_NO_FILE) {

$msg .= "Opss, you forgot the image.
";

}

?>

http://php.net/manual/en/features.file-upload.errors.php Since PHP 4.2.0, PHP returns an approp

...

使用._size文件属性 if thisFile._size > 5242880:

return "This file is more than 5mb"

._size以字节表示。 5242880 - 5MB def handle_uploaded_file(thisFile):

if thisFile._size > 5242880:

return "This file is more than 5mb"

else:

with open('s

...

if(!file_exists($_FILES['name_of_field']['tmp_name'])

{

# No file uploaded

}

if(!file_exists($_FILES['name_of_field']['tmp_name'])

{

# No file uploaded

}

问题在于我试图从使用jQuery的文件输入中选择文件的方式。 以下是一些示例解决方案: 如果您有一个文件输入,并且用户只能选择一个文件: // Get the file

var file = $('input[type="file"]').get(0).files[0];

// File size, in bytes

var size = file.size;

如果您有一个文件输入,请选择多个文件: // Get an array of the files

var files = $('inp

...

保存到服务器之前检查文件大小。 (正在上传时检查文件大小) PHP在解码POST请求时正在检查最大文件大小。 它是在php.ini中使用upload_max_filesize 。 通常大约10MB左右。 但您可以通过简单的测试轻松设置特定于应用程序的最大文件大小: if ($_FILES["image"]["size"] >= 500000) {

然后相应地做出反应并打印错误消息。 对于个人资料图片和头像,500K应该足够了。 扫描文件内容 您需要在服务器上安装病毒扫描程序。 有各种各样的可用。

...

我发现它,正确的组合原来是参数dFileSize和事件 - postWebfileCreation I found it, the right combination turned out to be the parameter dFileSize and the event - postWebfileCreation

你能否检查一次是否可以读取大块数据。 如果这是可能的,那么: name = request.forms.get('name')

data = request.files.get('data')

raw = ""

if name and data.file:

while True:

datachunk = data.file.read(1024)

if not datachunk:

break

raw = raw + d

...

问题是在运行服务器时使用reloader=True 。 将此设置为False可防止出现第二个窗口。 The issue was using reloader=True when running the server. Setting this to False prevents the second window from appearing.

手机如何看python文件大小_如何安全地检查上传文件的大小?(How to check size of uploaded file safely in bottlepy?)...相关推荐

  1. 如何上传html验证文件大小,html5 实现客户端验证上传文件的大小(简单实例)

    在HTML 5中,现在可以在客户端进行文件上传时的校验了,比如用户选择文件后,可以 马上校验文件的大小和属性等.本文章向码农介绍html5 如何实现客户端验证上传文件的大小,感兴趣的码农可以参考一下. ...

  2. php上传文件大小读取,怎么修改php上传文件的大小限制?

    修改php上传文件大小限制的方法:首先打开php.ini配置文件:然后分别查找并修改"post_max_size"项."upload_max_filesize" ...

  3. springboot调用python脚本_Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法...

    记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...

  4. python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv)

    python 全栈开发,Day86(上传文件,上传头像,CBV,python读写Excel,虚拟环境virtualenv) 一.上传文件 上传一个图片 使用input type="file& ...

  5. 在上传文件时限制上传文件的大小,并捕捉超过文件大小限制的异常

    在上传文件时,我们可以在web.config里设置允许上传的文件大小.但是,当上传的文件超过设置的限制时,在Application_Error事件里是无法捕捉到这个异常的.下面,就是捕捉上传文件超过设 ...

  6. python的requests库发送携带上传文件的接口_python requests 库请求带有文件参数的接口实例...

    python requests 库请求带有文件参数的接口实例 有些接口参数是一个文件格式,比如fiddler 抓包参数如下显示 这个接口的 form-data fiddler 显示的和不带文件参数的接 ...

  7. python socketserver实现服务器端执行命令 上传文件 断点续传

    1 基于socketserver在服务器端实现执行cmd命令和上传文件(断点续传) 2 3 #server: 4 5 #!/usr/bin/env python 6 # -*- coding:utf- ...

  8. ashx获取input file 文件_通过Ajax方式上传文件(input file),使用FormData进行Ajax请求...

    一直以来上传文件都使用的是别人的组件,今天看下无刷新上传内部具体的做法.上传文件可以使用form的形式来上传,也可以通过构造formData使用ajax来上传文件: 上传图片 $(function ( ...

  9. aws php 上传文件 限制大小_如何压缩PDF文件大小,满足各种上传大小要求

    介绍 今天我们来说一个小技巧,就是对PDF文件大小的压缩.那么这个问题是怎么来的呢,我们在系统上传PDF文件的时候,由于系统限制,PDF大小受到了限制,我们需要对PDF进行压缩小一点进行上传,才能满足 ...

最新文章

  1. linux常用的内核镜像格式
  2. cocos2d-x初探学习笔记(16)--LayerColor
  3. linux共享库的运行方式,Linux下动态共享库加载及使用详解
  4. java中Date()类型输入数据的处理
  5. React开发(109):引用错误 报错
  6. TensorFlow相关
  7. Node项目实战开发-博客系统
  8. 滴滴货运首批试点城市揭晓 23日起在成都、杭州上线
  9. java单例模式_java设计模式-单例模式
  10. 显卡bind 驱动 linux,Linux 配置bind 服務
  11. vue-cli入门(四)——vue-resource登录注册实例
  12. Linux实验——缓冲区溢出漏洞实验
  13. GRAPH ATTENTION NETWORKS 学习翻译
  14. HP M280 鼠标驱动
  15. python爬取去哪儿网机票_去哪儿网机票爬虫
  16. 读July关于概率论所想
  17. 大前端 HTML基础
  18. ModuleNotFoundError: No module named ‘typing_extensions‘
  19. 基于Blackfin处理器的嵌入式数码相框
  20. 花粉的基本功效(收藏)

热门文章

  1. TensorFlow 学习(十五)—— tensorflow.python.platform
  2. 图案、标签、logo
  3. 用几何(解析几何)方法求解概率问题
  4. 二分查找 —— 从三分支到二分支
  5. 【学习 Opencv】—— 访问摄像机和视频
  6. WinEdt LaTex(一)—— hello world!
  7. 3升5升得4升——倒水问题的万能解法(扩展欧几里得算法)
  8. latex 基本用法
  9. php object 对象不存在。增加对象_《相亲者女》:找一个匹配的对象,但永远不存在...
  10. sql server与java实例_史上最全:PostgreSQL DBA常用SQL查询语句(建议收藏学习)