net生活

博客园 首页 新随笔 联系 订阅 管理
  30 Posts :: 0 Stories :: 496 Comments :: 26 Trackbacks
曾经在一家公司短暂的几天工作中有过这样的经历。上班的第一天﹐同组web的一位同事帮我开了一个账号﹐要我上公司的管理系统看一下公司的规章制度。

百无聊赖的看完后﹐随便点了一下左边的"员工基本信息查询"菜单﹐页面的数据显示区域显示"您无权限查看此页"﹐本想退出﹐但发现页面的查询条件输入区域存在﹐而且查询按钮只是灰掉而已﹐在查看原始码后﹐抱着试一下的心态﹐我在浏览器的地址栏输入一句js(javascript:alert(document.all['querybtn'].disabled=false))使查询按钮启用﹐然后单击它﹐居然真的把资料给查了出来。随后又打开这个系统的其它菜单﹐发现都是把动作按钮给disable掉来管理权限(当然那天我也没做什么坏事﹐只是看了一下自己和同组人员的级别和工资而已﹕)﹐由于其它一些原因﹐几天后我就换了另一家公司)

那是一家比较大的港资企业﹐用web也开发了诸如ERP等几个大型系统﹐按道理来说﹐这样的低级失误应该不会出现﹐然而在我做web开发的这几年中﹐碰到的像这样的例子还有很多﹐例如只是通过页面按钮的隐藏和显示或者通过菜单的隐藏显示等来管理权限。这些系统对于一个有web开发经验的人来说﹐其安全形同虚设。

当然任何安全都不是绝对的﹐尤其在开放的web上更是如此。但我认为对于一个web应用程序来说﹐其安全标准至少应该是﹕

如果让自己(一个有经验的web开发人员)来攻击这个系统﹐不能做到。

关于web应用程序的安全我想提出这几个问题﹕

1.您的web应用程序的安全模块是否与系统本身的业务交杂在一起﹐以至于每次在开发新的系统时都要考虑安全问题。

2.您的安全管控的依据是什么﹐是否依赖于客户端(js,dhtml,url隐藏,request信息)?

3.您的web应用程序安全模块是否易于扩展﹐以便在新的情况出现时(web serviceajax自动产生的URL请求)﹐依然能够轻松应付。

 对于这几个问题﹐我的回答如下﹕

1.web应用程序的安全模块应该独立于系统本身﹐也就是说任何的web应用程序在开发的时候都不需要考虑安全问题。例如编写有关用户是否已经

 

认证﹐是否已经授权等代码在程序中。它应该只是一个组件﹐经过简单的配置就可以让系统有灵活的安全管控机制。

2.web应用程序的安全不应该依赖于客户端的请求信息﹐对于我们来说﹐唯一相信的只有那个requestpath(因为我们是将它执行并交给客户端)

 

对于像浏览器版本﹐querystringbody,headers等等都是不可靠的﹐不能做为认证依据。

3.web应用程序的安全模块应该是可以被扩展的﹐即在一套统一的架构下﹐经过扩展﹐能够应付新的情况。

 接下来我会把我在web应用程序安全设计的一些经验﹐想法和大家分享﹐希望能够得到更多人的意见。

posted on 2006-12-22 16:10 Kevin Zou 阅读(2552) 评论(16)  编辑 收藏 网摘 所属分类: asp.net

Feedback

支持
web应用程序的安全模块的确应该独立,不该每次在开发新系统的时候都要重复的进行安全模块开发

  回复  引用    

#2楼 2006-12-22 16:21 拉拉[未注册用户]
嗯,繼續繼續,關注。
  回复  引用    

#3楼 2006-12-22 16:27 风之影[匿名]
支持

web安全的确是个大学问,期待你的好文章

  回复  引用    

#4楼 2006-12-22 17:43 scotoma      
说的不错.支持下....
  回复  引用  查看    

#5楼 2006-12-22 19:11 Jeffrey Zhao      
“用户的一切输入都是邪恶的”这个原则一定要把握住。
  回复  引用  查看    

#6楼 2006-12-22 20:00 AlphaWu      
用户的一切输入都是邪恶的!!
记住了

  回复  引用  查看    

#7楼 2006-12-22 21:28 zhh007's Bolg      
期待。。。
  回复  引用  查看    

#8楼 2006-12-22 22:33 Cat Chen      
用js动动浏览器中的DOM是小事情,不过通常都很高效易用,真正灵活的是直接用fiddler之类的工具写HTTP POST,你想提交什么都行,所以才说不要信任客户端提交的一切信息。

ASP.NET之所以作层层的Encrypt和Validation(不是在说Validation控件)也就是为了在基础层次增加一些安全保障。

  回复  引用  查看    

#9楼 2006-12-22 23:45 Wisdom-zh      
必须做安全层啊!

  回复  引用  查看    

#10楼 2006-12-23 09:07 双鱼座      
无论是Web的或者是富客户端的系统,其安全性要求没有本质区别,不必将Web系统有别于其他的系统,虽然web系统的攻击更容易。总体来讲是三层,也就是三道防线:
1.UI层。当前上下文没有权限的功能不要显示到页面上,甚至都不要用灰色显示出来。更不要按下按钮,从命令层返回没有权限。
2.命令层。当前上下文没有权限的功能在命令层控制住,在进入系统核心前就必须全部拦住,即使破坏UI规则也在所不惜。任何时候安全都是第一的。
3.数据库层。当前上下文没有权限的功能最后在访问数据库时被拦住。当然,这一层仅仅只是最后的一道防线。

  回复  引用  查看    

#11楼[楼主] 2006-12-23 10:51 小生      
@双鱼座
說得不錯﹐謝謝您的關注﹗

但是如果有一個可擴展的通用架構來管理web應用程式的安全﹐我們是否就可以不必在每次開發新系統時都要重新考慮安全了﹐我們要將安全模組與業務系統進行解耦﹐當然是web應用程式


  回复  引用  查看    

不错关注中,
  回复  引用    

#13楼 2008-07-16 14:09 Mr Chai      
--引用--------------------------------------------------
wang.seraph: 支持
web应用程序的安全模块的确应该独立,不该每次在开发新系统的时候都要重复的进行安全模块开发
--------------------------------------------------------
支持,安全第一。

  回复  引用  查看    

#14楼 2008-12-16 15:03 MBAGINL[未注册用户]
关注这个话题,感谢
  回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 600604




相关文章:

相关链接: