门后的秘密-卓越管理的故事 笔记

第1周 了解部门成员和工作

卓越的管理所包含的工作内容是:领导和培养员工并管理工作任务。

当你进入一个新的组织或开始新的工作时,首先要知道三件事:

  • 这些人是谁,他们的优点和兴趣是什么,他们正在从事什么工作;
  • 团队的既定任务以及该团队如何产生价值;
  • 你的团队是如何与整个组织机构相契合的。

一对一会面

管理,因人而异。

一对一会面是辅导工作、听取回馈、进行职业培训和工作进度汇报的重要渠道。

  • 为每周的会面确定固定时间;
  • 会面礼仪,免谈时不做与会面无关的事情;
  • 真诚地会面;
  • 保持会谈的惯有形式;
  • 变通。根据不同的人变通管理方式,公正地对待各种情况。

会面时间不要过长。

与人打交道就是管理工作。

如果做不到,就不要主动提供帮助。
继续阅读

白帽子讲web安全-3.服务器端安全 摘记

注入攻击

注入攻击的本质是把用户输入的数据当作代码执行。有两个关键条件,第一个是用户能够控制输入;第二个是原本要执行的代码拼接了用户输入的数据。

正确防御SQL注入

  • 使用预编译语句。防御SQL注入的最佳方式,通过预编译语句,绑定变量。因为预编译语句的执行方式是命令与数据分离的:先传输SQL语句,再发送参数值。
  • 使用存储过程。但存储过程也可能会被注入。应该尽量避免在存储过程里使用动态SQL语句。
  • 检查数据类型。
  • 使用安全函数。

从数据库自身角度,应该使用最小权限原则,为不同的应用分配不同的帐号和权限,尽量避免使用root账户。

其他注入

  • 标记注入。比如对XML注入特殊的标记,使只有一个元素的变成有两个元素等,篡改了XML的原有意义;CRLF注入,对于以CRLF为分界符的约定或协议,注入CRLF,使协议解析器误认为协议提前结束等。
  • 代码注入。比如Java里的脚本引擎,通过注入代码来执行恶意操作。对于脚本语言要特别注意。

注入小结

在对抗注入攻击时,只需牢记“数据与代码分离原则”,在“拼接”处进行安全检查,就能避免此类问题。


欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。

白帽子讲web安全-2.客户端安全 摘记

浏览器安全

同源策略

同源策略(Same Origin Policy)是一种约定,是浏览器最核心也是最基础的安全功能。
可以说web是构建在同源策略的基础之上的,浏览器只是针对同源策略的一种实现。

浏览器的同源策略,限制了来自不同源的document或脚本,对当前document读取或设置某些属性。

影响“源”的因素有:host(域名或ip)、子域名、端口、协议。

对于当前页面来说,页面内存放JavaScript文件的域并不重要,重要的是加载JavaScript的页面所在的域是什么。

在浏览器中,<script> <img> <iframe> <link>等标签都可以跨域加载资源,而不受同源策略限制。这些带“src”属性的标签每次加载时,浏览器发起一次GET请求。
不同于XMLHttpRequest,通过src属性加载的资源,浏览器限制了JavaScript的权限,使其不能读、写返回的内容。

Flash 主要是通过目标网站提供的crossdomain.xml文件来判断是否允许当前“源”的Flash跨域访问目标资源。
继续阅读

白帽子讲web安全-1.安全世界观 摘记

一些词汇

exploit: 黑客使用的漏洞利用代码。

黑客精神: open, free, share .

安全世界观

黑帽子、白帽子

白帽子: 指那些精通安全技术,工作在反黑客领域的专家们。
黑帽子: 指利用黑客技术造成破坏,甚至进行网络犯罪的群体。

对于黑帽子,只要找到系统的一个弱点,就可以达到入侵系统的目的;对于白帽子来说,必须找到系统的所有弱点,不能有遗漏,才能保证系统不会出现问题。

从对待问题的角度,黑帽子为了完成一次入侵,需要利用各种不同漏洞的组合来达到目的,是在不断组合问题;而白帽子在设计解决方案时,如果只看到各种问题组合后产生的效果,就会把事情变复杂,难以细致入微地解决根本问题,所以白帽子必然是在不断地分解问题,再对分解后的问题逐个予以解决。

安全的本质

