1

我的大学不支持 POST cgi 方法(我知道,这很疯狂),我希望能够拥有一个用户可以拥有用户名和密码并安全登录的系统。这甚至可能吗?

如果不是,您将如何使用 POST 进行操作?只是出于好奇。

干杯!

4

6 回答 6

5

实际上,您可以使用 GET 方法完成所有操作。但是,您需要对登录使用完整的质询响应协议。(您可以使用 javascript 在客户端进行散列。您只需要每次发送一个唯一的质询。)您还需要使用 SSL 来确保没有人可以看到穿过的字符串。

从某种意义上说,GET 和 POST 请求之间没有真正的安全差异,因为它们都以明文形式传递,在其他意义上和实践中...... GET 非常容易拦截,并且遍布大多数人的日志和您的网络浏览器的历史。:)

(或者按照其他海报的建议,使用完全不同的方法,如 HTTP auth、digest auth 或一些更高级别的身份验证方案,如 AD、LDAP、kerberos 或 shib。但是我有点假设如果你没有 POST 你不会'这些也没有。)

于 2008-09-16T07:10:40.033 回答
1

如果支持,您可以使用 HTTP 身份验证。

您必须添加 SSL,因为所有方法、POST、GET 和 HTTP Auth(好吧,除了 Digest HHTP 身份验证)都发送纯文本。

GET 基本上就像 POST 一样,它只是对您可以发送的数据量有一个限制,通常比 POST 小很多,并且语义差异使得从这个角度来看 GET 不是一个好的候选者,即使从技术上讲它们都是可以做到。

至于例子,你在用什么?Python有很多选择,比如cgi模块或者一些框架,比如Django、CherryPy等

于 2008-09-16T07:10:04.480 回答
0

使用一点 JavaScript,您可以让客户端对输入的密码和服务器生成的 nonce 进行哈希处理,并在 HTTP GET 中使用它。

于 2008-09-16T07:12:42.540 回答
0

一个不错的选择:HTTP Digest 身份验证

很难很好地完成,但可以选择:使用 Javascript 进行客户端散列

于 2008-09-16T07:44:03.837 回答
0

在这种情况下,Javascript 是最好的选择。

随着对用户名和密码的请求,它发送一个唯一的随机字符串。然后,您可以使用 javascript md5 库通过组合随机字符串和密码 [pwhash = md5(randomstring+password)] 来生成散列密码。然后,javascript 实例化对http://SERVER/login.cgi?username=TheUsername&random=RANDOMSTRING&pwhash=0123456789abcdef0123456789abcdef的调用

然后服务器必须做两件事:检查随机字符串是否曾经被使用过,如果有,则拒绝请求。(对安全非常重要)

查找用户名的明文密码,然后执行 md5(randomstring+password)。如果这与用户在 URL 中作为 pwash 提供的内容相匹配,那么您就知道它是用户。

检查随机字符串是否曾经被使用过的原因是为了阻止重复攻击。如果有人能够看到网络流量或浏览器历史记录或日志,那么他们可以简单地使用相同的 URL 再次登录,而他们是否知道原始密码并不重要。

我还建议将“Pragma: no-cache”和“Cache-Control: no-cache”放在 CGI 脚本返回的标头的顶部,这样经过身份验证的会话就不会存储在浏览器或您的 ISP 网络缓存中.

更安全的解决方案是使用适当的加密和挑战响应。你告诉服务器你的用户名,服务器发回一个挑战(一些用你的密码加密的随机字符串),然后你告诉服务器随机字符串是什么。如果您能够告诉服务器,那么显然您拥有密码并且您就是您所说的那个人!Kerberos 就是这样做的,但要小心得多,以防止各种攻击。

于 2008-10-15T09:25:06.327 回答
-1

安全登录是非常主观的。完全“安全”并不容易实现(如果可能的话……值得商榷)。但是,您可以靠近。

如果 POST 不是一个选项,也许您可​​以使用目录安全方法,例如 .htaccess 或 windows 身份验证,具体取决于您所在的系统。

以上两种方法都会为您提供允许输入用户名和密码的弹出窗口。

要使用 POST 作为发送登录凭据的方法,您只需使用带有 method="post" 的 HTML 表单并使用 $_POST['varname'] 方法从 PHP 或 ASP 页面检索信息在 PHP 或 ASP 中的 request.form("varname") 方法中。例如,从 PHP 或 ASP 页面中,您可以在用户数据库中进行查找,以查看该用户名/密码组合是否存在,如果存在,则将它们重定向到适当的页面。

作为参考,HTML/ASP 部分使用http://www.w3schools.com/ASP/showasp.asp?filename=demo_simpleform

于 2008-09-16T07:19:07.017 回答