事故记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私

Posted JavaDog程序狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事故记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私相关的知识,希望对你有一定的参考价值。

前言

🍊缘由

在一个月黑风高的夜晚,正准备休息的我突然接到之前外包老总的亲切问候。一顿输出才知道三年前为了搭建流程化部署,将公司的测试代码放到github上后忘记删除。现在被甲方的代码扫描机制扫到,并且检查到代码已经被其他用户fork,虽没有造成损失,但要求清除github所有数据及被fork的代码。以此为戒,特来跟大家分享一下处理流程,重点是GitHub的DMCA 下架通知提交指南


⏲️本文阅读时长

约10分钟


🎯主要目标

  1. 熟悉GitHub的DMCA 下架通知提交指南
  2. 代码涉密别人fork如何在GitHub安全下架
  3. 掌握申诉流程申诉时间点把控

正文

🍋1.判断政策分类

DMCA 下架政策包含如下两种,根据自己情况如是选择。

1.GitHub 私人信息删除政策

“私人信息”是指符合以下条件的内容:应该保密,并且一旦公开,会对您或您的组织造成特定安全风险。

白话:通俗来讲就是没有版权,涉及到个人私密的文件。如果想删除库中单个文件审核比较轻松,若是想删除整个库可能难度较大。所需材料如下:

  1. 可访问您组织的服务器、网络或域的访问凭据,例如用户名与密码组合、访问令牌或其他敏感密钥
  2. 可代表您访问第三方的 AWS 令牌和其他类似访问凭据。 您必须能够证明该令牌确实属于您。
  3. 对组织构成特定安全风险的文档(例如网络图或架构)。
  4. 与您个人相关并对您构成安全风险的信息(如社会保障号码或其他政府身份号码)。

2.GitHub 商标政策

在使用公司或企业名称、徽标或其他受商标保护的材料时,如果使用方式可能使他人对品牌或业务从属关系产生误解或感到困惑,则此类使用可能被视为违反商标政策。

白话:通俗来讲就是侵犯到版权,被人举报侵权等,此审核所需材料较多,如下:

  1. 被举报帐户的用户名
  2. 贵公司名称
  3. 您的公司 GitHub 帐户(如果有)
  4. 公司网站
  5. 您商标中使用的词语、符号等。
  6. 商标注册号
  7. …等等

🍏2.处理步骤

GitHub 私人信息删除政策

1.访问GitHub 私人信息删除政策申请地址

https://support.github.com/contact/private-information

2.解析每条问题如何选择及回复
  1. Company GitHub account (if applicable)
    🏳️‍🌈翻译:公司 GitHub 帐户(如果适用)

此处选择【Not Applicable/Other】(不适用/其他)

  1. Is the content you’re reporting copyrighted work that you own?
    🏳️‍🌈翻译:您报告的内容是您拥有的受版权保护的作品吗?

此处选择【No】(不是)。此处也可选择YES,如果有版权保护可以直接通过【GitHub 商标政策】申请即可

  1. Is your request related to a full repository or a specific file(s)?
    🏳️‍🌈翻译:您的请求与完整存储库或特定文件相关吗?

此处根据个人情况选择,若要删除整个库可能审核费劲,若选择删除单独文件则比较好通过。

  1. Please identify the content you are reporting. Select all that apply.
    🏳️‍🌈翻译:请指明您举报的内容。 选择所有符合条件的。

此处根据个人情况选择,其中包含如下5种选项,切记如果勾选,请把项目中涉及的敏感内容具体分布及多少行写清楚,有助于审核通过

  • Access Credentials.【访问凭证】
  • AWS tokens and other similar access credentials.【AWS 令牌和其他类似的访问凭证】
  • Documentation (such as network diagrams or architecture) that poses a specific security risk for an organization. 【对组织构成特定安全风险的文档】
  • Information related to, and posing a security risk to, you as an individual (such as social security numbers or other government identification numbers).【与您个人相关并构成安全风险的信息(例如社会安全号码或其他政府身份证号码)】

🌰 举个本狗申请例子,本人勾选了Access Credentials,然后填写了具体内容

It contains a lot of private information. 
For example, the application-prod.yml configuration file under the path /src/main/resources/contains personal private database configuration information (address, account, password). For example, the sixth line of the application-prod.yml file contains the url of the database, and the seventh and eighth lines contain the database account password username: hrgc, password: xxx xxx. For another example, line 70 contains the key information of my bug component apikey: xxx.Also, in/src/main/java/com/xxx/user/api/XXXApi.java, line 12 and 13 contain the KEY and SECRET required by the user center, completely exposing private information. Others can break my server and database information through the information in the application-prod.yml file, which involves personal privacy and constitutes a security risk.

All contents of the following repository have been deleted.
https://github.com/xxxx/xxxx

However, the content can still be found in the link below. If personal information is involved, please delete it.
https://github.com/xxx/xxxxx-trunk
https://github.com/xxx/xxxxx-trunk

翻译如下

它包含很多私人信息。
例如/src/main/resources/路径下的application-prod.yml配置文件包含个人私有数据库配置信息(地址、账号、密码)。 例如application-prod.yml文件第六行包含数据库的url,第七行和第八行包含数据库账号密码username:hrgc,password:xxx xxx。 再比如,第70行包含了我的bug组件apikey的关键信息:xxx.另外,在/src/main/java/com/xxx/user/api/XXXApi.java中,第12行和13行包含了需要的KEY和SECRET 通过用户中心,彻底暴露隐私信息。 其他人可以通过application-prod.yml文件中的信息破解我的服务器和数据库信息,涉及个人隐私,存在安全隐患。

以下存储库的所有内容已被删除。
https://github.com/xxxx/xxxx

但是,仍然可以在下面的链接中找到内容。 如涉及个人信息,请删除。
https://github.com/xxx/xxxxx-trunk
https://github.com/xxx/xxxxx-trunk
  1. Have you attempted to contact the GitHub user(s) who uploaded the sensitive data?
    🏳️‍🌈翻译:您是否尝试联系上传敏感数据的 GitHub 用户?

此处根据个人情况选择,询问是否自己尝试联系过fork自己代码的GitHub用户,无关紧要,本狗选择【No】

  1. Is the request particularly time-sensitive?
    🏳️‍🌈翻译:该请求是否对时间特别敏感?

询问是否着急,对时间要求紧。本狗选择【No】如果写Yes还需要描述:报告的数据暴露了多长时间? 您是否可以分享任何您认为会使此请求特别紧迫的信息?

  1. Are you a third party acting as an agent for an organization facing a security risk?
    🏳️‍🌈翻译:您是作为面临安全风险的组织的代理的第三方吗?

本狗选择【No】如果写Yes还需要描述:请附上一份声明,说明您有合法权利代表该组织行事。

  1. How long has the reported content been publicly available?
    🏳️‍🌈翻译:举报的内容公开多久了?

本狗选择【24+ months】因为是三年前项目了,公开了3年之久了。此处可根据自己实际情况选择即可。

  1. I confirm that I have read the GitHub Private Information Removal Policy
    🏳️‍🌈翻译:我确认我已阅读 GitHub 私人信息删除政策

此处勾选同意即可

3.申请总览图


4.点击【发送请求】

如果成功GitHub会回执一分邮件,告知你已经接受到


GitHub 商标政策

1.访问GitHub 商标政策申请地址

https://support.github.com/contact/dmca-takedown

2.解析每条问题如何选择及回复
  1. Are you the copyright holder or authorized to act on the copyright owner’s behalf?
    🏳️‍🌈翻译:您是版权所有者或授权代表版权所有者行事吗?

此处选择【Yes, I am the copyright holder.】是的,我是版权所有者。

  1. Are you submitting a revised DMCA notice after GitHub Trust & Safety requested you make changes to your original notice?
    🏳️‍🌈翻译:在 GitHub Trust & Safety 要求您更改原始通知后,您是否提交了修订后的 DMCA 通知?

此处选择【No】

  1. Does your claim involve content on GitHub or npm.js?
    🏳️‍🌈翻译:您的声明是否涉及 GitHub 或 npm.js 上的内容?

此处选择【GitHub】,如果有其他情况可根据实际情况选择

  1. Please describe the nature of your copyright ownership or authorization to act on the owner’s behalf.
    🏳️‍🌈翻译:请描述您的版权所有权或授权代表所有者行事的性质。

此处进行填入自己版权所属权的相关信息,如下包含示例及翻译

We have software(https://github.com/xxxx/xxxx) that was developed in-house and one of our developers uploaded it to GitHub and made it public. We notified this former employee who promptly deleted the content, but anothers has a copy. We made contact for deletion, but he did not respond to our messages.It contains a lot of private information. For example, the application-prod.yml configuration file under the path/src/main/resources/contains personal private database configuration information (address, account, password). For example, the sixth line of the application-prod.yml file contains the url of the database, and the seventh and eighth lines contain the database account password username: hrgc, password: xxx 123. For another example, line 70 contains the key information of my bug component apikey: xxxx.Also, in/src/main/java/com/xxxx/user/api/ProductsApi.java, line 12 and 13 contain the KEY and SECRET required by the user center, completely exposing private information. Others can break my server and database information through the information in the application-prod.yml file, which involves company privacy and constitutes a security risk.

我们有内部开发的软件(https://github.com/xxxx/xxxx),我们的一位开发人员将其上传到 GitHub 并公开。 我们通知了这位前雇员,他立即删除了内容,但其他人有一份副本。 我们联系删除,他没有回复我们的消息,里面有很多隐私信息。 比如路径/src/main/resources/下的application-prod.yml配置文件包含个人私有数据库配置信息(地址、账号、密码)。 例如application-prod.yml文件第六行包含数据库的url,第七行和第八行包含数据库账号密码用户名:hrgc,密码:xxx 123。再比如第70行包含key 我的bug组件apikey的信息:xxxx.另外,在/src/main/java/com/xxxx/user/api/ProductsApi.java中,第12行和第13行包含了用户中心需要的KEY和SECRET,完全暴露了隐私信息 . 其他人可以通过application-prod.yml文件中的信息破解我的服务器和数据库信息,涉及公司隐私,存在安全隐患。

  1. Please provide a detailed description of the original copyrighted work that has allegedly been infringed. If possible, include a URL to where it is posted online.
    🏳️‍🌈翻译:请提供涉嫌侵权的原始版权作品的详细描述。 如果可能,包括在线发布的 URL。

此处进行填入自己代码仓库地址及别人fork之后的地址清单,如下包含示例及翻译

All contents of the following repository have been deleted.
https://github.com/xxxx/xxxx-trunk
However, the content can still be found in the link below. If personal information is involved, please delete it.
https://github.com/xxxx/xxxx-trunk
https://github.com/xxxx/xxxx-trunk

下列储存库的所有内容已被删除。
https://github.com/xxxx/xxxx
不过,内容还是可以在下面的链接中找到。如涉及个人信息,请及时删除。
https://github.com/xxxx/xxxx
https://github.com/xxxx/xxxx

  1. What files should be taken down? Please provide URLs for each file, or if the entire repository, the repository’s URL.
    🏳️‍🌈翻译:应该删除哪些文件? 请提供每个文件的 URL,或者如果是整个存储库,请提供存储库的 URL。

此处填入想要删除的分支或者被fork的仓库的路径,若想删除单独文件,可提供单独文件的URL

All repository content.
https://github.com/xxxx/xxxx
https://github.com/xxxx/xxxx

所有存储库内容。
https://github.com/xxxx/xxxx
https://github.com/xxxx/xxxx

  1. Do you claim to have any technological measures in place to control access to your copyrighted content? Please see our Complaints about Anti-Circumvention Technology if you are unsure.
    🏳️‍🌈翻译:您是否声称已采取任何技术措施来控制对您受版权保护的内容的访问? 如果您不确定,请参阅我们关于反规避技术的投诉。

此处填入【No】

  1. Have you searched for any forks of the allegedly infringing files or repositories? Each fork is a distinct repository and must be identified separately if you believe it is infringing and wish to have it taken down.
    🏳️‍🌈翻译:您是否搜索过涉嫌侵权的文件或存储库的任何分支? 每个分支都是一个不同的存储库,如果您认为它侵权并希望将其删除,则必须单独标识。

此处填入你搜索过想要删除的其他分支及fork侵权的仓库地址

No forks have been identified other than the one below.
https://github.com/xxxx/xxxx-trunk
https://github.com/xxxx/xxxx-trunk

除下面的fork外,没有发现其他fork。
https://github.com/xxxx/xxxx
https://github.com/xxxx/xxxxx

  1. Is the work licensed under an open source license?
    🏳️‍🌈翻译:该作品是否在开源许可下获得许可?

此处填入【No】

  1. What would be the best solution for the alleged infringement?
    🏳️‍🌈翻译:对于涉嫌侵权的最佳解决方案是什么?

此处选择【Reported content must be removed】必须删除举报的内容

  1. Do you have the alleged infringer’s contact information? If so, please provide it.
    🏳️‍🌈翻译:您有涉嫌侵权人的联系方式吗? 如果有,请提供。

此处填入【No】

  1. 勾选确认如下4条信息

我真诚地相信,在侵权网页上使用上述受版权保护的材料未经版权所有者或其代理人或法律授权。
我发誓,根据伪证处罚,本通知中的信息准确无误,并且我是涉嫌侵权的专有权的版权所有者,或被授权代表所有者行事。
我已经考虑了合理使用。
我已阅读并理解 GitHub 的提交 DMCA 删除通知指南。

  1. So that we can get back to you, please provide either your telephone number or physical address.
    🏳️‍🌈翻译:为了便于我们回复您,请提供您的电话号码或实际地址。

此处填入自己的邮箱或者电话号码

  1. Please type your full legal name below to sign this request.
    🏳️‍🌈翻译:请在下方输入您的法定全名以签署此请求。

此处填入自己的真实名字

3.申请总览图


4.点击【发送请求】

如果成功GitHub会回执一分邮件,告知你已经接受到


🍉3.发送时间

因GitHub是漂亮国所属,人工审核按照他们上班时间处理,与咱们时间相差十个小时左右,所以建议晚上八点后发送,如运气好则会24点前收到回复,再根据回复内容修改不符合要求内容。若不想熬夜则第二天再次查看即可,切勿着急!!!着急也没用,运气好一般审核的时间差在4个小时左右。

😊总结

程序员删库跑路单干,结局大概是要吃牢饭!

通过此次的意外事故,学习到项目隐私及版权相关知识,并熟悉了DMCA下架政策保障隐私。希望大家以此为戒,永远都用不到这些。

JavaDog狗屋地址
个人博客https://blog.javadog.net
公众号https://mp.weixin.qq.com/s/_vgnXoQ8FSobD3OfRAf5gw
CSDNhttps://blog.csdn.net/baidu_25986059
掘金https://juejin.cn/user/2172290706716775
知乎https://www.zhihu.com/people/JavaDog
简书https://www.jianshu.com/u/1ff9c6bdb916
giteehttps://gitee.com/javadog-net
GitHubhttps://github.com/javadog-net

记一次最近生产环境项目中发生的两个事故及处理方法


前言

  年前放假的几个月内,公司项目发生了两次事故,虽然与我无关,但事故发生后整个团队都受到影响,主管需要给客户写事故报告,客户甚至打电话给公司领导严肃批评,我想经历过这种事的朋友不在少数,但很多刚入行的朋友可能不太清楚其中利害,这里我分享出来希望对大家有所帮助。


事故经过

  三个月内一共发生两次生产环境事故,一个是接口超时导致服务雪崩,一个是锁表导致核心功能停滞一小时。


1、接口超时事故

1)、现象

  2021年12月某周一上午,负责管理网络的同事(俗称网管)一大早巡检过程中发现有一个服务挂掉了,他当时没在意,直接重启就好了,但到了10点左右,忽然三四个服务:挂号服务、门诊服务、检查报告服务等一起挂掉了,而且重启十几分钟后又会挂掉,瞬间公司就炸锅了,网管、开发人员、技术主管集体冒汗,在紧急处理过程中,还不断有院方电话打给主管、总经理直到大老板,领导就站在我们背后着急的等待我们处理,我想很多人应该有画面了。

2)、原因

  大概到中午都没解决,因为没有日志平台的情况下,定位问题是一件不容易的事情,后来在中午休息时间技术主管和我们终于发现了门诊服务中调用某软his接口出现超时,而周一上午的流量又很大,平常偶尔超时也没问题没人在意,这次一个小小的接口超时竟然直接把服务全部堵塞,调用该接口的挂号和门诊服务全部挂掉,而和门诊服务有一点耦合的检查报告服务也在疯狂的超时等待又超时又等待中挂掉了。

  最终,紧急联系院方找厂商服务团队查找该接口问题,同时我们临时把几个服务全部重启,总算在所有人惶惶不安的努力下3点之前恢复了正常。

3)、总结及处理

  事后,老板大发雷霆,并召开批斗大会点出了团队没有危机处理预案等等种种问题,据说是被院方碉堡了。我们怀着谦虚忐忑的心情在小本上疯狂做笔记(做样子),算是挺过去了,唯独主管比较难受,要亲自写好几个事故报告给甲方,懂的都懂。

  接口超时时间之后发现设置为60秒,真特么离谱啊,之前竟没一个人关注(包括我),没问题的情况下自然万事大吉,但凡出了问题,60秒的超时时间这是人干的事么,有什么接口若需要60秒,那本身就是一枚定时炸弹,必须一开始就拆掉。

  很多公司的项目其实都存在这个问题,碍于调用第三方接口难以预估超时时间,所以就设置的比较长,可实际上,这会给项目带来莫大的隐患,处理方式很简单:

  i)、一定要和对接的厂商确定接口的大概超时时间,有个基本的范围,因为你很难要求其他公司给你做好接口的完善,很多是不会搭理你的,你也看不见人家接口怎么写的,那么就要知道个大概,然后自己这边才好设置;

  ii)、在预估项目上线后流量会成倍增长的情况下,一定要对项目主要接口做压测,这是公司的测试团队必须要做的事情,我们公司这次就是测试人员不会压测,也没人重视,所以功能没问题就上线了,事后所有测试人员都被要求参加压测培训;

  iii)、只要是微服务,请一定引入熔断机制 ,这次事故过后,团队深刻反思,明明用了SpringCloud,但调用第三方接口的位置都没有做熔断处理,如果一开始做了,那么这次事故至少我们可以抽身,服务熔断降级后,既不会出现雪崩影响到其他服务,主要责任也在某软,给自己公司更多弹性处理的空间,而不是现在反而担负了主要责任。


