《白帽子讲Web安全》12-Web框架安全

第12章 Web框架安全

总的来说,实施安全方案,要达到好的效果,必须要完成两个目标:
- 安全方案正确、可靠
- 能够发现所有可能存在的安全问题,不出现遗漏

12.1 MVC框架安全

  1. MVC架构:Model-View-Controller
  2. 一个优秀的安全方案,应该是:在正确的地方,做正确的事情。
    • 数据在经过不同的应用逻辑处理后,其内容可能会发生改变。因此在设计安全方案时,要考虑到数据可能的变化,认真斟酌安全检查插入的时机。
  3. 在框架中实施安全方案,比由程序员在业务中修复一个个具体的bug,有着更多的优势。
    • 有些安全问题可以在框架中统一解决,能够大大节省程序员的工作量,节约人力成本。
    • 对于一些常见的漏洞来说,由程序员一个个修补可能会出现遗漏,而在框架中统一解决,有可能解决“遗漏”的问题。
    • 在每个业务里修补安全漏洞,补丁的标准难以统一。而在框架中集中实施的安全方案,可以使所有基于框架开发的业务都嗯那个受益,从安全方案的有效性来说,更容易把握。

12.2 模板引擎与XSS防御

  1. 从MVC架构来说,XSS时发生在View层,因此使用“输出编码”的防御方法更加合理。
    • 这意味着需要针对不同上下文的XSS攻击场景,使用不同的编码方式。
  2. 当代流行的MVC框架中,View层常用的技术是使用模板引擎对页面进行渲染,比如Django Templates作为模板引擎。
  3. Django的auto-escape机制。
  4. 开发者在使用框架时,应该慎重对待安全问题,不可盲从官方指导文档。

12.3 Web框架与CSRF防御

  1. CSRF攻击的目标,一般都会产生“写数据”操作的URL,比如“增删改”;而“读数据”操作并不是CSRF攻击的目标,因为在CSRF的攻击过程中攻击者无法获取到服务器端返回的数据,攻击者只是借用户之手触发服务器动作,所以读数据对于CSRF来说并无直接的意义。
  2. 因此,在Web应用开发中,有必要对“读操作”和“写操作”予以区分,比如要求所有的“写操作”都使用HTTP POST。
    • POST的使用,对于保护token有者积极的意义,而security token的私密性(不刻预测性原则),是防御CSRF攻击的基础。
  3. 完整的CSRF防御方案,对于Web框架来说有以下基础地方需要改动。
    • 在Sessin中绑定token
    • 在form表单中自动填入token字段
    • 在Ajax请求中自动添加token,这可能需要已有的Ajax封装实现的支持
    • 在服务器端对比POST提交参数的token与Session中绑定的token是否一致,以验证CSRF攻击。
    • 书中针对Spring MVC,Django和Rails等框架举例。

12.4 HTTP Headers管理

  1. 在Web框架中,可以对HTTP头进行全局化的处理,因此一i邪恶基于HTTP头的安全方案可以很好地实施。
  2. 对于框架来说,管理好跳转目的地址是很有必要的。一般来说,可以在两个地方做这件事:
    • Web框架提供的统一跳转函数,在内部实现一个白名单;
    • 控制HTTP的Location字段,限制Location的值只能是哪些地址(本质还是白名单)
  3. 有很多与安全相关的Headers,也可以统一在Web框架中配置。
  4. HttpOnly Cookie

12.5 数据持久层与SQL注入

  1. 使用ORM(Object/Realtion Mapping)框架对SQL注入是有积极意义的。
  2. 对抗SQL注入的最佳方式就是使用“预编译绑定变量”。
    • 实际解决SQL注入是,有一个难点是应用复杂后,代码数量庞大,难以把可能存在SQL注入的地方不遗漏地找出来,而ORM框架为我们发现问题提供了一个便捷的途径。
  3. 使用Web框架提供的功能,在代码风格上更加统一,也更利于代码审计。

12.6 还能想到什么

  1. 凡是在Web框架中可能实现的安全方案,只要对性能没有太大的损耗,都应该考虑实施。
  2. 在设计整体安全方案时,比较科学的方法:
    • 首先建立威胁模型
    • 然后再判断哪些威胁时可以在框架中得到解决的
  3. 在设计Web框架安全解决方案时,还需要保存好安全检查的日志。
  4. 设计Web框架安全也要与时俱进。

12.7 Web框架自身安全

  1. Struts2命令执行漏洞
    • 远程执行代码的漏洞
  2. Spring MVC命令执行漏洞
    • 远程执行命令漏洞
  3. Django命令执行漏洞
    • 远程执行命令漏洞(“命令注入”漏洞)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章