代码改变世界

[置顶]唔... 突然发现进入推荐博客了

2011-01-13 17:09 by Nana's Lich, 428 阅读, 0 推荐, 收藏, 编辑
摘要:大概以后写东西会有更多的人来看了吧?这倒是个好事。不过发现这件事的时候我正在把一些乱七八糟的东西往博客上扔——本来只是放着备忘的,所以也没任何说明和注释。希望从“推荐博客”点进来的同学们没有因为这些东西迷惑到。还有,我是非常非常懒的,如果发现我总是发些零零散散的东西却很少发代码和解说都完整的文章,也千万别觉得奇怪。 阅读全文

十年后的第一篇:记录对两个面试问题的思考

2023-02-15 04:19 by Nana's Lich, 123 阅读, 0 推荐, 收藏, 编辑

太久没写过博客了,用户名密码甚至连用哪个邮箱注册的都不记得了,如果不是最近面试官要看的话实在是不想翻出来(如果面试官看到请不要在意)。

面试过程中被问了一些刁钻的问题(当然,也不是故意刁难),其中有两个问题值得记录一下——不是因为问题本身,虽然问题本身也有点意思,但更主要还是趁自己还没忘的时候记一下当时没考虑到的情况。

1、SSO的吊销机制

SSO通常有因为种种原因需要对token/ticket进行吊销的情况,在此之前我的设计思路是认证服务通过与业务服务连接的可靠信道发送吊销指令,这部分本身没什么问题,但是考虑到这是个安全机制,假如设计上只考虑了对有效期内的token/ticket进行吊销的话,可能会遭遇对服务器时间差的exploit,比方说很多人听说过有些机器运行了几天时钟就慢下去了,假如遇到这种情况的话在token/ticket吊销后业务服务器比认证服务器的时间慢了多少攻击者就有多少时间继续用token/ticket胡作非为。

解决这个问题有几种思路:

最死板的做法是吊销指令保存时间比被吊销的token/ticket还要长一些,只要它超过了业务服务与认证服务之间可能产生的时间误差就没事;

不那么死板的做法是所有服务都通过统一的授时中心进行时间校准,如果服务器一段时间无法联系到授时中心就发出警告并准备暂停运作;

还有一种情况是假如业务服务器存在某种可以直接前后调整时间的小漏洞的话,以上两种做法都无法彻底解决问题,所以针对这种情况进行防御需要在一个相对可靠的持久位置记录最后一次对吊销指令本身进行清理掉时业务服务器的本地时间,并且一旦在解码token/ticket时发现本地时间早(慢)于已记录的时间则中止鉴权过程并报警。

当然,由于我对SSO实施的经验并不多,以上思路难免有考虑不周的地方,请任何读到本文的人不要以此作为实施标准。

2、docker的实现原理

被问到这个问题时我的第一反应是也许需要像在Windows上一样通过所谓的APIHOOK技术来劫持系统调用;后来仔细一琢磨其实结合*nix万物皆文件的哲学,可能overlayfs就把一切全包了吧?

短期内没有深入研究docker原理的想法,如果我猜得不对欢迎指正;同前一个问题,依旧不要把我的思考当作答案。

复健备忘 - PredefinedAdornmentLayers

2013-05-20 13:29 by Nana's Lich, 293 阅读, 0 推荐, 收藏, 编辑
摘要:Visual Studio 中预定于修饰层的实际显示优先级。 阅读全文

通过反射中的 TypeBuilder 来动态实现 INotifyPropertyChanged 接口

2013-03-06 07:49 by Nana's Lich, 2484 阅读, 3 推荐, 收藏, 编辑
摘要:由于 WPF 中并没有简便的实现 INotifyPropertyChanged 接口的办法,所以即使是使用 CallerMemberNameAttribute 或者代码段来加快实现的过程,写出来的代码也会显得很臃肿。 本文介绍一种可以利用自动实现属性来实现 INotifyPropertyChanged 的办法及其原理。 阅读全文

[分享]另一种对 IDisposable 的实现

