关于web应用程序安全的思考(序)
2008-11-26 13:36:02 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

核心提示: 1:每个页面都需要写权限管控代码(即使能将这样的类似代码封装成一个方法,由于涉及到具体页面的具体控件,关于web应用程序安全的思考(序)(10),所以在aspx中还是少不了这样的权限管控代码),2:权限代码与业务逻辑本质上是彼此无关,删除,修改和查看用户信息,勉强放在一起会违反低耦合原则,
1:每个页面都需要写权限管控代码(即使能将这样的类似代码封装成一个方法,由于涉及到具体页面的具体控件,所以在aspx中还是少不了这样的权限管控代码)。
2:权限代码与业务逻辑本质上是彼此无关,勉强放在一起会违反低耦合原则,因此在权限变动或修改时(例如增加一种角色,增加一个按钮)都可能会 影响到这些代码。
3:IsAdmin,IsManager等都属于硬编码(hardcode)方式,这样一是在角色或权限变动时要重新修改代码,更重要的是无法动态管理权限(如动态分配角色的权限)。
4:适用范围有限,基本上只适用于aspx文件,而如果系统需要管控xml,jpg,ashx,web service等其它文件或程序的权限时,又要进行权限设计了。
5:权限管控代码无法重用,每个新系统开发时都要重新考虑权限管控。
要解决上面的这些问题,关键就是权限管控观念的转变:
避免在业务程序中直接或间接加入权限判断,角色管控等代码(原因见上述第2,3点)。
具体来讲,就是程序员在开发每一支程序时,就应该想到,user在操作这支程序时,他就应该已通过安全管控,而程序员在写这支程序时,也只要考虑如何实现这支程序要完成的功能就行。
例如上面这个例子,权限管控与程序本身的显示,修改,删除逻辑纠缠在一起,耦合度过大,使得这两者在有变化时互相影响,增加程序的复杂性。如果转成这支程序只处理与业务逻辑有关的功能,成为上节中所讲的一种权限对象—系统功能,这样就可以像普通的厂别权限一样进行统一的权限判断和管理了。
从用户需求得知,有四个这样的系统功能需要实现,分别是新增,删除,修改和查看用户信息。
那可能首先就会写四支程序,分别实现四个功能:
更多精彩
赞助商链接