2、锁表事故

1)、现象

  这个事故和前面的相比算是小事故了,但依然令人心惊胆战,毕竟快过年了,谁也不想出问题。墨菲定律讲过,越是你害怕的事情越是会到来,果不其然,年前大概就是前一两周的样子,某天下午一家三甲医院的挂号服务未响应,在前端的效果就是,你打开了小程序,点击了挂号服务,然后某个功能一直加载中,最后页面未响应或假死。

2)、原因

  锁表,因为负责维护该医院的同事,在下午四点中的时候给挂号表新增了一个可以为空的字段,而挂号表是百万数据的大表,直接执行SQL新增字段还附带部分条件,直接导致整个表都锁掉了,前端发来的请求就一直无法对该表执行其他操作,最终未响应及假死。

  既然锁了就要解,操作很简单,但集成同事刚好一时联系不上,开发人员又不熟悉内网环境,前后花了一个小时时间才解锁恢复正常,在一堆病患使用过程中,一个小时时间内都无法挂号,这背后的凶残你可想而知。

3)、总结及处理

  给该表迅速解锁,有条件的话最好让本公司专业DBA或集成同事来操作,他们更熟悉数据库服务及项目部署,操作更安全,如果公司没有这样的同事,只能百度一下咯。



MySQL解锁方式:

# 1. 查看当前数据库锁表的情况 
SELECT * FROM information_schema.INNODB_TRX; 
# 2. 杀掉查询结果中锁表的trx_mysql_thread_id 
kill trx_mysql_thread_id

Oracle解锁方式:

# 查看被锁的表ct
select b.owner, b.object_name, a.session_id, a.locked_mode
from v$locked_object a, dba_objects b where b.OBJECT_ID = a.OBJECT_ID

# 查看连接的进程
select sid, serial#, username, osuser from v$session;

# 杀掉进程 sid, serial#
alter system kill session \'678,983\';

切记,给大表新增字段以及其他操作,一定要选择流量最小的时间段,比如凌晨以后,这样可以避免造成生产环境事故。


总结

1)、首先,接口超时时间的设置不是小问题,希望大家引以为戒,一是要充分和对接厂商沟通,对接口情况有底,一个接口的响应时间理论上是毫秒级的,大厂甚至对接口超时时间都有明确规范,小厂因为身不由己,只能曲线救国,设置一个合理的范围;

    其次,一定要在测试阶段进行核心接口的压测,某种程度上可以提前暴露问题;

    最后,微服务一定要引入熔断机制,并且重视使用;

2)、大表操作要谨慎,要么选择合适的工具来实时操作大表(可以百度非常多),要么就选择流量最少的时间去操作,无非也就是凌晨,因为没啥人用,而且执行SQL操作大表时最好不要附带条件比如设置默认值之类的,这样会明显提升速度,把复杂的语句分段执行效果更佳,大家可以试试。



  本人文章从来都是纯手打,且都来自实际工作中的经验及分享,如果觉得有一滴滴帮助,就点个推荐吧!(o..o)~


喜欢就点一下推荐吧~~

以上是关于事故记一次意外把公司项目放到GitHub并被fork,如何使用DMCA下架政策保障隐私的主要内容,如果未能解决你的问题,请参考以下文章

记一次差点删库跑路的事故

记一次生产kafka消息消费的事故

记一次分布式锁使用不当引发生产事故.....

记一次线上事故

记一次线上事故

记一次苏宁小店事故分析和总结