web框架安全概览--你所使用的web框架是否安全?

web框架安全

不安全–>安全框架–>框架安全–>不安全

文章目录

  • web框架安全
    • MVC框架实现安全方案
    • 模板引擎与XSS防御
    • web框架与CSRF防御
    • HTTP Headers管理
    • 数据持久层与SQL注入
  • web框架自身安全
    • struts2命令执行漏洞
    • spring MVC命令执行
    • Django命令执行漏洞
    • shiro反序列化漏洞
    • thinkphp命令执行

MVC框架实现安全方案

mvc框架将web应用分为三层即

view层----负责用户试图、页面暂时等
controller层----负责应用的逻辑是西安,接受view层传入的用户请求转发给model层处理。
model层----负责实现模型,完成数据处理

根据这个模型,然乎秉着在正确的地方,做正确的事情的原则,去实施一个优秀的安全方案

例如,在mvc架构里,如何去防御SQL注入,很多不对的做法是在view层做安全防护的,导致黑客可以各种绕过进而实现SQL注入,但是SQL注入是在model层解决的事情。

一些主要的web安全威胁,如XSS、CSRF、SQL注入、访问控制、URL跳转等不涉及业务逻辑的安全问题都可以集中放在MVC框架中解决。

模板引擎与XSS防御

针对XSS防御,因为XSS攻击是在浏览器上执行的,其形成过程是在服务器端也米娜渲染时,注入的恶意HTML代码导致的。所以主要防御方法就是"输入检查"和"输出检查",输入检查就是各种过滤,而输出检查就是输出编码,针对不同的情况使用不同的编码函数。

在MVC框架中并不符合这样的设计,是如何防御的呢?

正确的地点----也就是view层,常用的技术就是使用模板引擎对页面进行渲染。

在模板引擎中可以实现自定义的编码函数,应用于不同场景。通过自定义的方法时得XSS防御的功能得到完善。

web框架与CSRF防御

CSRF攻击的目标,一般都会产生"写数据"操作的URL,而读数据操作并不是CSRF的目标。对于防御机制,一是HTTP POST进行防御,但实际上POST本身并不足以对抗CSRF,因为POST也是可以自动提交的。但是POST的使用,对于保护token有着几级的意义,而security token的私密性(不可预测性原则),是防御CSRF攻击的基础。

对于web框架来说,可以自动的在所有涉及POST的代码中添加token,这些地方包括所有的form表单、所有的Ajax POST请求等。

在spring MVC以及一些其他的流行web框架中,并没有提供针对CSRF的保护,因此这些功能需要自己实现。

HTTP Headers管理

  1. 想必CRLF注入都很熟悉,如果不加以控制会导致任意URL跳转,从而可能跳转到攻击者构造的页面当中。

    因此对于web框架来说管理好跳转目的地址是很有必要的,比如设置白名单。

  2. 以及对抗点击劫持的响应消息头,X-Frame-Options:SAMEORIGIN web框架可以封装此功能并提供页面配置

  3. 还有一个很重要的----cookie信息,提到cookie又会想到HttpOnly,而用web框架实现的好处就是不用担心在某个网页上遗漏。

数据持久层与SQL注入

都知道SQL注入最佳防御除了深层防御,最佳防御方式就是使用"预编译绑定变量",但实际上还有一个难点就是应用复杂之后代码数量庞大,难以把可能存在SQL注入的地方不遗漏的找出来。

而ORM框架可以解决这个问题,当前ORM框架主要有五种:Hibernate(Nhibernate),iBATIS,mybatis,EclipseLink,JFinal。

ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。

web框架自身安全

凡是有利有弊,即使使用web框架会简单的实现很多可靠的安全方案,但是自身也会含有很多漏洞

struts2命令执行漏洞

s2-001
s2-057

spring MVC命令执行

CVE-2018-1273
CVE-2018-1270

Django命令执行漏洞

----CVE-2019-14234
----CVE-2020-9402

shiro反序列化漏洞

----CVE-2016-4437

thinkphp命令执行

5-rce
5.0.23-rce

参考《《白帽子讲安全》》,部分漏洞复现见左上角头像。

你可能感兴趣的:(中间件安全)