命令注入漏洞是指 Web 应用没有对用户可控的参数进行有效过滤,攻击者可以构造恶意参数拼接到命令中,从而执行任意命令。
开发建议:
- 对用户输入的数据(如 ;、|、&等)进行过滤或转义。
命令注入漏洞是指 Web 应用没有对用户可控的参数进行有效过滤,攻击者可以构造恶意参数拼接到命令中,从而执行任意命令。
开发建议:
SQL 注入是指 Web 程序代码中对于用户提交的参数没有进行有效过滤,就直接拼接到 SQL 语句中执行,导致参数中的特殊字符打破了 SQL 语句原有的逻辑,黑客可以利用这个漏洞执行任意的 SQL 语句。
开发建议:
敏感信息是指一旦泄露,可能会给开发者的业务、合作伙伴和用户带来利益损害的数据,包括但不限于账号 Appsecret、特权账号信息、后台加密密钥、登录账户密码、用户身份证号、手机号、银行卡号等。
开发建议:
| 敏感信息类型 | 展示样例 |
|---|---|
| 姓名 |
名字只有两个字,对第一个字打码,如:*三。 多于两个字,只保留第一个和最后一个,其余都打码,如:王*四、欧**五 |
| 身份证 |
只显示第一位和最后一位,如:3*******************1 |
| 手机号 |
除去手机国际码后,手机号位数不少于10位时,只显示前三位和最后两位,如:156******77。手机号位数少于10位时,只显示前两位和后两位,如:12*****89。国家码可以完全显示。 |
| 银行卡 |
只显示最后4位,如:************1234 |
点击查看消息推送服务器配置
<xml>
<ToUserName><![CDATA[gh_870882ca4b1]]></ToUserName>
<FromUserName><![CDATA[owAqB1v0ahK_Xlc7GshIDdf2yf7E]]></FromUserName>
<CreateTime>1626857200</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[user_authorization_revoke]]></Event>
<OpenID><![CDATA[owAqB1nqaOYYWl0Ng484G2z5NIwU]]></OpenID>
<AppID><![CDATA[wx13974bf780d3dc89]]></AppID>
<RevokeInfo><![CDATA[1]]></RevokeInfo>
<PluginID><![CDATA[wx13974bf780d3dc89]]></PluginID>
< OpenPID><![CDATA[G7esq5NVzP76HIHoB95t4CVBP6to]]></OpenPID>
</xml>
{
"ToUserName": "gh_870882ca4b1",
"FromUserName": "oaKk346BaWE-eIn4oSRWbaM9vR7s",
"CreateTime": 1627359464,
"MsgType": "event",
"Event": "user_authorization_revoke",
"OpenID": "oaKk343WOktAaT2ygsX138BGblrg",
"AppID": "wx13974bf780d3dc89",
"RevokeInfo": "1",
"PluginID": "wx13974bf780d3dc89",
"OpenPID": " G7esq5NVzP76HIHoB95t4CVBP6to"
}
| 属性 | 类型 | 说明 |
|---|---|---|
| ToUserName | string | 微信小程序的UserName |
| FromUserName | string | 平台推送服务UserName |
| MsgType | string | 默认为:Event |
| Event | string | user_info_modified:用户资料变更,user_authorization_revoke:用户撤回,user_authorization_cancellation:用户完成注销; |
| CreateTime | number | 发送时间 |
| OpenID | string | 授权用户OpenID |
| UnionID | string | 授权用户UnionID |
| AppID | string | 微信小程序的AppID |
| RevokeInfo | string | 用户撤回的授权信息,1:车牌号,2:地址,3:发票信息,4:蓝牙,5:麦克风,6:昵称和头像,7:摄像头,8:手机号,12:微信运动步数,13:位置信息,14:选中的图片或视频,15:选中的文件,16:邮箱地址,18:选择的位置信息,19:昵称输入键盘中选择的微信昵称,20:获取用户头像组件中选择的微信头像 |
| PluginID | string | 插件场景用户撤回,插件的AppID |
| OpenPID | string | 插件场景用户撤回,撤回用户的OpenPID |
当微信小程序存在违规行为时,平台会通过消息推送服务器通知给微信小程序开发者,建议微信小程序开发者注意及时接收相关通知进行排查整改,此通知不影响已有的站内信等通知方式。 点击查看消息推送服务器配置
| 属性 | 类型 | 说明 |
|---|---|---|
| Event | string | 事件名称:wxa_punish_event,即微信小程序违规处罚信息 |
| event_type | number | 事件类型。1:警告;2:功能封禁;3:下架;4:账号封禁;10:页面封禁。 |
| punish_id | string | 违规处罚ID,用于唯一标识每次违规 |
| appid | string | 被处罚微信小程序的AppID |
| punish_time | number | 违规时间(UNIX时间戳) |
| illegal_reason | string | 违规原因 |
| illegal_content | string | 违规内容 |
| rule_name | string | 违反规则名称 |
| rule_url | string | 违反规则链接 |
| adjust_guide_url | string | 违规申诉及整改指引链接 |
| detail | string | 违规处罚详情,字段内容为JSON字符串,JSON具体结构取决于event_type,请参照下方说明对该字段中包含的JSON字符串进行正确的解析 |
| 属性 | 类型 | 说明 |
|---|---|---|
| warned_type | number | 警告类型。1:警告账号封禁;2:警告功能封禁;3:警告下架。 |
| rectify_deadline | number | 警告的截止时间(UNIX时间戳) |
| warned_function_names | array | 警告要封禁的功能项列表,如需获取列表中每个功能项的封禁时长,可直接在warned_ban_days的对应索引处获得,warned_function_names和warned_ban_days总是一一对应。(该字段仅当warned_type=2时生效) |
| warned_ban_days | array | 警告封禁的天数列表。当warned_type=1时则该列表仅有一项,代表警告要封禁微信小程序账号的天数。当warned_type=2时列表中的每一项分别代表warned_function_names中对应索引处的功能项被警告要封禁的天数。当warned_type=3时则该列表仅有一项,代表警告要下架微信小程序的天数。注:0代表永久封禁 |
| 属性 | 类型 | 说明 |
|---|---|---|
| banned_days | array | 功能项被封禁的天数列表,列表中的每一项分别代表banned_function_names中对应索引处的功能项被封禁的天数。注:0代表永久封禁 |
| banned_function_names | array | 被封禁的功能项列表,如需获取列表中每个功能项的封禁时长,可直接在banned_days的对应索引处获得,banned_days和banned_function_names总是一一对应。 |
| 属性 | 类型 | 说明 |
|---|---|---|
| suspended_days | number | 下架天数。注:0代表永久下架 |
| 属性 | 类型 | 说明 |
|---|---|---|
| path | string | 微信小程序中被封禁的页面路径 |
{
"ToUserName": "gh_1d6c1222test",
"FromUserName": "oyeHc4i5LqBbWLVTfnhf-3TZ4BNk",
"CreateTime": 1699803867,
"MsgType": "event",
"Event": "wxa_punish_event",
"punish_id": "649557",
"appid": "wx54a8eaa26606test",
"punish_time": 1699803865,
"illegal_reason": "存在诱导分享行为",
"illegal_content": [
"违规内容测试"
],
"detail": "{\"warned_type\":1,\"rectify_deadline\":1699796571,\"warned_function_names\":[],\"warned_ban_days\":[3]}",
"rule_url": "/miniprogram/product/index.html#_5-1-滥用分享行为",
"rule_name": "《微信小程序平台运营规范》5.行为规范-5.1滥用分享行为",
"adjust_guide_url": "https://mp.weixin.qq.com/s/73rLZmwPeQ87Q89DYQcfkw",
"event_type": 1
}
{
"ToUserName": "gh_1d6c1222test",
"FromUserName": "oyeHc4pIdqHZwh80SufyUuIzSenw",
"CreateTime": 1699795665,
"MsgType": "event",
"Event": "wxa_punish_event",
"punish_id": "649551",
"appid": "wx54a8eaa26606test",
"punish_time": 1699795663,
"illegal_reason": "存在诱导分享行为",
"illegal_content": [
"违规内容测试"
],
"detail": "{\"warned_type\":2,\"rectify_deadline\":1699796571,\"warned_function_names\":[\"分享朋友圈\",\"客服消息接口\"],\"warned_ban_days\":[1,1]}",
"rule_url": "/miniprogram/product/index.html#_5-1-滥用分享行为",
"rule_name": "《微信小程序平台运营规范》5.行为规范-5.1滥用分享行为",
"adjust_guide_url": "https://mp.weixin.qq.com/s/73rLZmwPeQ87Q89DYQcfkw",
"event_type": 1
}
{
"ToUserName": "gh_1d6c1222test",
"FromUserName": "oyeHc4tGxCvPcXlKeFI5tU0jV_yw",
"CreateTime": 1699795665,
"MsgType": "event",
"Event": "wxa_punish_event",
"punish_id": "649551",
"appid": "wx54a8eaa26606test",
"punish_time": 1699795663,
"illegal_reason": "存在诱导分享行为",
"illegal_content": [
"违规内容测试"
],
"detail": "{\"warned_type\":3,\"rectify_deadline\":1699796571,\"warned_function_names\":[],\"warned_ban_days\":[1]}",
"rule_url": "/miniprogram/product/index.html#_5-1-滥用分享行为",
"rule_name": "《微信小程序平台运营规范》5.行为规范-5.1滥用分享行为",
"adjust_guide_url": "https://mp.weixin.qq.com/s/73rLZmwPeQ87Q89DYQcfkw",
"event_type": 1
}
{
"ToUserName": "gh_1d6c1222test",
"FromUserName": "oyeHc4gSrT2S8jG2Ll1ZS16rwqQk",
"CreateTime": 1699791600,
"MsgType": "event",
"Event": "wxa_punish_event",
"punish_id": "13577492",
"appid": "wx54a8eaa26606test",
"punish_time": 1699791599,
"illegal_reason": "存在诱导分享行为",
"illegal_content": [
"违规内容测试"
],
"detail": "{\"banned_days\":[1,1],\"banned_function_names\":[\"分享朋友圈\",\"客服消息接口\"]}",
"rule_url": "/miniprogram/product/index.html#_5-1-滥用分享行为",
"rule_name": "《微信小程序平台运营规范》5.行为规范-5.1滥用分享行为",
"adjust_guide_url": "https://mp.weixin.qq.com/s/73rLZmwPeQ87Q89DYQcfkw",
"event_type": 2
}
{
"ToUserName": "gh_1d6c1222test",
"FromUserName": "oyeHc4qHkaYV-0NYupPZBTBrBNuw",
"CreateTime": 1699801563,
"MsgType": "event",
"Event": "wxa_punish_event",
"punish_id": "13577869",
"appid": "wx54a8eaa26606test",
"punish_time": 1699801560,
"illegal_reason": "存在诱导分享行为",
"illegal_content": [
"违规内容测试"
],
"detail": "{\"suspended_days\":1}",
"rule_url": "/miniprogram/product/index.html#_5-1-滥用分享行为",
"rule_name": "《微信小程序平台运营规范》5.行为规范-5.1滥用分享行为",
"adjust_guide_url": "https://mp.weixin.qq.com/s/73rLZmwPeQ87Q89DYQcfkw",
"event_type": 3
}
{
"ToUserName": "gh_1d6c1222test",
"FromUserName": "oyeHc4jjAdCWq1klrk-puPMe0FC4",
"CreateTime": 1699784111,
"MsgType": "event",
"Event": "wxa_punish_event",
"punish_id": "9328325",
"appid": "wx54a8eaa26606test",
"punish_time": 1699784109,
"illegal_reason": "存在诱导分享行为",
"illegal_content": [
"测试违规内容/证据"
],
"detail": "{\"banned_days\":3}",
"rule_url": "/miniprogram/product/index.html#_5-1-滥用分享行为",
"rule_name": "《微信小程序平台运营规范》5.行为规范-5.1滥用分享行为",
"adjust_guide_url": "https://mp.weixin.qq.com/s/73rLZmwPeQ87Q89DYQcfkw",
"event_type": 4
}
{
"ToUserName": "gh_1d6c1222test",
"FromUserName": "oyeHc4n0I6U3A4Fq7tfOAqmAJy8E",
"CreateTime": 1699802583,
"MsgType": "event",
"Event": "wxa_punish_event",
"punish_id": "94185814",
"appid": "wx54a8eaa266009d6a",
"punish_time": 1699802425,
"illegal_reason": "发布低俗、性暗示或色情信息",
"illegal_content": [
"测试证据"
],
"detail": "{\"path\":\"pages/fengjin/fengjin\"}",
"rule_url": "/miniprogram/product/index.html#_6-2-色情低俗内容",
"rule_name": "《微信小程序平台运营规范》6.信息内容规范-6.2色情低俗内容",
"adjust_guide_url": "https://mp.weixin.qq.com/s/73rLZmwPeQ87Q89DYQcfkw",
"event_type": 10
}
条件竞争比较常见的例子是攻击者通过并发 https 请求而达到多次获奖、多次收获、多次获赠等非正常逻辑所能触发的效果。
漏洞代码示例
// 从DB里查询该用户剩余获奖次数,初始值为1
int remain_times = SelectRemainTimes();
if(remain_times > 0){
EarnRewards(); // 用户获得奖励
ClearRemainTimes(); // 在DB里把该用户的剩余获奖次数清零
}
开发者的设计本意是只允许用户获得一次奖励,但当出现并发请求时,有可能出现请求 A 和请求 B 都刚好执行完第2行代码的情况,此时两个请求的 remain_times 都为1,也就是可以通过第4行代码的判断,获得两次奖励。
开发建议:
目录遍历是指由于后台服务对用户输入验证不足或配置不严谨,导致服务器目录内容泄漏。外部攻击者可能通过目录遍历获取系统文件、后台代码等敏感文件。
开发建议:
web 服务配置
web 应用代码
文件下载漏洞是指 Web 应用允许用户通过指定路径和文件名的方式来下载对应的文件,但未正确限制可下载文件所在的目录范围,导致预期范围外的文件被下载泄露。
开发建议:
文件上传漏洞是指 Web 应用允许用户上传指定文件,但未对文件类型、格式等做合法性校验,导致可以上传非预期格式的文件。
开发建议:
弱口令指的是管理后台的用户名和密码设置得过于简单,或者直接使用了默认账号。攻击者可能通过登录这些账号来修改后台数据,或者进行下一步的入侵操作。
开发建议:
注入漏洞(SQL、命令等)通常指用户绕过后台代码限制,直接在数据库、shell 内执行自定义代码。
常见的注入漏洞有:
SQL 注入是指 Web 程序代码中对于用户提交的参数未做有效过滤就直接拼接到 SQL 语句中执行,导致参数中的特殊字符打破了 SQL 语句原有逻辑,黑客可以利用该漏洞执行任意 SQL 语句。
开发建议:
命令注入漏洞是指 Web 应用未对用户可控参数进行有效过滤,攻击者可以构造恶意参数拼接到命令上来执行任意命令。
开发建议:
注入漏洞(SQL、命令等)通常指用户绕过后台代码限制,直接在数据库、shell 内执行自定义代码。
常见的注入漏洞有:
SQL 注入是指 Web 程序代码中对于用户提交的参数未做有效过滤就直接拼接到 SQL 语句中执行,导致参数中的特殊字符打破了 SQL 语句原有逻辑,黑客可以利用该漏洞执行任意 SQL 语句。
开发建议:
命令注入漏洞是指 Web 应用未对用户可控参数进行有效过滤,攻击者可以构造恶意参数拼接到命令上来执行任意命令。
开发建议:
弱口令指管理后台的用户名密码设置得较为简单或者使用默认账号。攻击者可以通过登录这些账号修改后台数据或进行下一步的入侵操作。
开发建议:
文件上传漏洞是指 Web 应用允许用户上传指定文件,但未对文件类型、格式等做合法性校验,导致可以上传非预期格式的文件。
开发建议:
文件下载漏洞是指 Web 应用允许用户通过指定路径和文件名的方式来下载对应的文件,但未正确限制可下载文件所在的目录范围,导致预期范围外的文件被下载泄露。
开发建议:
目录遍历是指由后台服务对用户输入验证不足或配置不严谨导致的服务器目录内容泄漏。外部可能通过目录遍历获取系统文件、后台代码等敏感文件。
开发建议:
web 服务配置
web 应用代码
条件竞争比较常见的例子是攻击者通过并发 https 请求而达到多次获奖、多次收获、多次获赠等非正常逻辑所能触发的效果。
漏洞代码示例
// 从DB里查询该用户剩余获奖次数,初始值为1
int remain_times = SelectRemainTimes();
if(remain_times > 0){
EarnRewards(); // 用户获得奖励
ClearRemainTimes(); // 在DB里把该用户的剩余获奖次数清零
}
开发者的设计本意是只允许用户获得一次奖励,但当出现并发请求时,有可能出现请求 A 和请求 B 都刚好执行完第2行代码的情况,此时两个请求的 remain_times 都为1,也就是可以通过第4行代码的判断,获得两次奖励。
开发建议: