2

我正在使用 bottle 编写一个非常简单的后端 API,它可以让我远程检查正在进行的进程。我是唯一会使用这项服务的人——或者更确切地说,我非常想成为唯一使用这项服务的人。这是一个非常简单的 RESTish API,可以在几个端点上接受 GET 请求。

我从来没有真正为网络做过任何开发,我想做一些尽可能简单且合理的事情。即使这也可能是过度的谨慎。无论如何,我非常非常基本的想法是在服务器上使用 https,并使用基本上是硬编码的密码进行身份验证。它将以明文形式存储在服务器和客户端上,但是如果有人可以访问其中任何一个,那么我就会遇到不同的问题。

这种方法有什么明显的错误吗?

4

2 回答 2

1

这个SO 评论回答了你的问题

您需要使用base64login:password对pair进行编码,例如is 。dGVzdDp0ZXN0test:test

于 2013-05-23T21:11:56.847 回答
0

如果您使用密码身份验证,则需要将密码存储在服务器中,以便验证从客户端发送的密码是否正常。

在您的特定情况下,您将使用基本身份验证,因为您想要最简单的。基于 HTTP/HTTPS 的基本身份验证使用 base64 对密码进行编码,但这不是保护措施。Base64 是一种双向编码,您可以对一大块数据进行编码和解码,而且不需要任何秘密。Base64 编码的目的是将任何类型的数据(甚至是二进制数据)编码为字符串。

当您输入密码并通过 HTTPS 发送时,HTTPS 隧道会避免任何人看到您的密码。

如果有人访问您的服务器并读取您用来检查输入的密码是否有效的密码“副本”,则会出现其他问题。最好的保护方法是散列它。哈希是一种单向编码系统。这意味着任何人都可以散列密码,但您不能取消散列数据块来发现密码。破解散列密码的唯一方法是暴力破解。我会推荐使用 MD5 或 SHA 哈希。

所以要简单点。客户端使用 http/https 基本身份验证,因此您将使用 base64 对密码进行编码。通过标头而不是 URL 传递它。服务器将在数据库或您想要的任何地方包含密码的副本。后端代码将recibe http请求,获取passowrd,base64解码然后散列它。散列后,您将检查它是否等于存储在服务器中的副本。

就是这个。希望能帮助到你!

于 2013-05-23T21:48:32.423 回答