如何逃离死海效应

Thumbnail

(图片来自 The Dead Sea, Israel | One of the lowest, saltiest and unusu… | Flickr) 最近听团队老大的一个分享,介绍公司提倡的工程师的核心价值观,受益良多。 这也让我想起了一篇文章, Bruce F. Webster 在 2008 年写了一篇文章「The Wetware Crisis: the Dead Sea effect」, 翻译过来是「死海效应」。 Bruce 在文章中阐述了一个概念:一个团队可能陷入一种反模式,称之为死海效应。 死海是位于约旦的一个高盐分水域,由于水分被蒸发,这里的盐度是正常海水的 8 倍。 将水分比喻为高质量人才,盐分比喻为低质量人才。 水分容易被蒸发,而补入不足,盐分不容易蒸发日积月累,进而导致整个团队的人才质量劣化。 ...

2018-04-09 · alswl

从 SQL Server 到 MySQL(一):异构数据库迁移

Thumbnail

该系列三篇文章已经全部完成: 从 SQL Server 到 MySQL(一):异构数据库迁移 - Log4D 从 SQL Server 到 MySQL(二):在线迁移,空中换发动机 - Log4D 从 SQL Server 到 MySQL(三):愚公移山 - 开源力量 - Log4D 背景 沪江成立于 2001 年,作为较早期的教育学习网站, 当时技术选型范围并不大: Java 的版本是 1.2,C# 尚未诞生,MySQL 还没有被 Sun 收购, 版本号是 3.23。 工程师们选择了当时最合适的微软体系,并在日后的岁月里, 逐步从 ASP 过度到 .net,数据库也跟随 SQL Server 进行版本升级。 ...

2018-03-12 · alswl

从 2017 到 2018

Thumbnail

(2017 年 2 月摄于瑞虹月亮湾) 我有两年没公开年终总结了,原因很简单:年终结果无法让自己满意, 生活持续呈线性发展。那今年为什么又要将总结发出来呢? 并非是我的 2017 过得如何充实、有成就感,而是出于两个目的。 第一是我认识到 OKR 需要平和对待,我目前对自己的生活是缺乏完全掌控力的, 我无法既渴求爆炸性的增长,又期望在这一过程中低风险,我需要接受这种现状。 第二是曝光自己的目标,让回顾和计划透明化。 从社会心理学的角度上来看,公开的承诺有助于个体更努力地驱动目标的完成。 ...

2018-01-21 · alswl

工作和热情

Thumbnail

最近和一位老朋友吃饭,他说他最近比较苦恼: 「开始有职业危机了,担心自己失去对工作的热情,似乎离油腻的中年人又进了一步」。 作为一名互联网工程师,我深知这个行业技术日新月异, 如果对工作都失去了兴趣,会将自己置于跟不上时代发展、自身得不到提升的危险境地; 从个人生活质量来看,工作占据了一天 1/3 ~ 2/3 的时间, 失去热情的工作会成为人生的桎梏,不是驾驭工作,而是被工作所奴役, 这会进而影响一个人的身心健康,得个抑郁症稀疏平常。 ...

2017-12-21 · alswl

服务性能监控:USE 方法(The USE Method)

Thumbnail

本文首发在沪江技术学院公众号,小莞翻译,我做了校对。 由于微信公众号的封闭性,我担心未来文章不容易被发现。 为了避免沧海遗珠,特意转到这里。 英文原文:The USE Method。 USE 方法是一种能分析任何系统性能的方法论。 我们可以根据能帮助系统分析的结构化清单,来迅速的定位资源的瓶颈和错误所在。 它通常会先以列出问题为开始,然后再寻找适合的指标,而不是给你制定一些固定的指标, 然后让你按部就班的执行下去。 本页左侧下方,是我列出的,根据不同的操作系统(Linux、 Solaris 等) 衍生的 USE 方法列表。(译者注:可以参考原文链接) ...

2017-11-12 · 小莞

Stack Overflow 的 HTTPS 化:漫漫长路的终点

Thumbnail