2013-01-04 20:05 by Nana's Lich, 327 阅读, 0 推荐, 收藏, 编辑
摘要:相比于刚发出来没多久的关于 MVVM 的文章,对 IDisposable 接口的讨论更是老生常谈了。详细讲解 IDisposable 的文章也有很多,不想深入了解的看了会头晕,想深入了解的估计也早就了解过了。所以本文不讲那么多大道理,实用为主,一切从简。正文实际上,不管和大家一起讨论过多少次,不管用过多少次,每次再使用 IDisposable 的时候总还是会有点犯迷糊,会怀疑自己实现得到底对不对。久而久之,对 IDisposable 的实现就产生了一个模板,紧接着模板便理所当然地成了一个抽象类: public abstract class DisposableObject : IDispos. 阅读全文

[分享]一些在 WPF/Silverlight 中应用 MVVM 模式时可能会有点用途的代码

2013-01-04 19:35 by Nana's Lich, 399 阅读, 0 推荐, 收藏, 编辑
摘要:MVVM 虽好,但开发起来却总让人怀疑到底是轻松了还是把问题更加复杂化了。 试过几种办法之后发现实现 View Model 最方便的办法是要靠使用代码段。 阅读全文

一个简单的WSH Scriptlet

2012-05-26 20:59 by Nana's Lich, 644 阅读, 0 推荐, 收藏, 编辑
摘要:先强调一下,我这里把它称为“Scriptlet”只是因为和其字面意义比较近似,并不是指 Microsoft Windows 中的那种“脚本组件”。起因有些时候我会弄到一些免安装的实用工具,比方说 Sysinternals 套件中的工具就都属于这一种。但是虽然工具是免安装的,可实际用起来的时候找到工具的所在位置也挺麻烦的,所以我尝试过几种办法,有创建快捷方式、创建文件夹、设置 Path 环境变量等等,总地来说当这类五花八门的免安装工具越来越多的时候,我是会犯懒的,于是我就开始想有什么办法可以一劳永逸地解决这个问题。解决方案经过短时间的尝试以后,我最终写出了一个能有点帮助的 Scriptlet,语 阅读全文

另一种在字节数组和十六进制字符串之间转换的手段

2012-05-24 17:42 by Nana's Lich, 720 阅读, 0 推荐, 收藏, 编辑
摘要:几年前我使用国外的一个流行的Blog服务来撰写博文,但是因为一些众所周知的原因我打不开自己的博客了,于是才刚刚开始写博的我就不得不中断这种行为了,直到后来在园子重新开博。前几天我弄到了条VPN,一时兴起就翻出原来的博客来看,结果在上面找到了以前的一些小研究,其中之一便是标题所指的东西。用途什么的就不再废话了,总之在.NET编程中通常来说从字节数组到十六进制的转换是要用BitConverter.ToString,返回的字符串会包含减号/横线作为每个字节所对应的十六进制数之间的分隔符,不想看到的话就只能再Replace掉,而且BitConverter类名不能省略,用起来不怎么方便;从十六进制到字节 阅读全文

园子的模板 CSS 有点小毛病

2011-06-21 15:49 by Nana's Lich, 320 阅读, 0 推荐, 收藏, 编辑
摘要:#green_channel a{/* ... 省略 ... */-moz-border-radius: 5px;-webkit-border-radius: 10px;-moz-box-shadow: 0 1px 3px rgba(0,0,0,0.5);-webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.5);/* ... 省略 ... */}这段 CSS 是针对 Mozilla 和 WebKit 引擎的,所以其它浏览器认不出来。实际上 Opera 和 IE9 早就可以正确呈现这样的效果了,只要换成这样就可以了:#green_channel a{/* ... 阅读全文

两则用于验证 Email 地址的正则表达式

2011-06-16 14:35 by Nana's Lich, 645 阅读, 0 推荐, 收藏, 编辑
摘要:网络上所流传的大部分验证信箱格式的正则表达式往往会对一些实际上有效的信箱地址作出错误地判断,所以我参考 RFC 写了个比较完善的,可以用来对付几乎所有可能的信箱地址格式。 阅读全文

【备忘】在类库项目中使用 Razor 智能感知

2011-01-22 15:15 by Nana's Lich, 660 阅读, 0 推荐, 收藏, 编辑
摘要:http://blogs.msdn.com/b/webdevtools/archive/2011/01/20/how-to-get-razor-intellisense-for-model-in-a-class-library-project.aspx 阅读全文
点击右上角即可分享
微信分享提示