2008-04-15

做一个有责任心的程序员

关键字: web

  我是从做友财网开始我第一次做放到网外上的程序的,算是个菜鸟了。不过,从做这个网站中,我发现应该有不少的程序员会犯和我一样的错误,对安全性的乎略。

  我也不说什么大的概念了,举一个最简单的例子,一般来说B/S的程序,删除操作都会给后台传一个ID值。很多程序员,会把直接把这个ID对应数据库中的数据删除了,这可能是程序员偷了一个小懒,没有判断当前删除数据的这个人是否有权限删除。可是对于放在外网上的程序来说,这相当给别人在公网上留了一个很大的后门!可能很多人说我说的这个问题大家都知道,可是真正能做到细心判断业务逻辑后再删除的有多少人呢?我去年在北京一家公司上班,这公司主要是做博客和社区的(具体当然不会告诉你们了,嘿嘿),这个公司做的东西,最起码在我上班的那会,我说的这些后门还是留着的!知道了xxx.do之后,传一个ID就可以看一条数据,传一个ID就可以修改一条数据,甚至是删除!

  其实我说这些简单的问题,大家都心里知道,但可能项目进度紧,工作压力大,没有时间去做这块内容,想的以后有时间了再去做。可是真的有时间了,再回过头把这些逻辑再补上的又有多少人呢?当然Web应用程序的安全,不光我说的这么简单这一点,但想给大家说明,至少别把这么大的后门留给所有的网民吧,尤其是像我做的在线记帐的网站的,保护好每个人的隐私,更是我的责任,但国内在线记帐的网站也很多,我试了国内几家做的比较大的,刚说的问题有几家就是没有把最基本的安全性做到!也不知道是程序员水平太低还是责任心太差。。。

  这篇文章不是告诉大家怎么去删除别人网站的数据,是想告诉程序员把最基本的安全性做好,给使用者一个比较安全空间,放心的用软件,我也是我做友财网的原则。不过,有时把安全性做的太好,也会给用户代来不必要的麻烦。。。这个平衡点也要掌握好。。

  友财网是在线记帐的网站,安全性和保密性也是首先和着重考虑的因素,让我们做一个有责任的程序员!把别人的数据和隐私保护好!

  友财网http://www.ucai8.com   

评论
j_butterfly 2008-04-24
引用
觉得很多公司都很浮躁,很多应该重视的东西都忽视了。

嗯。是啊~~现在这个公司的好多程序员,能把功能实现就很不错了,别说程序的质量了,连注释和缩进都没有。唉。。
Absolutely 2008-04-22
觉得很多公司都很浮躁,很多应该重视的东西都忽视了。
j_butterfly 2008-04-21
引用
友财网做的很不错,界面也漂亮,值得学习!

谢谢:)一起进步~
for_cyan 2008-04-21
友财网做的很不错,界面也漂亮,值得学习!
bnmcvzx 2008-04-17
没有在公司里做过,所以也没理由评价什么,不过我想这些应该是程序员的基本习惯吧
j_butterfly 2008-04-17
我想通过这篇文章给大家提个醒,我们写程序要对用户负责~~别让用户的信息轻易 的给别人看~~
j_butterfly 2008-04-17
引用
传值的时候取出当前用户的用户id 每个用户的id跟他的账务有外键关联关系
然后限制只可以操作跟此用户id有关系的账务就可以了这样效率也不会怎么降低的应该比过滤器的效率高

嗯~~我就是这样做的~~
bnmcvzx 2008-04-17
传值的时候取出当前用户的用户id 每个用户的id跟他的账务有外键关联关系
然后限制只可以操作跟此用户id有关系的账务就可以了这样效率也不会怎么降低的应该比过滤器的效率高
hax 2008-04-17
引用
每个人查看帐单的URL都一样,所有都有权限的。

既然url一样,那你怎么看其他人的账单?你的问题根本本身就有矛盾。

to Quake Wang:
你说的是对功能点权限的判断。通常是需要在代码里检查权限。但是也可以借鉴filter的思路,对其进行包装。比如假设功能点直接对应页面上的控件,则你可以直接让控件的基类直接支持权限判断,如果没权限就不显示。这样你无需显式的写权限检查代码了。
j_butterfly 2008-04-16
引用
当然可以用filter控制。filter的作用是两个:
1. 验证。比如看看session里有没有记录userId,没有的话就是没有登录过,拒绝。
2. 权限。根据userId找到其权限,如果该userId没有访问当前url(也可以包括其他条件)的权限,拒绝。

据我了解,Acegi一个是URL级别的,一个是方法级别的。这两个并不能解决我说的问题哦。每一个登陆后,Session中都有userID,但是你只能查看你的帐单,并不能查看别人的帐单 ,这是业务逻辑的判断,可以用Acegi来控件吗?每个人查看帐单的URL都一样,所有都有权限的。
Quake Wang 2008-04-16
filter和acegi也无法避免针对每个功能进行权限校验时候需要写类似的代码,和其他方式相比好处就是可以把这些代码集中到一处或者配置文件里面,但是如果新加一个功能,忘记了在这些集中控制的地方加上一行代码,这个功能点可能又会成为权限判断的死角。说到底还是需要测试来保障。
hax 2008-04-16
引用
但是像我说的,用户只能查看自己的帐单,你用filter能控制的住 吗?因为查看帐单的url都是一样的啊。


当然可以用filter控制。filter的作用是两个:
1. 验证。比如看看session里有没有记录userId,没有的话就是没有登录过,拒绝。
2. 权限。根据userId找到其权限,如果该userId没有访问当前url(也可以包括其他条件)的权限,拒绝。
jiangshaolin 2008-04-15
作为一名新手,我都根本没考虑这方面的.把功能实现出来就OK了
j_butterfly 2008-04-15
引用
一般采用filter来集中控制验证和权限

但是像我说的,用户只能查看自己的帐单,你用filter能控制的住 吗?因为查看帐单的url都是一样的啊。
hax 2008-04-15
一般采用filter来集中控制验证和权限。jguard和acegi都是如此。自己做也没有什么特别难的。
魔力猫咪 2008-04-15
Java其实是有安全框架的,就是大家很少用罢了。这方面的书也比较少。使用像acegi这样的安全框架就可以保护你的应用程序了。
j_butterfly 2008-04-15
业务逻辑的检验,还没有什么框架可以直接用吧?
Quake Wang 2008-04-15
引用
项目进度紧,工作压力大,没有时间去做这块内容

这些都不是根源,如果框架不能简单地支持这些校验,而是需要程序员针对每个用户操作一行一行地复制粘贴权限校验代码,很容易就会出现遗漏或者偷懒,再加上没有方便和完整的测试,出现这些问题就不足为奇了。不过这种类似细粒度操作的权限检查,我也不知道是否有"完美"的解决方法,有谁可以推荐看看?
blucedong 2008-04-15
网络的安全性是大家都关心的问题,无论是编程者或是最终的用户也好,都希望能让自己的数据得到安全的保障。
发表评论

您还没有登录,请登录后发表评论

j_butterfly
  • 浏览: 9289 次
  • 性别: Icon_minigender_1
  • 来自: 乌鲁木齐
  • 详细资料
搜索本博客
博客分类
最近加入圈子
存档
最新评论