在编程中,有哪些原则和做法,可以提升程序或构架的安全性
谢邀~Web应用安全:1.整体安全性取决于良好的方案设计、授权与访问控制手段的落地以及运维管理,如采用三层架构、对外暴露的端口仅限Web端口、配置用户上传目录仅限静态解析而不是传递给应用服务器、禁止外网运维、超级帐号的回收、消除弱口令、应用管理/系统管理/数据管理三权分立;2.尽量选用安全的框架(中间件),经过实践考验筛选出来的框架,在安全性上有所考虑(如默认为Form启用CSRF Token、展示用户提交的数据时会进行转义等),相对于自己从头造轮子来说会节省很多时间,当然也有出现0day漏洞的可能性;3.数据库操作尽量使用ORM框架而不是自己写SQL,特别是新手,新手写SQL语句往往不熟悉预编译机制,只是简单模仿教科书里面的拼接写法,从而指令和数据不分,引入非法数据污染了指令;4.不信任原则:所有的接口,都不能信任外部传递过来的任何数据,适当的校验会降低恶意数据侵入的风险,即使该数据是另外一台服务器传递过来的;5.遵守业界最佳实践和约定俗成的规则,如接口清晰明确,模块间低耦合,该用POST的时候绝对不能用GET,读取文件时不要把文件名当作参数传递等等;6.必要的敏感字段加密(在应用层加密后写入);7.作为数据源提供给其它业务时,是否以最小化的视图提供或已经过滤掉无关数据;8.业务安全设计上,交易类是否形成完整的证据链,以及事务完整性校验;9.外部防御措施(硬件防火墙策略、WAF保护纳入等等);...网络应用客户端1.遵守常见的架构原则,不能出现客户端直接访问数据库服务器的场景;2.不信任原则:所有的接口,包含但不限于WebView、自定义函数接口、第三方组件接口等,都不能信任外部传递过来的任何数据,适当的校验会降低恶意数据侵入的风险;3.校验服务器:仅仅把数据发给某个域名,不代表数据真的发送到了正确的地方,要考虑劫持的场景并加上验证服务器的机制;4.避免在客户端明文存储用户的认证凭据;5.客户端自身的完整性校验(是否被替换或篡改);6.避免使用含有漏洞的第三方组件;...谨以个人经验列举,其中有些条目不是开发/编程所涉及到的,但个人感觉比较重要,也放在这里了。个人微信公众号:网络安全生命周期 (Security_SDL),欢迎共同探讨~
■网友
拥有良好的编码习惯(编码可读性高可以提高安全审计工作者的效率,并且良好的习惯包括使用安全的函数,对于参数 字符串的控制等)在可以的情况下开源(这个不由分说,大家一起找安全问题肯定比一个人找快)关注安全咨询信息(能够及时了解自己项目可能出现的0day 及时修补)能做到这些 就已经很不错了:) 其他的想到再补。
■网友
谢邀首先,应该引用安全开发生命周期,微软的SDL不错,文档和工具都可以免费使用,利用得当在架构和代码安全性上回有明显提升。其次,在软件设计时有一些基本的安全原则也是必须要遵守的,特别是在架构设计阶段。1.最小特权,2.权限分离,3.最少共享机制,4.不信任原则,5.默认故障处理保护,6.纵深防御。依照这些原则,在软件设计时可尽量减少安全风险,具体技术科自行搜索。然后,在编码环节一些通用安全编码准则可以借鉴。1.输入验证,2.边界安全,3.异常安全处理,4.最小化反馈,5.临时文件安全,6.组件安全,7.返回值安全,8.数据传递安全。具体技术前人已经写了很多,不再赘述。特别要说的是,web程序中I/O处理是最容易出现问题的地方,缓冲区溢出、跨站脚本、注入基本都在这。还有就是在会话控制和访问控制方面易出现逻辑漏洞,未授权访问、信息泄露基本在这。最后,所有产品完成后都应该进行安全测试,最好渗透测试和源代码审计都做。
■网友
好吧,第一次收到邀请。从我做逆向的角度来说吧。如果要提高安全性,那么可以加壳(VMP类型的),加混淆,加反调试,加反虚拟机。这样都会给逆向带来困难,因此从代码方面找到攻击点就比较困难。从正向角度来看,编码方面要保证安全性,就是通常所说的那些,野指针,边界考虑,字符过滤等一些常见的问题。整体框架的安全性方面,个人了解就是良好的设计,多模块,低耦合,其他暂不了解。
推荐阅读
- 医院|感染艾滋病毒初期有哪些征兆?可以自行检查吗?共用马桶会传染吗
- 玩游戏花钱最多的有哪些游戏,哪些人
- 旅行|需要准备哪些物品?全面冬季出游清单,建议收藏带宝宝出门旅行
- 红米手机通过QQ空间的成功营销,给涉足社会化营销的企业有哪些启示
- 互联网在线音乐行业有哪些可能的盈利模式
- 直播会成为品牌传播的另一个途径么有哪些可行的方法感觉有戏又没头绪好捉急。
- 侧重业务逻辑的产品需求规格说明书,需要有哪些要点
- 大学|上海大学第8,前10名有哪些高校?上海市30所大学排名
- 学图像处理有哪些不错的书推荐
- 新浪微博创新基金投资了哪些团队