白帽子讲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 .

安全世界观

黑帽子、白帽子

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

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

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

安全的本质

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

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

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

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

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