移动应用开发要点【进阶】【纯干货】
工程中移动应用开发要点及优势
开发的应用符合等保二级安全要求,根据一般入侵、管理思想,引入国家注册信息安全工程师教材,通篇干活,如有需求,可请私信催更。
基础架构
选用前后端分离架构+Restful接口
前后端分离架构在实战当中有几点优势:
- 开发展示与逻辑完全分离,前后端工程师交流成本变少。
- 系统安全策略中,只需要将后端与数据库之间进行连接,由于前端在用户的终端或者浏览器中运行,所以后端需要与用户建立连接。但是连接数据格式较为纯粹,出现外部攻击较为容易排查。
- 前端安全容易判断。
- 接口接入DMZ区时,后端不用进行接口改造。
- 更好地支持模块化开发、分布式部署、微服务架构。
- 支持数据湖模式及大数据分析。
选用云函数和WebView方式开发
- 云函数开发具有减少安装包体积、复用率高的特点,缺点是运行加载依赖于网速,容易影响到用户体验,一般用于封装复杂算法、固定函数、不常用的函数等,上传策略一般选为允许用户等待的情况,如重要页面加载、需要统计的复合数据计算、前端参与的部分逻辑运算及渲染、
- webview主要用于经常需要替换的内容,如广告、活动页面、非核心功能页面、临时调试功能页面,它不能够与本地核心主程序直接交互,但是能够通过后端、Redis、数据库等进行逻辑交互,能够在微服务架构、分布式部署当中体现优势。在生产环境中具有重要意义。
选用已有的视频播放器及富文本编辑器
- 在移动端也需要视频播放器,uniapp当中,可以自行处理mp4以及webm文件,其中,具有较多功能的播放器推荐ckplayer,具有直播功能的播放器暂时需要再行探索。
- 选用合适的富文本编辑器, 如百度富文本编辑器UEditor,这个编辑器功能能够满足大多数需求,缺点是bug太多,对于需求低的用户刚好够用,对于需求高的用户需要再行探索。
http://fex.baidu.com/ueditor/
不要使用flash相关插件
- 这里主要指的是flash相关的直播、视频流、数据库以及用户访问较多的插件,由于现在用户手机普遍不再支持flash,电脑端也减少了大量flash插件的安装,flash导致的问题远比其能够提供的便利大。
特种插件的选择
- 尽量选择优质高效的、普适性好的插件,如非游戏类3d开发,尽量选择3d.js,而不是选择unity 3d。
- 大型特种插件尽量不要进行安装操作,如证书或者第三方插件,除非在安全性和保密性上有明确需求。如需要lodop的插件,可能造成active X插件安装的插件等,除非在需求上有明确要求或只需要一次性安装。
- 如果选择大型插件,请在生产环境中尽量精简其引用的接口及部分,由于大多数前端开发工具都已具备选择性编译功能,充分利用此功能能够让自己的项目加载速度快10倍以上(如jeecgboot那xx的加载速度……)。
- 在非探索性项目中,尽量少用自己不熟悉的功能。你的精力更应该用在全力的探索中而不是在一个陈旧的项目中试图玩花活,虽然会有更多的成就感,但是并不能为你带来太多的收获。
如果项目当中有和其他项目对接的可能,请选择安全性和性能较高的接口形式而不是框架本身自带的接口形式或者盲目追求最新的接口形式。
前端开发要点
在上传的内容当中,应进行分级判断。
严格判断:数字判断、字母判断、汉字及标点判断、文字长度判断等。
兼容判断:SQL语句、SQL的uriencode判断、“%”判断、以及敏感词(如:国家领导人、党政、军队等敏感词汇)判断。
宽容判断:需要对各类代码、函数名进行转义,建议使用成熟的富文本编辑器完成此操作。
前端要充分利用客户端的性能,在不卡顿的前提下可以进行疯狂的资源占用。
比如vant里面的下拉菜单,做成电话簿,当300人之后开始出现卡顿,也就是说,少于300人就可以使用。
URL传参,参数当中出现SQL内容,应为判断为恶意攻击,对其IP进行判断后选择性屏蔽
前端目录尽量使用平层开发,而不是让用户去一层一层点击深入。
微信在这里做的就很好,小程序最多只有5层。
宁愿在主页当中不起眼的地方放入功能按钮也不要在设置里面隐藏过多的选项。
除非你的功能和淘宝一样复杂多样且模块接入太多,否则,做一个功能搜索(参考华为手机设置里面的搜索)会让用户舒适感加倍。
安全部分:
严格控制密码的复杂度,后台也要控制
应该能够自动识别开发环境和生产环境,生产环境应将console.log重写为空函数。
后端开发要点
逻辑判断类
使用Shiro判断路径,在Shiro当中出现的所有路径外的访问在严格模式下皆可以直接判断为恶意攻击,因为爬虫不会直接访问后端接口以及不存在的数据接口。
要实现以上判断必须让应用通过Monkey测试,否则会出现意外的恶意判断。
后端开发可以判断提出请求的前端所在的IP(客户端IP),如果在非外贸应用当中发现国外访问IP,则应该判断为恶意攻击。
开发要点:
- 密码使用密码盐+用户名或者密码盐+注册时间的方法经过md5加密即可,这个方案是比较安全的方案,在非金融类应用内完全够用。
- 用户名可以使用中文,
- 应用层面过滤国外ip,甚至可以过滤内(外)网ip
- 功能最精化,许可最小化
- 用户权限与前台角色分离
- 用户权限应遵循分离原则和权限最小化原则
- 调试接口在生产环境中记得堵上,
- swagger记得关闭