原文作者:Nick Craver 翻译作者:罗晟 @luosheng & @alswl 原文地址:Nick Craver - HTTPS on Stack Overflow: The End of a Long Road 本文为原创翻译文章,已经获得原作者授权,转载请注明作者及出处。 本文首发在「沪江技术学院」公众号 今天,我们默认在 Stack Overflow 上部署了 HTTPS。目前所有的流量都将跳转到 https:// 上。与此同时,Google 链接也会在接下去的几周内更改。启用的过程本身只是举手之劳,但在此之前我们却花了好几年的时间。到目前为止,HTTPS 在我们所有的 Q&A 网站上都默认启用了。 ...

2017-09-27 · 罗晟, alswl

一个关于 nolock 的故事:深入理解数据库隔离级别

Thumbnail

加入沪江不久,我就被扔到一个将集团 SQL Sever 的数据库迁移到 MySQL 的项目里, 同时伴随进行的还有 .net 系统迁移到 Java 系统。 在这个过程中我发现了一个很有趣的现象:历史遗留的 .net 项目中, 几乎所有的 SQL 中都会使用一个关键字:nolock。 这让我很困惑,nolock 的字面意思是对当前技术不使用锁技术,为什么要这样用呢? 我找了一个范例如下: SELECT [id] FROM [dbo].[foos] WITH(nolock) WHERE aField = 42 AND bField = 1 作为横向支持工程师,开发工程师会问我:「数据库即将从 SQL Server 迁移到 MySQL,我们编码中还需要使用 nolock 么? MySQL 里面对应的写法是什么?」。 我并没有 SQL Server 的生产环境使用经验,一时间无法回答。 于是课后做相关知识学习,这里就是这次学习的一点成果。 ...

2017-09-19 · alswl

当我们在聊监控,我们在聊什么?

Thumbnail

最近在团队中给大家做了一个分享,泛泛地聊了一些有关「监控」的话题。 其实做分享对分享者的作用往往大于参与者。 这是一次将自己知识的梳理的过程,于是我将这次分享整理成这篇文章。 目的 🎯 我们先来聊聊,什么是「监控」,以及我们期望通过「监控」完成哪些目的? 传统意义上的监控,是指: 通过一些手段和工具,关注运行中的硬件、软件、用户体验的关键数据,将其暴露出来。 当关键数据出现异常时候发出警告,进行人工或者自动的响应。 ...

2017-06-08 · alswl

XSS 攻击的处理

Thumbnail

