web框架安全
不安全–>安全框架–>框架安全–>不安全
文章目录
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管理
-
想必CRLF注入都很熟悉,如果不加以控制会导致任意URL跳转,从而可能跳转到攻击者构造的页面当中。
因此对于web框架来说管理好跳转目的地址是很有必要的,比如设置白名单。
-
以及对抗点击劫持的响应消息头,X-Frame-Options:SAMEORIGIN web框架可以封装此功能并提供页面配置
-
还有一个很重要的----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
参考《《白帽子讲安全》》,部分漏洞复现见左上角头像。