关于网站设计的一点点讨论
最近公司自己运营一个网站。而这个网站的主要设计者是我。而我也部分参与需求的调用,分析与确立。在这方面我经验很少,设计的过程中不仅是我个人在理念上出了问题,重要的是不断的跟team成员发生争论,导致心情也不爽,不过在这过程中也学到不少,长大了一点。这次讨论,我们不谈项目管理,不谈沟通,不谈需求,只谈,怎么样才可以设计一个好网站。
首先明确了需要,这个我想是设计好一个项目的关键。
比如我们假像需求是这样子的,我们再来谈谈,面对这样的需求,我们该怎么做。
需求如下:
1。会员问题,--- 要求网站的一些功能只提供给会员操作, 比如当用户浏览一个URL的时候,是需要会员权限的,这样就产生了下面的需求,1。要求有自动跳转功能,不管是用户登录了,或者是注册一个新用户,这些操作完成后都需要跳转到前一次的操作。甚至是跟前面的操作。这个功能到是容易实现,只需要记录用户前面几次操作的url,把他们入栈就ok了,然后登录或者注册以后就出栈
2。资源保存问题, ----? 比如项目组,要求,用户上传,或者是后台上传的资源,必须保证其他项目安全的,容易操作的访问到。
比如,管理人员在后台上传了一个图片。这个图片对于web来说可以访问,对于wap来说,访问起来也是很轻松的-- 不用在资源的路径加上网站的路径名。还有其他的等等。
3。数据库的设计, --- 自己运营的网站,对于数据库的安全性来说无疑是最高的。 我们现在采用的是mysql,现在用的是tomcat+spring+hibernate,这样就会遇到一个困难,比如设计金钱的数据,如果纯粹的保存到mysql,这样别人侵入到你web服务器的时候就可以获取你spring配置文件里面的数据密码等,这样会造成数据泄露,导致重大损失,这样导致了就是管理这些数据的安全性变的很重要,不应该直接暴露这些数据给程序,而是应该通过一些手段,比如只暴露存储过程,或者是暴露一些数据访问api给程序调用,这做虽然安全,但设计起来却是比较棘手。而且设计管理那些数据的程序变的复杂,不能直接在tomcat访问。
4。就是相对而已,当你的程序稳定以后,我们就不应该再往这个项目加上新功能,而是另外起一个项目,总之就是乱啊。
写到这里,都不知道自己在写些什么了。哈
写这篇文章的时候,记录在blog上出了问题,后来那篇blog被我删除了,想不到在这里可以找到。真是不错,同时放到论坛跟blog好像是双保险 6 楼 icefire 2007-05-17 既然打开门,当然就只有相当安全。
加密总比不加密好! 7 楼 wuhua 2007-05-17 关键的问题,是mysql在安全性方面比orcale是差的太远。
比如我现在用的是mysql4.1,本就没有存储过程,
如果有存储过程的,话,我可以把,相对重要的数据用存储过程封装起来,然后对那个数据进行密码保护,这样的密码就不是放在hibernate下面,因此就算网站被侵入,别人还是无法访问到我的数据的,
当然,这部分系统完全可以采用orcale来做,然后提供一个远程程序来访问,这样也相对安全
当然现在的系统说绝对安全是没办法做到的。只能多考虑,但考虑了也未必会去实现,因为要看成本跟其他因素来考虑。
总之麻烦。 8 楼 ahuaxuan 2007-05-17 wuhua 写道qqeerr20012001 写道密码加密一下再存储
这样做也只是相对安全。如果别人知道你的加密方法还是可以破解的
如果就算别人知道加密算法要破解也是不太可能的,这取决于加密算法,这一点不用担心,主要担心的地方是密钥的保存,如果别人知道了密钥和加密算法,那密文肯定可以被破解,在web应用中我能想到的方法是混淆加密过程,让别人不知道密钥的在项目中的位置,这样别人就不知道是使用了什么加密算法,也不知道密钥在什么地方,要破解密文几乎是不可能的了,如果还能破解就说明这个黑客相当相当的专业了 9 楼 pppppp 2007-05-17 mysql数据库你只需要绑定内网IP,外网怎么可能攻击到数据库呢 10 楼 fins 2007-05-17 我以为重要性:
硬件级别保护(防火墙之类)> 操作系统级保护 > 数据库低层保护(如楼上所说) > 数据库上层保护 > 应用层(java/php)保护 11 楼 ddandyy 2007-05-17 同意上面几位的看法
在数据库这讨论安全性就有点过了
人家都侵入到这里了 再做什么都没用了
如果真想保密 把数据库放在内网就完事了 12 楼 lighter 2007-05-17 wuhua 写道关键的问题,是mysql在安全性方面比orcale是差的太远。
比如我现在用的是mysql4.1,本就没有存储过程,
如果有存储过程的,话,我可以把,相对重要的数据用存储过程封装起来,然后对那个数据进行密码保护,这样的密码就不是放在hibernate下面,因此就算网站被侵入,别人还是无法访问到我的数据的,
当然,这部分系统完全可以采用orcale来做,然后提供一个远程程序来访问,这样也相对安全
当然现在的系统说绝对安全是没办法做到的。只能多考虑,但考虑了也未必会去实现,因为要看成本跟其他因素来考虑。
总之麻烦。
采用Oracle,成本考虑的因素呢,不低的哦
ps:我同意上面fins所说的意见 13 楼 cqyaoran 2007-05-17 我也觉得,楼主考虑的太过了,在网络上只要相对的安全,没有绝对的 14 楼 ahuaxuan 2007-05-18 lighter 写道wuhua 写道关键的问题,是mysql在安全性方面比orcale是差的太远。
比如我现在用的是mysql4.1,本就没有存储过程,
如果有存储过程的,话,我可以把,相对重要的数据用存储过程封装起来,然后对那个数据进行密码保护,这样的密码就不是放在hibernate下面,因此就算网站被侵入,别人还是无法访问到我的数据的,
当然,这部分系统完全可以采用orcale来做,然后提供一个远程程序来访问,这样也相对安全
当然现在的系统说绝对安全是没办法做到的。只能多考虑,但考虑了也未必会去实现,因为要看成本跟其他因素来考虑。
总之麻烦。
采用Oracle,成本考虑的因素呢,不低的哦
ps:我同意上面fins所说的意见
mysql5.0不是也支持存储过程吗,如果只是为了存储过程而引入oracle这个出发点似乎不是很正确 15 楼 wuhua 2007-05-18 ahuaxuan 写道lighter 写道wuhua 写道关键的问题,是mysql在安全性方面比orcale是差的太远。
比如我现在用的是mysql4.1,本就没有存储过程,
如果有存储过程的,话,我可以把,相对重要的数据用存储过程封装起来,然后对那个数据进行密码保护,这样的密码就不是放在hibernate下面,因此就算网站被侵入,别人还是无法访问到我的数据的,
当然,这部分系统完全可以采用orcale来做,然后提供一个远程程序来访问,这样也相对安全
当然现在的系统说绝对安全是没办法做到的。只能多考虑,但考虑了也未必会去实现,因为要看成本跟其他因素来考虑。
总之麻烦。
采用Oracle,成本考虑的因素呢,不低的哦
ps:我同意上面fins所说的意见
mysql5.0不是也支持存储过程吗,如果只是为了存储过程而引入oracle这个出发点似乎不是很正确
同意fins的意见
我用的是mysql4.1,
而且mysql5.0的存储过程不知道稳定否? 16 楼 ahuaxuan 2007-05-18 wuhua 写道ahuaxuan 写道lighter 写道wuhua 写道关键的问题,是mysql在安全性方面比orcale是差的太远。
比如我现在用的是mysql4.1,本就没有存储过程,
如果有存储过程的,话,我可以把,相对重要的数据用存储过程封装起来,然后对那个数据进行密码保护,这样的密码就不是放在hibernate下面,因此就算网站被侵入,别人还是无法访问到我的数据的,
当然,这部分系统完全可以采用orcale来做,然后提供一个远程程序来访问,这样也相对安全
当然现在的系统说绝对安全是没办法做到的。只能多考虑,但考虑了也未必会去实现,因为要看成本跟其他因素来考虑。
总之麻烦。
采用Oracle,成本考虑的因素呢,不低的哦
ps:我同意上面fins所说的意见
mysql5.0不是也支持存储过程吗,如果只是为了存储过程而引入oracle这个出发点似乎不是很正确
同意fins的意见
我用的是mysql4.1,
而且mysql5.0的存储过程不知道稳定否?
没用过,我现在都搞不清在谈论什么了,前提是什么,手套兄前面所说的是在黑客已经入侵到服务器这个情况作为前提,当然入侵到服务器之前肯定可以做其他的保护措施(这个是fins提的那些)
我回的贴的前提也是在黑客已经入侵到服务器这个情况作为前提:就是即使入侵到服务器,也让它得不到数据库密码,因为密码已经加密,密钥在项目中(可能是任何一个文件,成千上w个,让他找吧),这样他即使入侵服务器也不能得到数据库密码
而且入侵到服务器之前什么硬件防火墙等等之类是网管做的,我们关心的是在程序员这个角度如何去保护我们的应用
17 楼 Sam1860 2007-05-18 引用我回的贴的前提也是在黑客已经入侵到服务器这个情况作为前提:就是即使入侵到服务器,也让它得不到数据库密码,因为密码已经加密,密钥在项目中(可能是任何一个文件,成千上w个,让他找吧),这样他即使入侵服务器也不能得到数据库密码
汗。。。有这样的前提还用讨论吗。别人要是有这样的技术干嘛要入侵应用服务器,入侵数据服务器就OK了
别外楼主说的什么存储过程加强安全性,头一次听 18 楼 ahuaxuan 2007-05-18 Sam1860 写道引用我回的贴的前提也是在黑客已经入侵到服务器这个情况作为前提:就是即使入侵到服务器,也让它得不到数据库密码,因为密码已经加密,密钥在项目中(可能是任何一个文件,成千上w个,让他找吧),这样他即使入侵服务器也不能得到数据库密码
汗。。。有这样的前提还用讨论吗。别人要是有这样的技术干嘛要入侵应用服务器,入侵数据服务器就OK了
别外楼主说的什么存储过程加强安全性,头一次听
晕,按照你的说法那人家jboss还保护数据库密码个什么劲啊,炫耀技术吗 19 楼 galaxystar 2007-05-18 现在的互联网应用,安全已经起到主导地位! 20 楼 Sam1860 2007-05-18 ahuaxuan 写道晕,按照你的说法那人家jboss还保护数据库密码个什么劲啊,炫耀技术吗
呵呵,有这个可能性,很多东西都有人做,但不一定都实用。最起码JBOSS加密过的数据源密码,别人可以在JBOSS的源码里找到破解算法。(根据你那些假设,估计入侵者有大把时间在服务器上漫游)
配置文件根本不应该成为安全问题的关注点。加强防火墙和数据库本身的安全性才是正道。如前面有人说的把该用户的访问限定在局域网内 21 楼 clamp 2007-05-19 果然是技术性论坛阿,讨论讨论就深入到技术了,这是产品开发的大忌.
产品开发时,一个阶段性版本具体包括那些国内特性,大家可以讨论,但是决定权只能有一个人来做.这不是好或坏的问题,而是效率问题.
产品作的不好固然有问题,但是做的慢了一定会死.
22 楼 wuhua 2007-05-19 ahuaxuan 写道wuhua 写道ahuaxuan 写道lighter 写道wuhua 写道关键的问题,是mysql在安全性方面比orcale是差的太远。
比如我现在用的是mysql4.1,本就没有存储过程,
如果有存储过程的,话,我可以把,相对重要的数据用存储过程封装起来,然后对那个数据进行密码保护,这样的密码就不是放在hibernate下面,因此就算网站被侵入,别人还是无法访问到我的数据的,
当然,这部分系统完全可以采用orcale来做,然后提供一个远程程序来访问,这样也相对安全
当然现在的系统说绝对安全是没办法做到的。只能多考虑,但考虑了也未必会去实现,因为要看成本跟其他因素来考虑。
总之麻烦。
采用Oracle,成本考虑的因素呢,不低的哦
ps:我同意上面fins所说的意见
mysql5.0不是也支持存储过程吗,如果只是为了存储过程而引入oracle这个出发点似乎不是很正确
同意fins的意见
我用的是mysql4.1,
而且mysql5.0的存储过程不知道稳定否?
没用过,我现在都搞不清在谈论什么了,前提是什么,手套兄前面所说的是在黑客已经入侵到服务器这个情况作为前提,当然入侵到服务器之前肯定可以做其他的保护措施(这个是fins提的那些)
我回的贴的前提也是在黑客已经入侵到服务器这个情况作为前提:就是即使入侵到服务器,也让它得不到数据库密码,因为密码已经加密,密钥在项目中(可能是任何一个文件,成千上w个,让他找吧),这样他即使入侵服务器也不能得到数据库密码
而且入侵到服务器之前什么硬件防火墙等等之类是网管做的,我们关心的是在程序员这个角度如何去保护我们的应用
同意您的意见,作为程序员,我们只是尽可能的采用我们现有的知识来保证我们程序的安全性,
不过像我们这种小公司,现在来说还不存在网管,所以网管很大部分的工作我们都得负责,如果对于那些数据相关不是很重要的来说,我做一般的保护措施就ok了,
但个人感觉,我现在有些数据像银行那些数据那么重要,可是我们却没有银行那些保护系统,所以也不知道该怎么做才可以最大限度的保证数据的安全性。
我的意思是我没有做过银行那些系统,不知道到底怎么样才安全。 23 楼 wuhua 2007-05-19 clamp 写道果然是技术性论坛阿,讨论讨论就深入到技术了,这是产品开发的大忌.
产品开发时,一个阶段性版本具体包括那些国内特性,大家可以讨论,但是决定权只能有一个人来做.这不是好或坏的问题,而是效率问题.
产品作的不好固然有问题,但是做的慢了一定会死.
同意您的意见,就想我的boss说的,交付一个可以使用的系统,比交付一个充满未知bug,但看起来却很炫耀的东西根本就是本质的区别。
他宁愿使用只有一个功能,但这个功能却是很稳定,而不愿意使用100个功能,但这些功能随意都可以致命一击。
哈哈哈 24 楼 wuhua 2007-05-19 Sam1860 写道引用我回的贴的前提也是在黑客已经入侵到服务器这个情况作为前提:就是即使入侵到服务器,也让它得不到数据库密码,因为密码已经加密,密钥在项目中(可能是任何一个文件,成千上w个,让他找吧),这样他即使入侵服务器也不能得到数据库密码
汗。。。有这样的前提还用讨论吗。别人要是有这样的技术干嘛要入侵应用服务器,入侵数据服务器就OK了
别外楼主说的什么存储过程加强安全性,头一次听
所谓的存储过程安全性质,也是我老板说的。
他的意思就是:
假设你把数据库放在外网,你对数据进行了密码保护,别人需要得到您的密码,
如果别人入侵了你的web服务器,就可以通过hibernate获取你的username 和password,这样就可以入侵你的数据库
如果我的用户名跟密码不是通过hibernate来登录的,相当于另外建立一个数据库,而这个数据库并不让hibernate来访问,我们要获取数据,只需要调用存储过程这个暴露给程序来访问,这样就相当安全,
这是我的理解。
哈 25 楼 wuhua 2007-05-19 galaxystar 写道现在的互联网应用,安全已经起到主导地位!
这个当然了。
小的时候,每人理你,网站大了,什么人都想找你的茬。
我的异常网推荐解决方案:oracle存储过程,http://www.myexception.cn/oracle-develop/177537.html