如何在不使用SQL的情况下创建安全的单用户登录?

时间:2014-06-20 21:20:08

标签: sql security login

我打算在我的网站上创建一个小的Web服务来托管,但我想知道如何为一个用户名+密码组合创建一个简单,安全的登录表单(用户名+密码),而不使用SQL。这不一定非常安全,但如果您不能通过查看源代码来破解它,那就太好了。可以这样做吗?

4 个答案:

答案 0 :(得分:2)

答案 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:

https://github.com/facebook/facebook-php-sdk-v4/tree/f1916f3a1e8aeece518a18dc88f05775aadb9840/examples/login-logout-get-profile

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。现在,您可以在接收密码时按照相同的步骤并比较两个哈希值。如果减少迭代次数,则更容易暴力破解哈希,但会减少服务器负载。

赞成

  • 可以将散列密码存储在同一个文件中
  • 有人查看来源无法了解您的密码
  • 使用密码长度打破存储密码的复杂性

缺点

  • 无法保证安全,有人最终可以获得访问权
  • 如果不使用https,攻击者可以通过被动网络监控了解您的密码