我打算在我的网站上创建一个小的Web服务来托管,但我想知道如何为一个用户名+密码组合创建一个简单,安全的登录表单(用户名+密码),而不使用SQL。这不一定非常安全,但如果您不能通过查看源代码来破解它,那就太好了。可以这样做吗?
答案 0 :(得分:2)
你可以使用Basic Auth?
答案 1 :(得分:1)
您可以使用Berkeley DB。它是存储在文件中的键值数据库。它没有服务器,但它支持并发访问。只需确保将文件放在您的网络服务器所在的位置之外(换句话说,不要在用户正在访问的CGI脚本旁边)。
编辑:提问者澄清说,他希望通过“对网页设计的有限理解”来实现极其简单的东西。在这种情况下,将用户名和密码放在一个文本文件中(纯文本,JSON,CSV,无论您的编程语言可以解析最简单的)在您的网络服务器无法提供的位置,并且使其只能由网络服务器读取。您还应hash the password(该链接适用于PHP,但在其他语言中非常相似)。
答案 2 :(得分:1)
您还可以使用OAuth提供商(Facebook,谷歌,推特,链接),甚至启用两步验证。
设置起来非常简单,以下是使用google的PHP示例:
https://github.com/google/google-api-php-client/blob/master/examples/idtoken.php
另一个使用facebook:
google和facebook都支持所有主要语言的api,但如果您愿意,也可以使用任何标准的oauth客户端。或者甚至实现你自己的,客户端实际上相当简单。
答案 3 :(得分:1)
你有某种服务器端脚本吗?这在JS中是不可能的。
既然你说它不需要完全安全,你基本上可以使用散列和腌制来创建一些不能通过查看源来“破解”的东西。请注意,如果您未通过https连接,则本地网络,ISP,政府等中的恶意用户将能够窃听通信并看到您传输明文密码。仅凭这个原因,密码不应该在任何地方重复使用和登录的其他人的影响应该很低。
以下是如何生成哈希的粗略示例:
<?php
$salt = "can-be-anything";
$password = "password";
$hash = hash_pbkdf2( "sha256", $password, $salt, 1024, 0 );
echo $hash;
?>
我们的结果是5b24ad89b5e94c35537f6967b39cf294aa845f94440ebfdd3e857e4cf5f41d7e
。现在,您可以在接收密码时按照相同的步骤并比较两个哈希值。如果减少迭代次数,则更容易暴力破解哈希,但会减少服务器负载。