这是一年前写的项目笔记,一直在我的待办事项里等待做总结,今天偶然翻到,就整理成文章发出来。 谨以此文怀念 乌云。 事情缘由 春节前的某一天,收到一封来自乌云(国内知名白帽子团队)的邮件, 告知我厂网站上出现一例 XSS 漏洞。 因为以前对 XSS 输入做过防御,还以为是某个前端 DOM 上的 XSS 漏洞, 后来仔细一看,不妙,是个影响甚大的存储型 XSS 漏洞。 这里简单科普一下 XSS 跨网站脚本 -维基百科,自由的百科全书 中介绍到: 跨网站脚本(Cross-site scripting,通常简称为XSS或跨站脚本或跨站脚本攻击)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。 它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。 XSS 攻击可以分成两种,反射性 XSS / 存储型 XSS。前者是需要用户触发的 XSS, 针对当前用户的攻击行为。而后者存储型 XSS 则更为严重,一旦攻击代码被保存, 所有访问被攻击的页面,都会触发用户被攻击行为。 这次爆出的问题就是最严重的存储型 XSS,意味着每个访问到有问题页面的用户都会中招。 时间紧迫,问题必须被解决。 XSS 实现手段 在解决问题之前,需要对这个问题有必要的基础认识。 我们先看看 XSS 攻击是如何工作的,以及攻击者的目的是什么。 XSS 的原理是通过构造特殊的数据,并通过传递参数或者保存表单数据的方式, 让这些构建的数据破坏 DOM 结构,从而让自己预先构造数据中的 JS 脚本被执行。 检查存储型 XSS 漏洞的方法,可以在对应的 input field 里放入一些构造的数据,如果保存后可以被执行,就说明存在 XSS 漏洞。 常见的检测方法(来自 跨网站脚本 - 维基百科,自由的百科全书: ><script>alert(document.cookie)</script> ='><script>alert(document.cookie)</script> "><script>alert(document.cookie)</script> <script>alert(document.cookie)</script> <script>alert (vulnerable)</script> %3Cscript%3Ealert('XSS')%3C/script%3E <script>alert('XSS')</script> <img src="javascript:alert('XSS')"> <img src="http://xxx.com/yyy.png" onerror="alert('XSS')"> (这个仅限IE有效) 攻击者通过 XSS 可以窃取用户的相关信息,如果用户是管理员,那么影响更大。 通过这些身份信息,攻击者可以进一步篡改信息或者进行诈骗,后果不堪设想。 PS:一个有效粗暴的方式,是将对公、对内系统的域名分离,对内部系统进行物理级别隔离。 我厂历史上的处理方案 XSS 问题又来已久,咱厂子开了这么久,历史上如何防御的呢? 答案是用了两个策略:第一个是使用 OWASP 提供的库进行内容过滤,第二个是在存储数据时,存储了转义后的数据。 在技术上处理 XSS,有两种态度可以选择:第一种是前置过滤,即将用户所有数据都进行转义, 在输出时候在前端(模板渲染)层面直接输出。 第二种是用户输入的数据不经过转义就直接存储起来,前端在使用时候保证对数据进行转义。 我厂历史上使用的方案的前者,优点是在于前端不需要在每个地方转义, 避免某个地方忘记了转义,从而导致漏洞。缺点则是在输出内容到非 Web 客户端时候,比如 APP,需要进行额外的数据处理过程, 否则 HTMLEncode 的内容,在 APP 上面无法正确输出。 这个处理方案是稳妥的,那么为什么最近又暴露出问题了? 排查之后发现,原来最近有若干个服务迁移到了一个新系统, 而新系统在安全上面没有全局处理,所以爆出了漏洞。 本次处理方案 知道了原因,那么可以快速解决问题了。在这次处理过程中,我们讨论了在当前移动平台增长迅速,Web 平台增长缓慢的大势下,能否直接存储用户原始数据? 而且由于规范制定不严格,目前系统内有些地方存储转码后数据,有些地方存储转码前数据。 导致在一些特殊的字符(颜文字)处理上不一致,从而导致在处理 br / < 这类特殊字符时,表现不同。 由于 DB 中有部分数据转义处理,部分数据原文存储,所以先处理输出后敏感信息,在模板层面启用全局 encode。 将有危险的数据转移为在 HTML 文本。 PS:现代 Web 框架的模板渲染引擎,一般会默认开启 HTMLEncode,而 Freemarker 居然在 2.3.24-rc01 才支持,现在都没有发布,唉…… 处理方案: 开启全局 HTML 输出 Encode,有一个 Default HTML-escape using Freemarker 方案,可以默认开启 Html Encode,在这个处理方案中,需要注意有些地方真的需要输出原始 html,需要 noescape 特殊处理 检查所有前端操作,禁止字符串拼接,使用框架支持的模板进行渲染,拖小菊的福,新系统在这块工作完成度一直比较好 将 OWASP 方案强制开启 其他 Tips OWASP 有一个很长的 列表,教导如何避免 XSS,里面提到了: 为何以及如何进行「积极防御」,对立面是仅仅输出时候转义内容本身 几条对抗 XSS 的规则 尽量不在特定地方输出不可信变量:script / comment / attribute / tag / style, 因为逃脱 HTMl 规则的字符串太多了。 将不可信变量输出到 div / body / attribute / javascript tag / style 之前,对 & < > " ' / 进行转义 将不可信变量输出 URL 参数之前,进行 URLEncode 使用合适的 HTML 过滤库进行过滤 预防 DOM-based XSS,见 DOM based XSS Prevention Cheat Sheet 开启 HTTPOnly cookie,让浏览器接触不到 cookie 最后送上一个 XSS 攻击工具 http://webxss.net/,知己知彼,百战不殆。

2017-05-31 · alswl

👁️ 预测未来?

Thumbnail

拉普拉斯之妖 未来是可以被预测的么? 专家在预测股票趋势变化,天气预报员可以预测未来一周甚至更长时间的天气。 如果给他们更多的信息和参数,是否可以将未来预测的更准确? 如果精确的粒度可以达到基本粒子级别,同时给一个计算力超群的计算器,能否精确的推衍未来变化? 这些想法在我刚接触经典力学时浮现,学习了牛顿三定律之后,异常激动。 感觉人类可以凭借技术的进步,逐步对未来精确预测。彼时可以解决人类即将遇到的任何问题了,化问题于无形。 ...

2017-01-31 · alswl