我可以在Python中实现一个不使用POST的网页用户认证系统吗?
我所在的大学不支持POST这个cgi方法(我知道,这听起来很疯狂),我希望能有一个系统,让用户可以用用户名和密码安全登录。这样做有可能吗?
如果不行的话,你会怎么用POST来实现呢?只是出于好奇。
谢谢!
6 个回答
0
用一点JavaScript,你可以让客户端把输入的密码和服务器生成的随机数(nonce)进行加密,然后把这个加密后的结果放在一个HTTP GET请求里。
1
你可以使用HTTP认证,如果你的系统支持的话。
你需要添加SSL,因为所有的方法,包括POST、GET和HTTP认证(除了Digest HTTP认证)都是以明文形式发送数据的。
GET和POST基本上是类似的,主要的区别在于GET发送的数据量有限,通常比POST要小得多。而且从语义上讲,GET不太适合用来发送数据,尽管技术上它们都能做到。
至于例子,你在使用什么呢?在Python中有很多选择,比如cgi模块,或者一些框架,比如Django、CherryPy等等。
5
其实你可以完全通过GET方法来实现。不过,对于登录来说,你最好使用一种完整的挑战响应协议。(你可以在客户端用JavaScript进行哈希处理。每次都需要发送一个独特的挑战。)另外,你还应该使用SSL,这样就没人能看到数据在传输过程中被窃取。
从某种意义上说,GET和POST请求在安全性上没有太大区别,因为它们都是以明文形式传输的。但在实际操作中,GET请求更容易被截获,而且很多人的日志和浏览器历史记录中都有GET请求的痕迹。:)
(或者像其他人建议的那样,使用完全不同的方法,比如HTTP认证、摘要认证,或者一些更高级的认证方案,比如AD、LDAP、Kerberos或Shibboleth。不过我假设如果你没有POST方法,你也不会有这些高级的认证方式。)