《安全指引开发原则与注意事项》连载系列2:
发表时间:2023-09-22 14:25:59
文章来源:炫佑科技
浏览次数:210
菏泽炫佑科技 菏泽炫佑小程序开发 菏泽炫佑app制作 炫佑科技
《安全指引开发原则与注意事项》连载系列2:
安全指南开发原则及注意事项
本文档整理了小程序开发中常见的一些安全风险和漏洞,帮助开发在开发过程中发现并修复相关漏洞,避免上线后给业务和数据造成损失。 开发在开发过程中必须遵循以下原则:
基于互不信任的原则,不信任用户提交的数据,包括第三方系统提供的数据。 必要的数据验证必须在后台进行。 *小权限原则是指代码、模块等只具有能够完成任务的*小权限,不给予不必要的权限。 禁止以明文形式存储敏感的用户数据。 小程序代码(不包括云函数代码)与传统Web应用的前端代码类似,可以从外部获取并反混淆。 重要的业务逻辑应该放在后端代码或云函数中。 后端接口调用和云函数调用必须经过有效的身份认证。常用接口认证
接口认证是指在调用后端接口(包括自建后端接口和云函数)时,需要验证该接口调用的权限,否则很容易出现未授权的行为。 例如,在产品删除接口中,后端在收到请求时应验证调用者的身份信息(例如IP地址、开发定义的登录状态信息等)。 只有指定用户才能通过验证删除。
越权通常分为平行越权和垂直越权:
开发建议:
敏感数据和能力相关接口需要在后台进行认证。 通常可以验证验证、IP地址、自定义登录状态等信息。
认证逻辑应该放在后台,不应该用小程序前端的隐藏页面、隐藏按钮等来代替。 参见原则4。
验证码示例(仅供参考)
代码管理和泄漏
使用git、svn等版本管理工具时,会生成.git等目录。 有些编辑器或软件在运行过程中也会生成临时文件。 如果将这些目录或文件带到生产环境,可能会发生源代码泄漏。
使用小程序代码管理平台或其他第三方平台时,需要注意项目权限,不要泄露敏感或内部项目。
开发建议:
不要将备份文件和版本管理工具生成的文件同步到Web目录。 禁止对目录和文件(例如 .git)进行外部访问。 在小程序代码管理平台等管理平台中配置适当的访问权限。 小程序信息泄露
敏感信息是指一旦泄露可能对开发业务、合作伙伴和用户造成损害的数据微信小程序开发工具哪个好用,包括但不限于账号、特权账户信息、后台加密密钥、登录账户密码、用户ID号、手机号码、银行卡号等
开发建议:
敏感信息不应以纯文本、注释、可逆编码方式(如 )、不安全哈希函数(如 MD5、SHA1)等形式出现在小程序文件中。
一些需要显示的敏感信息如用户的银行卡号、手机号码等需要进行脱敏处理。 常用的脱敏规格如下:
敏感信息类型显示示例
姓名
姓名只有两个字符,编码**个字符,如:*三。如果超过两个字符,只保留**个和*后一个字符,其余编码,如:王*四、欧**五
身份证
仅显示**位和*后一位数字,如:3********************1
电话号码
排除手机国际区号后,当手机号码不少于10位时,只显示前三位和后两位,如:156******77。 当手机号码小于10位时,仅显示前两位和后两位,如:12****89。 国家代码可以完整显示。
银行卡
仅显示*后4位数字,如:************1234
如果小程序存在敏感信息泄露问题,微信开放平台可以下架该小程序并暂停该小程序的相关服务。
授权用户信息变更
1、授权用户信息变更:当部分用户信息存在风险时,平台会对用户信息进行清理,并通过消息推送服务器通知近30天内获得授权的小程序开发。 建议开发关注并响应此事件。 主动及时更新或清理用户的头像、昵称,降低风险。
2、撤回授权用户信息:当用户撤回授权信息时,平台将通过推送消息服务器通知小程序开发,要求开发及时删除用户信息。
3、授权用户完成注销:当授权用户完成注销后,平台将通过消息推送服务器通知小程序开发。 请您及时按照法律法规规定履行相应的个人信息保护义务,保护用户权益。
点击查看消息推送服务器配置
事件推送示例:XML
1626857200
< OpenPID>
JSON
{
"ToUserName": "gh_870882ca4b1",
"FromUserName": "oaKk346BaWE-eIn4oSRWbaM9vR7s",
"CreateTime": 1627359464,
"MsgType": "event",
"Event": "user_authorization_revoke",
"OpenID": "oaKk343WOktAaT2ygsX138BGblrg",
"AppID": "wx13974bf780d3dc89",
"RevokeInfo": "1",
"PluginID": "wx13974bf780d3dc89",
"OpenPID": " G7esq5NVzP76HIHoB95t4CVBP6to"
}
事件字段定义
物业类型说明
小程序
平台推送服务
默认:事件
事件
:用户资料变更,引发:用户退出《安全指引开发原则与注意事项》连载系列2:, :用户完成注销;
发送时间
授权用户
应用程序ID
小程序AppID
用户撤回的授权信息,1:车牌号,2:地址,3:发票信息,4:蓝牙,5:麦克风,6:昵称和头像,7:摄像头,8:手机号码,12:微信锻炼步骤,13:位置信息,14:所选图片或视频,15:所选文件,16:电子邮件地址,18:所选位置信息
插件场景用户提现、插件AppID
插件场景用户撤回,撤回用户的
后端(包括云函数和自建后端)注入漏洞
注入漏洞(SQL、命令等)通常是指用户绕过后台代码限制,直接在数据库或shell中执行自定义代码。
常见的注入漏洞包括:
SQL注入
SQL注入是指Web程序代码中用户提交的参数未经有效过滤,直接拼接成SQL语句执行。 结果,参数中的特殊字符破坏了SQL语句的原始逻辑。 黑客可以利用该漏洞执行任意SQL语句。
开发建议:
使用数据库提供的参数化查询来执行数据库操作。 不允许通过拼接字符串直接合成SQL语句。 如果存在一些需要通过拼接来合成SQL的情况,必须对拼接后的变量进行处理:以防止Web应用程序显示SQL错误消息。 确保Web应用程序中每个数据层的统一编码。命令注入
命令注入漏洞是指Web应用程序无法有效过滤用户可控参数,攻击者可以构造恶意参数并将其拼接成命令来执行任意命令。
开发建议:
密码强度低
弱密码是指管理后台的用户名和密码设置比较简单或者使用默认帐户。 攻击者可以登录这些账户修改后台数据或进行进一步的入侵操作。
开发建议:
后台服务禁用默认账户并更改后台弱密码。 敏感服务添加二次验证机制,如短信验证码、邮件验证码等文件上传漏洞
文件上传漏洞是指Web应用允许用户上传指定文件,但没有对文件类型、格式等进行合法性验证,导致非预期格式的文件被上传。
开发建议:
下载文件
文件下载漏洞是指Web应用程序允许用户通过指定路径和文件名来下载相应的文件,但没有正确限制可下载文件所在的目录范围,导致预期范围之外的文件被下载并泄露。
开发建议:
正确限制可下载文件所在的目录范围。 通过指定文件ID找到对应的文件进行下载。 目录遍历
目录遍历是指由于后台服务对用户输入验证不充分或配置松散导致服务器目录内容泄露。 外部人员可能通过目录遍历获取系统文件、后台代码等敏感文件。
开发建议:
网络服务配置
网络应用程序代码
有条件竞争
条件竞争的一个常见例子是,攻击者利用并发的https请求来达到多次奖励、多次收获、多次礼物等异常逻辑可能触发的效果。
开发建议: