
Services项目中,MyService是服务实现类,另外还有KjUpdate类和SendPrize类,这两个类里面的方法是在Hosting项目中执行的,那么,在KjUpdate类和SendPrize类中的数据库语句应该是安全的吧?
------解决思路----------------------
想不想分层随便你,只是你以后改起来东一块西一块,自己可能会被绕糊涂,其他没什么,即便全部写在服务实现里面,但最终还是在Hosting中的dll里头,所以安全性上没什么区别,当然你服务器给人端掉了,你写哪儿都一样。
------解决思路----------------------
通俗点讲吧,你把归数据库操作的代码归在一起,不要散在多个地方,甚至像你这边准备散到多个项目中去。譬如以后数据库表进行了修改或是某个功能进行了调整,那么你就得到处找了。数据库操作的代码清理出来放在一起,Hosting只需调用他的函数就可以了,本身Hosting就是需要引用Services的,所以没有必要在Hosting中再出现数据操作的代码。
------解决思路----------------------
并不会因为用WCF就变安全。WCF也是接收请求,返回数据,出错的话返回错误。
为了安全,你至少需要:(包括但不限于以下措施)
1:统一控制报错信息,不直接输出异常错误。可以用Behavior等处理。
2:SQL注入等可能的漏洞一样必须控制。
3:WCF等于把功能直接暴露在网络上,必须有合适的验证/登录机制;想象一下随便谁直接调用你的Delete方法删掉了你的大量数据。
------解决思路----------------------
你的 KjUpdate 和SendPrize 中的实现机制对客户端完全是屏幕的,客户端根本不知道你有没有使用数据库、使用什么数据库。单从这角度上说,可以说大大提高了安全性。
比如说,你只能用你的手机的客户端给别人发短信,你能对移动公司的凡是涉及短信的数据库“增删改查”吗?不能吧!从这个角度上说,这就最起码比后者来说,是安全的了。至于说短信内容是不是有什么病毒之类的,那是另一回事了。
------解决思路----------------------
对客户端完全是屏幕的 --> 对客户端完全是屏蔽的
其实这里所谓的“是安全的”,往往只是一个附属的东西。往往是对初学者实在是没有什么让他立刻就能听懂的东西了,不得不用这种比较附属的东西来说。
独立业务服务的主要作用,在于它是“业务服务”。比如说移动公司的短信,总共可能也就3个功能,它曾经催生了几千亿的业务,几十万家软件公司用它来开发各种应用(例如公共信息、企业通知、彩票、CRM、验证码、交友游戏,等等)。你的业务系统,也可以设计一个服务接口,开发几个功能调用。这就是你必须自己来设计的东西,这就是 SOA 概念的基础。甚至一个借口后边可能负载均衡地有上千个业务服务器、上百个数据库同步版本,而不是一个。
因此自己独立自主地开放业务服务接口,跟随便把自己的一台机器上的关系数据库抛给客户端,这种区别简直是天上地下的区别。有些人学了好几年开发,还是只会做点小办公室里的 OA(大的城域网或者互联网的做不了),往往就是因为只会学校里学的那种“客户端直接访问数据库”的两层架构,限制了最基本的能力。
------解决思路----------------------
你的 KjUpdate 和SendPrize,必须是一个基于业务接口而设计的概念,完全忘掉数据库概念。只有在调整性能等等要求背景下,才可能会考虑数据库等等内部机制。但是在“安全性”上,这就应该从业务角度来考虑。
例如你在网络上开放一个“随便修改用户自己的钱包金额”的接口,这合适吗?这合适不合适,从业务角度去看,不要从数据库角度去看。
因此满脑子只有“增删改查”的人,很难难以评估是非问题。实际上你只要站在业务角度评估安全性就行了。
------解决思路----------------------
只要直接使用了外部传入的数据,那么就是不安全的