作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Flask-Restful构建 REST 服务。然后,iOS 设备将连接到此 REST 后端以同步本地数据。
该服务将通过 https 连接访问。
REST 服务是无状态的,用户必须根据每个请求进行身份验证。因此,用户名和密码将以明文格式发送到 REST 服务。后端将散列密码并检查数据库中现有的散列密码。
api.add_resource(Records, '/rest/records/<string:email>/<string:password>/<string:ios_sync_timestamp>')
现在我发现这种方法的一个问题是用户名和密码作为 GET url 的一部分采用明文格式。服务器日志显然会跟踪这一点。现在,如果我的后端曾经被黑过,日志文件就会泄露所有用户名和密码。
最好的解决方案是什么?我在想也许可以将用户名和密码作为 POST 参数发送,但是我该如何使用 GET 请求呢?
class Records(Resource):
def get(self, email, password, ios_sync_timestamp):
pass
def post(self, email, password, ios_sync_timestamp):
pass
最佳答案
要像您希望的那样使用用户名和密码对每个请求进行身份验证,您应该使用:Basic Authentication .
要使用它,它非常简单,并且适用于所有 HTTP 方法(GET、POST 等)。您只需要在请求中添加一个 HTTP header :
Authorization: Basic <...>
<...>
部分是 username:password
以 base64 编码。
例如,如果您的登录名是 foo
你的密码是bar
. HTTP header 应包含这一行:
`Authorization: Basic Zm9vOmJhcg==`
通过您的 HTTPS 连接,它是安全的。
编辑:使用 Flask,您可以使用 Flask HTTP auth以“自动”实现这一目标。
关于python - 如何安全地将密码发送到 REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19514538/
我是一名优秀的程序员,十分优秀!