我目前正在建立一个用于生产的网站。 但是,我确实对此有一些安全问题。 任何意见或建议将不胜感激!
这是我到目前为止所做的:
- 我的网络应用程序是基于Python Flask的。
- Heroku是我的主机(支持https(。
- AWS RDS 是我的后端数据库。
- 由于 Heroku 使用动态 IP,因此我必须为 AWS RDS 打开 IP 限制。但是,我已经为数据库强制实施了 SSL 连接。
- 在我的代码中,所有敏感参数都存储为配置变量。 我使用 os.environ(( 来称呼它们
- 此外,所有HTTP请求都必须提供我提供给客户的令牌。
以下代码显示了我为令牌身份验证所做的操作。 但我相信有更好的方法来实现它。
if request.method == 'POST':
token = request.headers['Authorization']
token_key = 'Token token="%s"' %(user_token)
if token != token_key:
abort(400)
print('authentication failed!',request.json)
else:
同样,如果有人能给我任何建议,或者为我提供有关我用于构建应用程序的方法的简短风险评估,我非常感谢。
安全问题通常与实现的特定细节有关,而不是与用于部署应用程序的平台有关。 Heroku很好,但你的应用程序可能不是。
首先,您是否考虑过使用Heruku的Postgres DBS?将数据库开放到互联网绝对不是一件好事。
另一件事是您的令牌验证。目前尚不清楚您从哪里获得这些user_token
,但我敢打赌您"按原样"将它们存储在数据库中,这也并不理想。您可能需要考虑存储哈希,并根据请求比较哈希。
最后一件事 - 如果您对服务器有 SSH 访问权限,最好将您自己的 IP 列入白名单以访问它,并阻止所有其他 IP。
这些只是常见的做法,不能保证应用程序的安全性。只有好的审计才会。