在复杂的web环境下,我们没有百分的把握保证信息在传输的过程中不被接货,那不是用明文如何告诉服务器自己的身份呢?

在一些高度通信安全的网络中,数据传输会使用HTTPS作为传输协议,但是通常情况下我们没必要使用HTTPS传输,虽说安全,但传输数据都需要加密解密,很费事。我们可以使用一些加密方式(md5)对密码进行加密即可。但是仅仅对密码加密没有任何作用,所以可以在密码中加入一些其他字符,合并之后是这个密码成为临时密码。

<label>username:</label><input id="uid" type="text" />
<label>password:</label><input id="pwd" type="password" />
<input type="submit" />
<script type="text/javascript">
var t = new Date*1,
uid = $("#uid").val(),
pwd = $("#pwd").val(),
delta = encrypt($("#pwd").val() + t); $.post("./login.php",{
uid: $("#uid").val(),
pwd: delta,
tid: t
}, function(data){
//do something.
})
</script>

在上面,提交表单时,pwd并不是真是的密码,他是pwd与t混合再加密的字符串。这样的话即便被截获也是一个无效的数据。即便截获后知道了破解方式,还可以在后台给他设定一个时效限制。

<?php
define("uid", "user-A");
define("pwd", "user-A-pwd"); if(time() - $_POST['tid'] > 60*2 ||
$_POST['uid'] !== uid ||
decrypt(pwd + $_POST['tid']) !== $_POST['pwd']){
die("error");
}
?>

即如果下面三个条件有一个不满足就报错

1.时间超过两分钟

2.uid不匹配

3.pwd与t的组合密码不匹配

当然,上面提到的encrypt和decrypt都是约定好的加密和解密方式,通常会使用md5加密。

这样的加密传输方式。需要客户端和服务器端的时间比较准确。如果考虑时间不准确的问题以及hacker动作迅速的问题,那就得用token来验证了。

所谓的token,其实就是在登录之前向服务器发送一个请求,获取准入的一个临时密码,这个临时密码是由服务器给出,所以不存在上面所说的时间不准确的问题,同时这个token也是一个随机字符串,只能单次使用,hacker很难获取,即便获取也无法使用,因为下一步登录所需的信息他没有。

很多网站的认证流程都是用的

OAuth认证原理:

通过你在平台申请的API KEY向https://……/oauth/authorize请求一个临时密码,也就是token code,然后利用token code向https://……/oauth/token请求用户数据。整个流程十分简单。

这是一个简单的demo,获取你的头像和姓名。

使用token的弊端是需要额外发送一次请求,过程稍微复杂。有些公司VPN通道就是利用token做密码,为了保证高安全性,他们使用的是一个信息与服务器同步硬件设备,和银行发的动态口令一样,每次登陆都需要输入这个口令,那这个口令也就是token,不过他不是网络传输获取,所以安全性更高

浏览器后退按钮

这个在注册或者登陆的时候是一个普遍的问题,登陆之后,跳转到另外一个页面,我的鼠标有两个侧键,是用于前进和后退的,有时候会误点侧键,这个时候页面又会回到之前的登录页面,但事实是用户已经登录了,所有页面的状态都应该是已登录的,不管什么情况下都不应该让用户在看到这个页面。用户的点击操作会引发上面的问题,而程序 history.go(-1) & history.back() 也会有一样的bug。

这样的问题处理方案比较简单,ajax 拿到 success 的状态码时立刻做跳转,但是这里不能用 window.location.href,这样浏览器还是会记录这个登录历史,应该使用 window.location.replace,替换当前历史记录。

记住密码

用户最烦的就是每次登录页面都要输入长长的账号密码,如果没有勾选“记住密码”,则用户的登录状态保存在回话的 session 中,关闭页面或者浏览器的时候,回话结束,session 被删除,这样当用户下次登录的时候又需要重新输入密码。表单页面的“记住密码”复选框默认状态应该是已选择,用户的潜意识行为都是要少操作的。

当用户提交信息成功之后,直接在 cookie 中保存账号密码?这样的做法显然是不合理的,密码怎么能够明文保存呢,有人会想到加密处理密码然后再保存,或者使用服务器来设置 cookie,这些做法都是可以的,不过最好的方式是,当用户成功提交信息时,服务器给前端提供一个 token,这个 token 是用于自动登录的,我们只需要保存 token 就行了,这样就很好的避免了 cookie 中存放用户隐私信息了。

还有一个要注意的是,当用户取消了“记住密码”的复选框时,应该立即清除相关 cookie。

HTTP下密码的安全传输、OAuth认证的更多相关文章

  1. OAuth认证原理及HTTP下的密码安全传输

    很多人都会问这样一个问题,我们在登录的时候,密码会不会泄露?随便进一个网站,登录时抓包分析,可以看到自己的密码都是明文传输的,在如此复杂的web环境下,我们没有百分的把握保证信息在传输过程中不被截获, ...

  2. 在Phonegap下实现oAuth认证

    原文:http://www.kuqin.com/mobile/20120719/322873.html 前段时间做过两次关于Phonegap的现场交流会议分享.基本上把Phonegap的一些特性和大家 ...

  3. 拿nodejs快速搭建简单Oauth认证和restful API server攻略

    拿nodejs快速搭建简单Oauth认证和restful API server攻略:http://blog.csdn.net/zhaoweitco/article/details/21708955 最 ...

  4. 一步一步搭建 OAuth 认证服务器

    http://www.fising.cn/2011/03/%E4%B8%80%E6%AD%A5%E4%B8%80%E6%AD%A5%E6%90%AD%E5%BB%BA-oauth-%E8%AE%A4% ...

  5. 服务端API的OAuth认证实现

    http://stackoverflow.com/questions/12499602/body-joints-angle-using-kinect?rq=1 新浪微博跟update相关的api已经挂 ...

  6. oAuth 认证

    这段时间公司开发项目用到oAuth2协议,现在做一下梳理. CORS即Cross Origin Resouce Share,跨域资源共享:是W3C为防止脚本攻击,而制定的安全标准之一,它云溪浏览器向跨 ...

  7. Android OAuth认证

    OAuth认证 为了安全地访问在线服务,用户需要在服务上进行身份验证,即要提供他们的身份的证明.对于一个要访问第三方服务的程序来说,安全问题甚至更复杂.不仅仅是用户需要在访问服务前要进行身份验证,而且 ...

  8. oAuth 认证和授权原理

    什么是OAuth授权?   一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...

  9. OAuth认证与授权

    什么是OAuth授权?   一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...

随机推荐

  1. iOS iOS9.0 的CoreLocation定位

    一.简介 iOS9.0如果当前处于前台授权状态,默认是不可以后台获取用户位置. 如果在前台授权下,让其能获取到后台定位,该怎么办 可以设置以下属性为YES,就可以继续获取后台位置,但是会出现蓝条 使用 ...

  2. store 加载异常处理与加载信息提示

    var msgTip = '';   // 一定要定义在使用前,且定义为全局变量 /--------------------------------store--------------------- ...

  3. Cookie/Session机制

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  4. 揣摩实现一个ioc容器需要做的事情

    思路: ioc框架的核心就是管理bean的生命周期,bean的生命周期包括:创建,使用,销毁. 创建 容器在创建一个bean的实例之前必须要解决以下问题:第一个问题: 创建bean的信息如何提供给你容 ...

  5. 在unix系统下的 .o文件 .a文件 .so文件说明和相互关系

    .o文件 .o文件就是对象文件,包含编译好的可执行代码,当程序执行时,被链接库链接调用[相当于windows里的obj文件] .a文件unix中的静态链接库,包含多个需要包含的.o文件,主要特点是在 ...

  6. 简单看看ThreadPool的源码以及从中看出线程间传值的另一种方法

    这几天太忙没时间写博客,今天回家就简单的看了下ThreadPool的源码,发现有一个好玩的东西,叫做”执行上下文“,拽名叫做:”ExecutionContext“. 一:ThreadPool的大概流程 ...

  7. 检测PC端和移动端的方法之一

    window.mobileCheck = function() { var check = false; (function(a){if(/(android|bb\d+|meego).+mobile| ...

  8. 烂泥:学习Nagios(三): NRPE安装及配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 在前两篇文章中,我们介绍了有关nagios的安装与配置,文章为<烂泥:学习Nagios(一):Nagios安装>.<烂泥:学习Nagio ...

  9. x01.os.13: 文件系统

    停了两天电,忽然得空闲.找来破吉他,已然不成弦.           丁丁当当敲,敲到电来到.为把时间捡,熬夜三四点. 从我的置顶随笔 x01.Lab.Download 中下载 x01.os.12.t ...

  10. netbeans设置语言

    netbeans的界面语言 默认是按系统语言 设的. 想要自己指定的话,加上以下参数就可以了. 中文 --locale zh:CN 英文 --locale en:US 日文 --locale ja:J ...