受害者网络服务
victims-web的Python项目详细描述
受害者网络应用程序。
报告问题
如果您发现http://victi.ms处的服务或代码有问题, 或者
贡献
pep8 --repeat .
使用pypi包
您可以通过安装PyPI Package和 使用提供的入口点。确保所需的数据库服务 可用和/或已配置。
pip install --user victims-web victims-web-server
开发
这是关于如何使用提供的 docker-compose配置和开发Dockerfile。注 不使用基目录中提供的Dockerfile。 用于生产和开发。
Docker构建
构建图像
图像可以被构建来提供一个工作环境 已安装依赖项。
docker build -t local/victims-web .
使用Docker图像
如上所示构建的Docker映像将不包含应用程序 源代码,但它希望工作目录安装在 /opt/source。
docker run --rm -it -v `pwd`:/opt/source local/victims-web
Docker撰写
docker-compose.yml文件定义运行 本地计算机上服务器的工作副本。启动服务器 通过docker-composewill;
- 启动受支持版本的MongoDB实例
- 为数据库添加测试数据
- 使用python -m victims.web 启动Web服务器
- 绑定到本地主机上的端口5000
启动服务器
这将启动如上所述的服务器实例。注意 这是从启用DEBUG和TESTING开始的。这个遗嘱 同时确保代码在更改时自动重新加载。
docker-compose up server
对工作副本执行测试
为了对代码的工作副本执行测试,可以使用 docker-compose.yml文件中描述的test服务。 这将启动依赖服务,加载种子数据,然后执行 应用程序测试和pep8。
docker-compose up test
用法
安全的api访问
像/service/submit/archive/java这样的提交终结点是安全的 一个类似于aws使用的实现。身份验证 通过 VICTIMS_API_HEADER配置(默认值:X-Victims-Api)。如果 这不存在,或者如果验证/身份验证失败,则会失败 返回到basic auth。
使用curl的示例如下:
$ curl -v -X PUT -H "X-Victims-Api: $APIKEY:$SIGNATURE" -H "Date: Thu, 22 Aug 2013 15:20:37 GMT" -F archive=@$ARCHIVE https://$VICTIMS_SERVER/service/submit/archive/java?version=VID\&groupId=GID\&artifactId=AID\&cves=CVE-2013-0000,CVE-2013-0001
这也可以使用basic-auth完成,如下所示:
curl -v -u $USERNAME:$PASSWORD -X PUT -F archive=@$ARCHIVE_FILE https://$VICTIMS_SERVER/service/submit/archive/java?version=VID\&groupId=GID\&artifactId=AID\&cves=CVE-2013-0000,CVE-2013-0001
API密钥和客户端密钥
Victi.ms上的每个帐户都由 违约。这可以通过访问https://victi.ms/account来检索。 可以使用 https://victi.ms/account_edit。
签名
签名是使用HTTP Method,Path,Date和 md5 hexdigest。
注释:
- Path包含查询字符串参数,例如: /service/submit/archive/java?cves=CVE-0000-0000
- MD5校验和包括所有文件的数据(如果可用) 正在提交。校验和按升序排序 在添加到字符串之前。
- 日期应为GMT。如: Thu, 22 Aug 2013 15:20:37 GMT。
以下是python中的参考实现:
fromhmacimportHMACdefgenerate_signature(secret,method,path,date,md5sums):md5sums.sort()ordered=[method,path,date]+md5sumsstring=''forcontentinordered:ifcontentisNone:raiseValueError('Required header not found')string+=str(content)returnHMAC(key=bytes(secret),msg=string.lower(),digestmod=sha512).hexdigest().upper()