像 BAT 这类公司,假如我是刚刚入职的程序员,现在公司要我做一个专题模块,做好了要集成测试,这个专题模块要用户登录才能用,那么必须 include 这个 Passport 模块,而这个模块的源代码里面肯定有一些加密算法,私钥等等信息,不能让我们这些小程序员看到里面的代码,那么具体怎么做测试呢?他们如何保证核心业务代码的安全?
![]() | 1 knightdf 2016-06-28 17:33:19 +08:00 ![]() 那核心代码不是只能老板亲自写了? |
![]() | 2 Infernalzero 2016-06-28 17:37:12 +08:00 服务化接口,远程调用 |
3 hitmanx 2016-06-28 17:37:14 +08:00 瞎说啊。一般的比如可以做成库的形式吧,二进制+API 头文件;一些敏感的怕泄漏出去有人反汇编的可以直接以网络形式提供接口 |
![]() | 4 plantain 2016-06-28 17:37:15 +08:00 via Android 私钥一般不写死的,可以配在环境变量里 |
![]() | 5 justfly 2016-06-28 17:38:06 +08:00 为啥登陆要在代码里引入一个模块? 一个服务调用,你只要关注协议,不需要关注实现细节。 |
![]() | 6 changwei OP @hitmanx 那像 py , php 这类脚本语言呢? @justfly 服务调用有的是 RPC ,但很多情况下就是单纯的 include 啊,因为这种大公司框架应该是自己写的,像 Passport 这种关键而且用的最多的模块应该都是写在框架底层里面了吧 @Infernalzero 远程调用,就是类似于 webservice ? |
7 okudayukiko0 2016-06-28 17:48:22 +08:00 via Android PHP 可以加密啊。 |
![]() | 8 learnshare 2016-06-28 17:52:20 +08:00 都是 SDK/API 化的,不会给你什么代码、数据库之类的东西 |
![]() | 9 binux 2016-06-28 17:54:17 +08:00 加密算法看到就看到咯,秘钥开发一套,在部署的时候再加载一套就好了。 而且,如果是用户模块,除了代码,你没有数据库你怎么测试? |
![]() | 10 chaegumi 2016-06-28 17:55:33 +08:00 围观学习 |
![]() | 11 changwei OP @learnshare 像 php , py , perl 之类的脚本语言,除非像 php 可以编译成 opcode ,不然还是能看到代码啊,数据库肯定有测试机上面的数据库,字段,表结构什么的都还是能看到的把。 |
![]() | 12 shiny 2016-06-28 18:24:43 +08:00 development test stage production 环境都不一样吧 |
![]() | 13 dexterlei 2016-06-28 18:26:33 +08:00 这个回答可能有点跑题。 私以为,大型公司的核心财富并不仅仅在于他们的核心代码。组织最重要的组织结构等等,是能让系统运行起来的人,有了一套代码,要发展出与之匹配的生意模式和人员配给同样是大学问,也更加难以在短期内复制出来。而出来做生意,最终是成本和收益,对核心代码之类的保护也只能达到相对的强,没有完全攻破不了的防御,只要你能出得起那个成本。其实只要保证潜在的对手获得这个东西的成本会高于收益,你的东西自然就是安全的。 另外,能问出这个问题,总让人会怀疑有没有居心不良的想象 |
![]() | 14 choury 2016-06-28 18:27:45 +08:00 via Android 开发的接触不到线上环境,只能操作测试数据库,运维没有数据库权限, dba 不能接触代码 |
![]() | 15 Zzzzzzzzz 2016-06-28 18:33:04 +08:00 @changwei python 第一次 import 或者调用 compileall 后生成的 pyc 、 pyo 就是字节码, 可以直接交付, 而且 python 可以用 cython 编译成 binary, 这个更好一点, 基本上所有语言的 opcode 只要不做混淆对保护代码都没有什么卵用. |
16 marffin 2016-06-28 18:53:19 +08:00 代码无所谓吧,随便看,不值钱 数据才值钱 |
![]() | 17 yangxiongwei 2016-06-28 18:58:42 +08:00 ![]() 走 rpc 的 |
18 lynnworld 2016-06-28 19:00:57 +08:00 环境变量不同 |
![]() | 19 seki 2016-06-28 19:02:10 +08:00 泄漏代码可以入刑的,大公司的健全的法务团队不会错过这样的完成 kpi 的机会的 |
![]() | 20 intsilence 2016-06-28 19:07:30 +08:00 楼上已经说了,都是 rpc 调用的。 |
![]() | 21 surfire91 2016-06-28 19:33:06 +08:00 “那么必须 include 这个 Passport 模块” 不是必须 include, 是必须不能 include 啊 |
![]() | 22 thomasjiao 2016-06-28 20:52:55 +08:00 用的是 php 扩展 |
23 luojing 2016-06-28 21:08:42 +08:00 via Android 大型网站的登录都是接口授权登录,因为各种系统的语言可能都一样。有专门负责会员系统的部门。至于说代码泄漏问题,尤其像一些游戏公司,他们会分内外网,要一定级别的人才能考出代码到外网 |
![]() | 24 paradoxs 2016-06-28 21:15:56 +08:00 库. 而且事实上值钱的不是代码啊, 给你一个"美团", 你也 run 不起来啊. 是不是. |
25 wwthappy 2016-06-28 21:19:52 +08:00 代码没有你想的那么重要,看了又怎么样?重要的是公司的商业模式组织结构。 |
![]() | 26 rekulas 2016-06-28 21:22:02 +08:00 https://github.com/del-xiong/screw-plus 本地服务器进行测试,核心代码加密 |
![]() | 27 wujunze 2016-06-28 21:47:51 +08:00 一般公司都会跟员工签订保密协议 如果泄露公司的重要代码 是要承担法律责任的! 而且都有契约精神,公司雇佣你,公司也相信你,建立在互信的基础上,没有必要对程序员进行防备吧! |
![]() | 28 cmlz 2016-06-28 22:01:42 +08:00 via Android 难道你们入职的时候不用签保密协议? 签了后你还敢乱 COPY 代码到处甩不怕进去捡肥皂? |
29 billlee 2016-06-28 22:27:43 +08:00 大公司不防止程序员接触核心代码 |
![]() | 30 boyhailong 2016-06-28 22:32:43 +08:00 你想多了 小公司才会这么鸡贼 |
![]() | 31 msg7086 2016-06-28 22:57:17 +08:00 1. 大公司不太会 care 你接触这些代码。 2. 大公司不太会让你有办法直接读写敏感信息的。 如果能,那说明这个公司也没什么太需要偷的东西了,技术不过关。 |
32 bobuick 2016-06-28 23:10:00 +08:00 腾讯把代码都共享给你, 你能复制个腾讯出来不? 并没任何卵用。 另外, 法务在凝视着你 |
33 fluyy 2016-06-28 23:50:35 +08:00 给你一套代码,你就能搞一个微信, QQ 淘宝出来? 再说,代码,算法也是有专利的。 |
34 mengzhuo 2016-06-28 23:58:30 +08:00 via iPhone 鹅厂员工表示跨部门要代码都是不可能的, 更别说有内审的情况下拷贝整个 bg 的前后端代码。 |
35 vileer 2016-06-29 00:05:19 +08:00 via iPhone 我们实习生都有权看代码 |
![]() | 36 9hills 2016-06-29 00:10:26 +08:00 via iPhone 代码不用保密,保密的是策略和数据。 比如搜索反作弊策略就是核心保密的,但是搜索程序本身不保密 |
![]() | 37 techmoe 2016-06-29 00:20:56 +08:00 via Android 把代码偷偷 pull 下来打包带走,回去仔细研究实现。。(滑稽) |
38 appbox 2016-06-29 00:42:14 +08:00 只能被模仿,无法被超越 |
![]() | 39 paulagent 2016-06-29 01:00:28 +08:00 google 是全员都能访问 code repo , 并不担心什么。 有一种东西叫 NDA , 我们学校和企业做个项目,学生还的签, 违反了就等着坐牢加赔钱吧。 第二,楼上很多人都说了,给你代码没有卵用,代码加上商业逻辑才是王道。 第三,当年同事做过日本的项目,去日本出差,每天进门都要把手机上交,进入一个全封闭的屋子,出门上厕所也要申请,所有电脑不能连接外网, usb 等物理接口全锁死,外加监控。 没有任何隐私。 听说华为也有这么干的部门。这种模式下,你只能靠脑袋记住了,晚上回家写出来。 |
![]() | 40 paulagent 2016-06-29 01:55:07 +08:00 |
41 so1id0t 2016-06-29 06:16:36 +08:00 via iPhone 基本都是防君子不防小人的小手段 |
![]() | 42 hrong 2016-06-29 07:07:38 +08:00 via Android test driver |
![]() | 43 yjxjn 2016-06-29 08:31:32 +08:00 IBM 是这么干的,你要是在互联网上泄露代码了,一经发现,等着走人吧,甚至有可能法务会起诉你,代码可以看,唯独对于数据库权限,一般只有 select 权限,也就几个表,不是很重要,对于非常 confidential 的表来说,如果业务需要的话,才临时给你付权限,一旦项目结束,直接 revoke 掉...... |
![]() | 44 smithtel 2016-06-29 08:44:54 +08:00 rpc 远程调用 |
![]() | 46 Wenwei 2016-06-29 08:53:36 +08:00 想多了,即使给你整套的代码,那么多年的代码和配置,想必你也 run 不起来。况且不同的系统可能采用不同的语言来写。 |
![]() | 47 bitsjx 2016-06-29 09:28:10 +08:00 代码都在内网服务器上,和外网直接是隔离的,即使看了也没啥啊,反正也拿不出来,但是如果不让看,那怎么工作? |
49 tsungkang 2016-06-29 09:40:12 +08:00 @Wenwei 哈哈,这话我赞同,我现在这公司大部分代码是可以直接拉下来瞧的,全部拉下来有 1G 多(这还只是源代码,生成了以后得有 6G 多……),不过嘛,其实知道了大概原理以后我表示对这些源代码也没啥兴趣了,留着还浪费硬盘空间。再说了,即便给我我也跑不起来,没那运行环境。 |
![]() | 50 wodesuck 2016-06-29 09:40:16 +08:00 私钥偷到也没用,肯定会有换钥机制的 |
51 stormpeach 2016-06-29 09:46:15 +08:00 编译型语言底层用二进制文件。 web 开发你还藏着掖着?还让不让人加班了? |
![]() | 52 Jehovah 2016-06-29 09:46:50 +08:00 我已掌握了沙小吃的核心技了!你要加盟?! |
![]() | 53 mechgouki 2016-06-29 10:15:39 +08:00 现在的软件开发 就算给你全部代码也没有用 关键是人和团队啊 |
![]() | 54 islandev 2016-06-29 10:22:56 +08:00 代码 没啥用,重要的是 数据和人 |
55 shimanooo 2016-06-29 10:40:37 +08:00 抓到就索赔 1000 万 |
![]() | 56 cocalrush 2016-06-29 10:50:59 +08:00 公钥私钥测试环境一套 生产环境一套... 给你并不会影响什么啊. 加密算法都是公开的 |
![]() | 57 ethego 2016-06-29 10:51:43 +08:00 我厂是这么解决的:同时存在几套环境,生产、线上、日常、测试等等等等,像私钥这种东西每个环境都是隔离的,开发环境只保证程序能正常运行。如果个人要拿真正的用户数据需要像 db 团队进行申请,由 dba 或者自己去线上系统导,数据会经过一次脱敏。 |
![]() | 58 ethego 2016-06-29 10:52:33 +08:00 内部各模块之间调用全部走 api 的,与开发无关的模块无权限浏览。 |
![]() | 围观学习^_^ |
60 hongcha 2016-06-29 11:10:55 +08:00 朋友你想多了,基本都是走网络请求接口调用 api/rpc, 你要是 include 了,后面人家更新了算法密钥,你不得跟着更新,耦合太大了 |
![]() | 61 vnady 2016-06-29 11:14:22 +08:00 ![]() 那么庞大的代码,你能把他跑起来,出问题了你能解决。到这水平谁还会去 copy 代码? 能把上万 k 代码跑起来的人也是很牛的。 |
62 annielong 2016-06-29 11:15:54 +08:00 应该用的 api 之类的借口,不需要登录的话只需进行验证是否登录,需要登录的话调用登录借口 |
![]() | 63 changwei OP @mengzhuo 请问一下,你们鹅厂员工是否有电脑或者 U 盘掉了的情况,如果这个时候有代码在这上面,被人捡到了拿去干坏事了咋办? @bobuick 话说我国历史上有因为盗窃源代码被判刑嘛?近几年新闻我好像没咋听到过 @vnady @tsungkang @Wenwei @fluyy @marffin @binux @ethego 我想说的只是从安全角度上考虑,比如说百度的搜索结果排序算法啊,一些关键业务比如说支付宝付款环节各种 csrf token 的生成算法啊,用户登录后种植的用于身份验证的 cookie 算法有可能会被泄露,而不是说你弄到源代码然后去搭建一个私服。。。你们都理解偏了我的意思,,, |
![]() | 64 hwsdien 2016-06-29 13:21:25 +08:00 开放接口,微服务的形式 |
65 mengzhuo 2016-06-29 13:24:12 +08:00 @changwei 电脑都必须开机密码和硬盘加密(Mac 也是), U 盘理论上不能带(毕竟有云盘),内审发现不加密就罚钱(貌似还有部门通报批评) 所以我现在不带电脑回家(反正发了一台笔记本,一台台式) 而且就算有代码,密钥也不会在上面啊…… |
![]() |   66 paulagent 2016-06-29 13:26:32 +08:00 你还是年轻啊,你说这种泄漏就是犯罪,抓到是要坐牢的。 那人为什么要犯罪,一种是穷的活不下去了,这些大企业的员工显然不是,就算哪个倒霉蛋欠了赌债,他想变现,他拿到这些东西卖给谁,自己干? 怎么隐瞒突然多出来的资金,卖给黑产,能卖多少钱? 为了这点蝇头小利就准备下半辈子呆在监狱的人不多吧。 一句话,想犯罪的人,多半是有时间赚钱,没时间花钱。 你以为公司内控什么的都是摆设,泄漏出去的信息和自己家有漏洞被黑了是两码事,很快就能查出来是谁泄漏的。到时就等警察叔叔去查水表了。 |
![]() | 67 lawlietxxl 2016-06-29 13:32:17 +08:00 ![]() 疼逊:抄?你这不是关公面前耍大刀吗? |
![]() | 68 maxsec 2016-06-29 13:34:20 +08:00 私钥随机生成 私钥主机不开 80 、 443 后的任何端口 |
69 ourcubk 2016-06-29 13:48:51 +08:00 @changwei 判刑的不少的...法务不是吃素的...http://bbs.c114.net/thread-899465-1-1.html |
![]() | 70 qwerasdf 2016-06-29 14:03:59 +08:00 业务代码都有对应的 dummy 假数据供你玩耍 |
![]() | 71 walkie 2016-06-29 14:09:29 +08:00 我遇到过部分人是给你核心都不会看的,尽量少知道,少干活,就写自己这一块,老滑头们 |
![]() | 72 yx1989 2016-06-29 14:44:24 +08:00 ![]() 加密算法可以是公开的,但是密钥要是保密的。 --香农 信息论 |
![]() | 75 ajan 2016-06-29 16:44:20 +08:00 看标题的描述应该是那种两个人的小公司才有的需求 |
76 gejigeji 2016-06-29 16:52:31 +08:00 在公司里,通过职务之便获取利益还是很容易的,不过很多是犯法的 |
![]() | 77 cYcoco 2016-06-29 17:32:21 +08:00 大部分楼层跑题了 一般都是通过服务化来做的吧 |
![]() | 78 hl 2016-06-29 18:41:55 +08:00 大公司连内部系统都是服务化的,根本不需要源码级的接触,直接授权之后连服务就行了 |
![]() | 79 h4x3rotab 2016-06-29 19:15:34 +08:00 via iPhone goog 的机密代码也是无关人员不能访问的 |
![]() | 80 YouXia 2016-06-29 19:28:28 +08:00 via Android 阿里,我们这边同事业部的绝大部分代码都是可以看到的,自己申请下就行,除了与钱挂钩的,比如广告涉及到反作弊。 |
81 onceyoung 2016-06-29 19:37:41 +08:00 via Android 我不在什么大公司,但是我们公司的代码前后端我都是可以看到的,可以下载的,你的意思是我就可以去开另一家公司了? |
![]() | 82 roker 2016-06-29 23:27:40 +08:00 狼厂是把核心代码烧在芯片里~~~~ |
![]() | 83 tSQghkfhTtQt9mtd 2016-06-30 08:46:44 +08:00 via Android 大型公司里面如何防止程序员接触到核心代码? http://www.zhihu.com/question/47941381?f3fb8ead20=14b264c5a48f3dfdfe0ef2ba3c3e346d (分享自知乎网) |
![]() | 84 casaca 2016-06-30 09:02:28 +08:00 via Android 看到那些淡什么商业模式,什么代码不重要,什么给你代码也复制不了一个腾讯,,,这些都是啥子?不知道不作声人会说你 SB ,没进过大公司不了解就不要在这说些没用的商业模式。还代码不重要。 |
![]() | 85 prczsf 2016-06-30 10:57:02 +08:00 给你 QQ 的全套源代码,你能再搞一套做到 QQ 这个级别吗?互联网公司更重要的是运营。 大公司之所以成功,不仅仅是因为那两行代码。 核心源代码重要不重要,肯定重要,所以各种保密规定之类的。 |
![]() | 86 SmiteChow 2016-06-30 11:51:25 +08:00 代码没啥用,给不给你看源代码你都不敢泄露的,除非你想去待几年。 |
87 feuvan 2016-06-30 14:51:40 +08:00 算法公开没用,又不是火星座标系算法。 token 都靠密钥保证,不靠算法。再说私有算法未必比公开算法安全。 举个最简单的例子,线上服务器加盐算摘要的环境配置和开发服务器肯定不一样,你知道怎么算摘要也没用。 |
90 lucifer4he 2016-06-30 15:56:36 +08:00 用户中心自己就是一个事业部好么。给你提供接口,接口外的统统做不了。有需求告诉用户中心的人让他们搞新接口。 如果你不是用户中心的选手,但是有空把他们代码梳理一遍-。-话说你哪个事业部的,没有自己家的代码码么=。= |
91 owt5008137 2016-06-30 22:30:53 +08:00 via Android token 一类的东西都是带随机生成的,然后一定时间或者一定次数或者其他的一些途径来失效的。 然后由几个 key 做 hash 到其他 key 的算法。用一个不容易被碰撞攻击得算法即可,就算告诉你又怎么样。除非你在路由上劫持流量。 比如 ssh 用认证 key 登入的时候,不就明摆着告诉你算法了么,然而你看看容不容易破解。 更何况这个 key 一般都是静态的,而那些 token 还是动态的,会自动失效的 |
![]() | 92 geektony 2016-07-01 00:34:30 +08:00 双方信任才有用,再多的技术手段又有何用。况且人才是最大的漏洞。 |
93 fluyy 2016-09-16 13:04:35 +08:00 via iPhone ![]() @changwei 懂你意思了,对于数据安全,一般大厂都有强的权限校验,不是谁都能看核心数据的。第二个像账号安全, token 生成算法。其实很多算法都是比较通用的生成算法,关键是你要拿到密钥啊。有些算法里变量还不止一个,所以危险还是比较小的。我知道的团队在调整安全协议时,会找专门的安全同学审核。会考虑很多场景,当密钥泄漏,以及协议被破解时,都会有应对策略的。最后你签合同时是有保密协议的哦。法务团队也会盯着你的。 还有你说的 u 盘弄丢了,这个不太清楚会怎样。但是如果公司的电脑弄丢了,需要向 IT 部门报告,他们一方面会协助警方定位电脑,另一方面会远程格式化数据吧。 由于没有经历过,上面的场景也是猜测的 |
94 fluyy 2016-09-16 13:20:10 +08:00 via iPhone @murmur 这个不太清楚了。但是看见过同事申请的专利主要讲算法的。这种还是要将算法落实到具体的方法中。 |
![]() | 96 geektony 2016-09-16 22:01:38 +08:00 @changewei 你这问题太尴尬了,我不好回答呀~ 不过能明确告诉你,有很清晰的权限管理制度! |