一个“脑死亡”简单的文件上传服务器
项目描述
# bdfu:一个“脑死亡”简单的文件上传服务器
[](https://travis-ci.org/rjw57/bdfu)
BDFU旨在解决一个问题,即允许一个或多个用户以认证方式将文件上传到某个服务器。具体来说,以下是一些简化措施
用户可能无法选择上传文件的文件名;每个文件都使用[UUID](http://en.wikipedia.org/wiki/Universally_unique_identifier)命名。
用户一旦上传文件后,就无法访问这些文件。允许用户读取上传的文件是一个正交问题。
用户使用有限生命周期的[JWT](https://jwt.node.org.cn/)令牌进行认证,这些令牌可以是手动或自动签发的。
服务器只需要Python和具有CGI功能的Web服务器即可运行,尽管它也可以作为一个[WSGI](http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface)应用程序来提高性能。
## 安装
安装通过pip或easy_install完成
`console $ pip install bdfu `
可以从这个存储库直接安装开发版本
`console $ pip install -e git+https://github.com/rjw57/bdfu#egg=bdfu `
## 配置
bdfu源代码附带了一个[示例配置](examples/simple-server.cfg)。下面是一个简化的版本
`python # 将此保存为 simple-server.cfg JWT_SECRET_KEY = 'supersecret' STORAGE_DIR = '/tmp/bdfu-storage-example' `
配置文件本身是一个Python脚本,因此可以计算任何这些选项的值。
在生产环境中,可以通过设置环境变量BDFU_SETTINGS为配置文件的绝对路径来告诉BDFU此文件。
## 入门
首先,使用示例配置运行示例服务器
`console $ bdfu server /path/to/simple-server.cfg `
这将导致服务器在http://localhost:8080/上运行。现在,为“sally”用户生成一个令牌
`控制台 $ bdfu gen-token sally supersecret >token-sally.txt`
默认情况下,此令牌会在生成后一分钟到期。可以通过 --expires-in 选项来设置 bdfu gen-token 的到期时间。
尝试上传一个1K的随机数据文件
`控制台 $ dd if=/dev/urandom of=test-file.bin bs=1024 count=1 $ bdfu upload http://localhost:8080/ `cat token-sally.txt test-file.bin ecbfb21578ad49548472d955b38ac65b`
bdfu upload 输出的字符串是该文件的唯一ID。文件将上传到 $STORAGE_DIR/$USER/$FILE_ID,我们可以进行检查
`控制台 $ ls /tmp/bdfu-storage-example/sally/ ecbfb21578ad49548472d955b38ac65b $ diff -qs /tmp/bdfu-storage-example/sally/ecbfb21578ad49548472d955b38ac65b test-file.bin 文件 /tmp/bdfu-storage-example/sally/ecbfb21578ad49548472d955b38ac65b 和 test-file.bin 是相同的`
## 令牌生成
除了 bdfu gen-token 命令外,源代码中还附带了一个 [独立示例](examples/make-token.py)。任何人只要拥有服务器密钥就可以生成令牌。令牌是标准的 [JWT](https://jwt.node.org.cn) 令牌。确实,可以将 bdfu gen-token 生成的令牌粘贴到 JWT 网站上,自行查看其结构。
令牌可以由服务器管理员手动生成并分发给用户,或者由拥有密钥的某个网关自动生成。例如,某个机构可能将令牌生成器包装在一个受现有身份提供者保护的 Web 应用程序中。同样,管理员可以根据他们认为合适的任何策略,为每个用户选择令牌的到期时间。
## 服务器部署
### WSGI
BDFU Web 应用程序作为标准的 WSGI 应用程序公开,适用于通过 Apache 或类似的 mod_wsgi 运行。源代码中附带了一个 [独立服务器](examples/simple-server.py) 示例。
应用程序要求通过 Web 服务器传递 HTTP Authorization 标头。这可能不是您的服务器的默认配置。例如,Apache Web 服务器需要以下指令
` WSGIPassAuthorization On `
### CGI
源代码中附带了一个 [CGI 包装脚本](examples/cgi-bin/bdfu) 示例。
应用程序要求通过 Web 服务器将 HTTP Authorization 标头传递到 CGI 脚本。这可能不是您的服务器的默认配置。例如,Apache Web 服务器需要以下指令
` RewriteEngine on RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] `
## 安全考虑
作为一个“脑死亡”的解决方案,BDFU 旨在在其安全模型中非常简单;任何拥有服务器密钥的人都可以生成令牌,并且必须被信任。例如,不尝试对路径分隔符进行用户名的净化等。愚蠢的服务器管理员可以自由创建一个名为 ../../../../etc/passwd 的用户。BDFU 假设服务器管理员知道他们在做什么。
通常,BDFU 旨在在令牌被验证之前是安全的,但假设令牌中的声明并非由对手生成。
项目详情
bdfu-1.0.3.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e061d9e05f4d9b7808ad9b936f8e802301a990e4431c46a0236d85ff78756926 |
|
MD5 | bdfde38386594219f4c83b08c5c745ae |
|
BLAKE2b-256 | 46d3780ebd03cebd7f9cfc8821e961d136ef1e68ebce8e6234c0579102ddcb0a |