被划分出来的具有不同信任级别的区域,称之为信任域,划分两个不同信任域之间的边界,称为信任边界。

数据从高等级的信任域流向低等级的信任域,是不需要经过安全检查的;数据从低等级的信任域流向高等级的信任域,则需要经过信任边界的安全检查。

安全问题的本质是信任的问题。

一切的安全方案设计的基础,都是建立在信任关系上的。 我们必须相信一些东西,必须有一些最基本的假设,安全方案才能得以建立;如果我们否定一切,安全方案就会如无源之水,无根之本,也无法完成。

一旦我们作为决策依据的条件被打破、被绕过,那么就会导致安全假设的前提条件不再可靠,变成一个伪命题。
把握住信任条件的度,使其恰到好处,正是设计安全方案的难点所在,也是安全这门学问的艺术魅力所在。
继续阅读

编程珠玑 笔记

《编程珠玑》这本书无需多说,他的价值不在于这里摘录的只言片语,而在于阅读过程中思维上的学习,在解答习题时思维上的锻炼过程。

第一部分 基础

第一章 开篇

准确的问题描述:输入、输出、约束。在尝试解决问题之前,先将已知条件组织成一种更客观、更易用的形式。

确定用户的真实需求是程序设计的根本。

对小问题的仔细分析有时可以得到明显的实际益处。

简单的设计。法国作家兼飞机设计师 Antoine de Saint-Exupery:设计者确定其设计已经达到了完美的标准不是不能再增加任何东西,而是不能再减少任何东西。

第二章 啊哈!算法

Martin Gardner:看起来很困难的问题也可以有一个简单的、意想不到的答案。

优秀程序员都有点懒:他们坐下来等待灵机一动的出现而不急于使用最开始的想法编程。当然,这必须通过在适当时候开始写代码来加以平衡。真正的技能就在于对这个适当时候的把握,这只能来源于解决问题和反思答案说获得的经验。

第三章 数据决定程序结构

恰当的数据视图实际上决定了程序的结构。

将数据从控制结构中分离会获得许多好处。

能用小程序实现的,就不要编写大程序。

发明家悖论:更一般性的问题也许更容易解决。

程序员在节省空间方面无计可施时,将自己从代码中解脱出来,退回起点并集中心力研究数据,常常能有奇效。(数据的)表示形式上程序设计的根本。

退回起点进行思考时的几条原则:

  • 使用数组重新编写重复代码。冗长的相似代码常常可以使用最简单的数据结构–数组来更好地表述。
  • 封装复杂结构。
  • 尽可能使用高级工具。
  • 从数据得出程序的结构。通过使用恰当的数据结构来替代复杂的代码,从数据可以得出程序的结构。万变不离其宗:在动手编写代码之前,优秀的程序员会彻底理解输入、输出和中间数据结构,并围绕这些结构创建程序。

继续阅读

Linux/Unix 设计思想 摘记

良好的程序员写出优秀的软件,优秀的程序员“偷窃”优秀的软件。

NIH(Not Invented Here)综合征的特点就是人们会为了证明自己能够提供更加卓越的解决方案而放弃其他开发人员已经完成的工作。

Unix哲学准则:

  1. 小即是美
  2. 让每一个程序只做好一件事情
  3. 尽快建立原型
  4. 舍高效率而取可移植性
  5. 使用纯文本文件来存储数据
  6. 充分利用软件的杠杆效应
  7. 使用shell脚本来提高杠杆效应和可移植性
  8. 避免强制性的用户界面
  9. 让每一个程序都成为过滤器

Unix哲学的次要准则:

  1. 允许用户定制环境
  2. 尽量使操作系统内核小而轻巧
  3. 使用小写字母,并尽量保持简短
  4. 保护树木
  5. 沉默是金
  6. 并行思考
  7. 各部分之和大于整体
  8. 寻找90%的解决方案
  9. 更坏就是更好
  10. 层次化思考

如果你准备开始编写一个程序,请从小规模开始并尽量保持。

软件开发应该力求简短。

小程序往往只具有单一功能,而单一功能的程序往往也很小。

注:关于小程序和单一功能,我想到以前在IBM DW上看到的一篇文章提出的一种实践规则:
1、一个方法只做一件事;
2、一个方法的代码具有相同的逻辑层次;
3、遵循前面两个规则自然将产生大量短小、具有单一功能的方法,这些方法便于重用。


欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。