我有一个项目要在医疗保健领域完成,那么将使用或应该使用什么设计模式,因为系统应该足够强大,以便黑客找不到破解或窃取信息的方法。 / p>
the following technology is used
1.struts 1.2.9
2.mysql for backend
3.spring security.
所以如果可能的话,请建议我最好的设计和样本,因为我从未使用过设计模式。
所以请帮助我实现这个目标
问候。
答案 0 :(得分:3)
安全系统的一般准则。 (不完整,只是我自己的观察)
永远不要信任信息,即使您只是从数据库中读取它,也不要认为存储100%是安全的,总是验证它是安全的(没有sql或脚本注入)。
不要将检查与存储分开,你永远不知道有人会在没有检查的情况下复制粘贴代码,尝试以不中检查的方式进行存储。
永远不要相信默默无闻,始终要验证权限和数据。
使用一致的权限解决方案,因此不应存在关于如何检查权限的歧义。
仔细考虑谁需要访问并避免加载不应该存在且不需要的信息,如果不在内存中则更难获取访问权。
使用具有内置权限检查的单独数据检索层,以便通过黑客攻击第一个客户端层来获取数据更加困难。
在几个步骤中考虑风险,在数据库中存储脚本标记可能是安全的,但如果在有效会话中加载到页面中,该脚本可能会造成什么损害。
验证任何ajax调用,注入javascript(可能来自客户端计算机中的病毒或插件),否则可能会发送您自己的页面永远不会发送的命令,并在用户的上下文中发送它们。
寻找有关如何构建安全系统的书籍,这里的帖子不会涵盖所有内容,也不会有任何书籍取代经验和规划。
按规则生活,没有安全系统,只有足够难以破解。
答案 1 :(得分:2)
我认为你误解了术语设计模式。
设计模式通常用于通用或“模板”(注意,这是一个坏词,因为它也用于设计模式名称)代码解决方案,适用于一般问题(对象创建,继承结构,以及对象行为)在面向对象的编程环境中,以语言无关的方式增强可重用性。
没有设计模式来确保系统不会被破解 - 每种语言都有最佳实践,但除了严格的编程之外,还有很多其他方面可以保护系统。就像你可以使用最高级别的编码来实现一切,当你的root密码仍然是默认密码时......
答案 2 :(得分:1)
你的问题很模糊。给我们一份主要组件清单,并要求我们提出“最佳设计”......你能给我们(很多)更多细节吗?
答案 3 :(得分:1)
正如其他人已经提到的:从您的架构开始! 特别是弄清楚,
- 表明您的应用程序可以拥有,如何支持程序员只允许达到允许的状态(状态转换建模)
如何验证传入的请求
如何查找非法访问
如何保护您的应用程序本身(网络服务器,...)
设计模式将在您进行日常工作时帮助您,但无法保护您免受架构中的安全漏洞的影响。 而且,architecure会给你很多提示,这些设计模式是有意义的。
至少我会考虑一件事:Stuts 1.2.9。它不是最新版本(意味着不是savest),而struts本身也存在一些安全性方面的架构问题。 当你使用spring时,为什么不在那里使用其他更现代的组件呢?