一、常见Web安全攻防解析之SQL注入
当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。
目前互联网上接连爆发的应用安全漏洞,使数据安全与个人隐私受到了前所未有的挑战。银行数据安全关系国家经济命脉,事关国家安全稳定。如何才能更好地保护我们的数据?本系列专题就来分析几种常见的攻击的类型以及防御的方法。
SQL注入攻击就是黑客最常用的数据库入侵方式之一。
所谓SQL注入,就是通过把定制化的SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,控制某个Web应用的数据库服务器,进而未经授权地访问、修改或删除各种数据。
而造成 SQL 注入的原因是因为程序没有有效的转义过滤用户的输入,使攻击者成功的向服务器提交恶意的 SQL 查询代码,程序在接收后错误地将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外地执行了攻击者精心构造的恶意代码。
SQL注入攻击如何运作的?
一次SQL注入的过程包括以下几个过程:
1、获取用户请求参数
2、拼接到代码当中
3、SQL语句按照我们构造参数的语义执行成功
所谓的万能钥匙,本质上就是SQL注入的一种利用方式。
一个常见的登录页面,后端的SQL语句可能是如下这样的:
1 let querySQL = ‘2 SELECT *3 FROM user4 WHERE username=’${username}’5 AND psw=’${password}’6 `;
按照我们的预想,输入用户名密码后执行的SQL语句如下:
1 SELECT * FROM user WHERE username=’admin’ AND psw=’password’
但如果有一个恶意攻击者输入的用户名是 admin’ –,密码随意输入,实际执行的SQL语句将是:
1 SELECT * FROM user WHERE username=’admin’ –‘AND psw=’xxxx’
在SQL中,–是闭合和注释的意思,–注释掉后面的内容,实际的查询语句被篡改为:
1 SELECT * FROM user WHERE username=’admin’
如此便可以直接登录系统,这就是SQL注入。
又比如,恶意攻击者随意在用户名或密码处输入’ or 1=1 ; –,由于or 1=1 一定返回true,会被程序无条件接受为有效的输入,便会跳过用户验证直接登录成功。
SQL注入的危害
1、获取数据库信息
2、管理员后台用户名和密码
3、获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息……
4、整个数据库:拖库
5、获取服务器权限
6、植入Webshell,获取服务器后门
7、读取服务器敏感文件
SQL注入的必备条件
1、可以控制输入的数据
2、服务器要执行的代码拼接了控制的数据
SQL注入的本质
数据和代码未分离,即数据被当做了代码来执行。
如何防范SQL注入攻击?
1、输入验证
检查用户输入的合法性,对进入数据库的特殊字符(’,”,\,<,>,&,*,; 等)进行转义处理,或编码转换,确信输入的内容只包含合法的数据。数据检查应当在客户端和服务器端都执行,之所以要执行服务器端验证,是为了弥补客户端验证机制脆弱的安全性。
2、错误消息处理
防范SQL注入,还要避免出现一些详细的错误消息,因为可以利用这些消息。要使用一种标准的输入确认机制来验证所有的输入数据的长度、类型、语句等。
3、加密处理
将用户登录名称、密码等数据加密保存。加密用户输入的数据,然后再将它与数据库中保存的数据比较,这相当于对用户输入的数据进行了“消毒”处理,用户输入的数据不再对数据库有任何特殊的意义,从而也就防止了注入SQL命令。
4、存储过程来执行所有的查询
SQL参数的传递方式将防止利用单引号和连字符实施注入。此外,它还使得数据库权限可以限制到只允许特定的存储过程执行,所有的用户输入必须遵从被调用的存储过程的安全上下文,这样就很难再发生注入式了。
5、最小权限原则
通过对数据库强制执行最小权限原则,来减缓SQL注入漏洞的影响。不使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
纵然SQL注入攻击是网络犯罪分子非常流行的攻击方法,但是如果我们能够通过采取诸如:数据加密,执行安全测试,以及及时更新补丁等适当的预防措施,就能够在某种程度上实现对数据的安全保护。
二、常见Web安全攻防解析之URL跳转漏洞
互联网时代,数据安全和个人隐私都受到了前所未有的挑战,各种Web安全攻防技术层出不穷,今天我们继续分析常见的安全攻击类型——URL跳转漏洞。
URL跳转漏洞概念
URL跳转漏洞,即借助未验证的URL跳转,将应用程序引导到不安全的第三方区域,从而导致的安全问题。
URL跳转漏洞攻击原理
黑客利用URL跳转漏洞来诱导安全意识低的用户点击,导致用户信息泄露或者资金的流失。其原理是黑客构建恶意链接(链接需要进行伪装,尽可能迷惑),发在QQ群或者是浏览量多的贴吧/论坛中。
安全意识低的用户点击后,经过服务器或者浏览器解析后,跳到恶意的网站中。
恶意链接需要进行伪装,经常的做法是熟悉的链接后面加上一个恶意的网址,这样才迷惑用户。
URL跳转漏洞实现方式
URL跳转的实现方式一般会有以下三种:
1、Header头跳转
2、Javascript跳转
3、Meta标签内跳转
通过以GET或者POST的方式接收将要跳转的URL,然后通过上面的几种方式的其中一种来跳转到目标URL。
由于用户的输入会进入Meta,Javascript,http头所以都可能发生相应上下文的漏洞,但是同时,即使只是对于URL跳转本身功能方面就存在一个缺陷,因为会将用户浏览器从可信的站点导向到不可信的站点,同时如果跳转的时候带有敏感数据一样可能将敏感数据泄漏给不可信的第三方。
举个Header头跳转实现方式:
这里用户会认为www.wooyun.org都是可信的,但是点击上述链接将导致用户最终访问www.evil.com这个恶意网址。
URL跳转漏洞防御:
防御URL跳转漏洞攻击主要有2种策略:限制Http请求的Referer字段;在请求地址中添加有效性验证Token。
1、Referer的限制
如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接
2、加入有效性验证Token
我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,但是如果功能本身要求比较开放,可能导致有一定的限制。
三、常见Web安全攻防解析之XSS攻击
在互联网时代,数据安全与个人隐私受到了前所未有的挑战,Web安全对于银行业务来说更是一个非常重要的课题。今天,我们来分析常见的攻击类型及防御方法之XSS攻击。
XSS概念
XSS(Cross Site Script),全称跨站脚本攻击,为了与CSS(Cascading Style Sheet)有所区别,所以在安全领域称为 XSS。XSS的原理是恶意攻击者往Web页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。通过跨站脚本攻击,可以利用虚假输入表单骗取用户个人信息;利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求;显示伪造的文章或图片。
XSS分类
1. 非持久型 XSS(反射型 XSS )
非持久型XSS漏洞,一般是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。
非持久型 XSS攻击原理及过程
举个例子,比如页面中包含有以下代码:
攻击者可直接通过URL (类似:https://xxx.com/xxx?default= ) 注入可执行的脚本代码。在攻击时候,不经过服务器存储,直接通过 Http 的 GET 和 POST 请求就能完成一次攻击,用户点击链接,即可盗用用户敏感信息。为了防止出现非持久型XSS漏洞,尽量不要从URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染。尽量不要使用eval, new Function(),document.write(),window.setInterval(),window.setTimeout(),innerHTML,document.createElement() 等可执行字符串的方法。
2.持久型 XSS(存储型 XSS)
持久型XSS漏洞,一般存在于Form表单提交等交互功能,如文章留言,提交文本信息等,黑客利用的XSS漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。
持久型 XSS攻击原理及过程
(1)POST 请求提交表单后端没做转义直接入库。
(2)后端从数据库中取出数据没做转义直接输出给前端。
(3)前端拿到后端数据没做转义直接渲染成 DOM。
举个例子,黑客写下一篇包含恶意代码的文章,文章发表后,所有访问该博客文章的用户都会执行这一段代码,进行恶意攻击。
直接输出了浏览器信息,黑客获取到这些信息后,发送到自己的服务器,随意操作。持久型 XSS直接植入数据库,盗取用户敏感私密信息,持久性强。
如何防御
对于XSS攻击来说,通常有两种方式可以用来防御。
1、CSP
CSP本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少XSS攻击。
通常可以通过两种方式来开启CSP:
(1)设置 http Header 中的 Content-Security-Policy
(2)设置Meta标签的方式
这里以设置http Header来举例:
只允许加载本站资源
只允许加载https协议图片
允许加载任何来源框架
对于这种方式来说,只要开发者配置了正确的规则,那么即使网站存在漏洞,攻击者也不能执行它的攻击代码,并且 CSP 的兼容性也不错。
2、转义字符
用户的输入永远不可信任的,最普遍的做法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义。但是对于显示富文本来说,显然不能通过上面的办法来转义所有字符,因为这样会把需要的格式也过滤掉。对于这种情况,通常采用白名单过滤的办法。
供稿|辽宁省&大连市分行信息科技部
关注公众号:lmcjl_com(长按复制)
本文来自作者:俗野.,不代表懒猪博客立场!
转载请注明:https://my.lmcjl.com/327093.html
本文链接:https://my.lmcjl.com/post/1999.html
4 评论