常见的web安全漏洞有哪些?

跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击:利用虚假输入表单骗取用户个人信息,XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的,一般是通过给别人……

前言:

在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷。如何才能更好地保护我们的数据?本文主要侧重于分析几种常见的攻击的类型以及防御的方法。

一、XSS

XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和 CSS重迭,所以只能叫 XSS。跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。

跨站脚本攻击有可能造成以下影响:

利用虚假输入表单骗取用户个人信息。利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。显示伪造的文章或图片。XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。

XSS 的攻击方式千变万化,但还是可以大致细分为几种类型。

1.非持久型 XSS(反射型 XSS )

非持久型 XSS 漏洞,一般是通过给别人发送带有恶意脚本代码参数的 URL,当 URL 地址被打开时,特有的恶意代码参数被 HTML 解析、执行。

举一个例子,比如页面中包含有以下代码:

攻击者可以直接通过 URL (类似:攻击。

非持久型 XSS 漏洞攻击有以下几点特征:

即时性,不经过服务器存储,直接通过 漏洞,需要确保这么几件事情:

Web 页面渲染的所有内容或者渲染的数据都必须来自于服务端。尽量不要从 URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染。尽量不要使用 eval, new Function(),document.write(),document.writeln(),window.setInterval(),window.setTimeout(),innerHTML,document.createElement() 等可执行字符串的方法。如果做不到以上几点,也必须对涉及 DOM 渲染的方法传入的字符串参数做 escape 转义。前端渲染的时候对任何的字段都需要做 escape 转义编码。2.持久型 XSS(存储型 XSS)

持久型 XSS 漏洞,一般存在于 Form 表单提交等交互功能,如文章留言,提交文本信息等,黑客利用的 XSS 漏洞,将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。

举个例子,对于评论功能来说,就得防范持久型 XSS 攻击,因为我可以在评论中输入以下内容

主要注入页面方式和非持久型 XSS 漏洞类似,只不过持久型的不是来源于 URL,referer,forms 等,而是来源于后端从数据库中读出来的数据 。持久型 XSS 攻击不需要诱骗点击,黑客只需要在提交表单的地方完成注入即可,但是这种 XSS 攻击的成本相对还是很高。

攻击成功需要同时满足以下几个条件:

POST 请求提交表单后端没做转义直接入库。后端从数据库中取出数据没做转义直接输出给前端。前端拿到后端数据没做转义直接渲染成 DOM。持久型 XSS 有以下几个特点:

持久性,植入在数据库中盗取用户敏感私密信息危害面广3.如何防御

对于 XSS 攻击来说,通常有两种方式可以用来防御。

1) CSP

CSP 本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少 XSS 攻击。

通常可以通过两种方式来开启 CSP:

设置 来举例:

只允许加载本站资源Content-Security-Policy: default-src 'self'

只允许加载 ://*

允许加载任何来源框架Content-Security-Policy: child-src 'none'

如需了解更多属性,请查看Content-Security-Policy文档

对于这种方式来说,只要开发者配置了正确的规则,那么即使网站存在漏洞,攻击者也不能执行它的攻击代码,并且 CSP 的兼容性也不错。

2) 转义字符

用户的输入永远不可信任的,最普遍的做法就是转义输入输出的内容,对于引号、尖括号、斜杠进行转义

function escape(str) { str = str.replace(/&/g, '&') str = str.replace(//g, '>') str = str.replace(/"/g, '&quto;') str = str.replace(/'/g, ''') str = str.replace(/`/g, '`') str = str.replace(/\//g, '/') return str }

但是对于显示富文本来说,显然不能通过上面的办法来转义所有字符,因为这样会把需要的格式也过滤掉。对于这种情况,通常采用白名单过滤的办法,当然也可以通过黑名单过滤,但是考虑到需要过滤的标签和标签属性实在太多,更加推荐使用白名单的方式。

const xss = require('xss') let html = xss('

XSS Demo

') // ->

XSS Demo

console.log(html)

以上示例使用了 js-xss 来实现,可以看到在输出中保留了 h1 标签且过滤了 script 标签。

3) 。

这是预防XSS攻击窃取用户cookie最有效的防御手段。Web应用程序在设置cookie时,将其属性设为信息。

二、CSRF

CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见的Web攻击,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作。

1. CSRF攻击的原理

下面先介绍一下CSRF攻击的原理:

完成 CSRF 攻击必须要有三个条件:

用户已经登录了站点 A,并在本地记录了 cookie在用户没有登出站点 A 的情况下(也就是 cookie 生效的情况下),访问了恶意攻击者提供的引诱危险站点 B (B 站点要求访问站点A)。站点 A 没有做任何 CSRF 防御我们来看一个例子: 当我们登入转账页面后,突然眼前一亮惊现"XXX隐私照片,不看后悔一辈子"的链接,耐不住内心躁动,立马点击了该危险的网站(页面代码如下图所示),但当这页面一加载,便会执行submitForm这个方法来提交转账请求,从而将10块转给黑客。

2.如何防御

防范 CSRF 攻击可以遵循以下几种规则:

Get 请求不对数据进行修改不让第三方网站访问到用户 Cookie阻止第三方网站请求接口请求时附带验证信息,比如验证码或者 Token1) SameSite

可以对 Cookie 设置 SameSite 属性。该属性表示 Cookie 不随着跨域请求发送,可以很大程度减少 CSRF 的攻击,但是该属性目前并不是所有浏览器都兼容。

2) Referer Check

攻击。

但在某些情况下如从攻击的发生。

3) Anti CSRF Token

目前比较完善的解决方案是加入Anti-CSRF-Token。即发送请求时在值是否都存在且相等,才认为这是合法的请求。否则认为这次请求是违法的,拒绝该次服务。

这种方法相比Referer检查要安全很多,token可以在用户登陆后产生并放于session或cookie中,然后在每次请求时服务器把token从session或cookie中拿出,与本次请求中的token 进行比对。由于token的存在,攻击者无法再构造出一个完整的URL实施CSRF攻击。但在处理多个页面共存问题时,当某个页面消耗掉token后,其他页面的表单保存的还是被消耗掉的那个token,其他页面的表单提交时会出现token错误。

4) 验证码

应用程序和用户进行交互过程中,特别是账户交易这种核心步骤,强制用户输入验证码,才能完成最终请求。在通常情况下,验证码够很好地遏制CSRF攻击。但增加验证码降低了用户的体验,网站不能给所有的操作都加上验证码。所以只能将验证码作为一种辅助手段,在关键业务点设置验证码。

三、点击劫持

点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。

1. 特点

隐蔽性较高,骗取用户操作"UI-覆盖攻击"利用iframe或者其它标签的属性2. 点击劫持的原理

用户在登陆 A 网站的系统后,被攻击者诱惑打开第三方网站,而第三方网站通过 iframe 引入了 A 网站的页面内容,用户在第三方网站中点击某个按钮(被装饰的按钮),实际上是点击了 A 网站的按钮。

接下来我们举个例子:我在优酷发布了很多视频,想让更多的人关注它,就可以通过点击劫持来实现

iframe { width: 1440px; height: 900px; position: absolute; top: -0px; left: -0px; z-index: 2; -moz-opacity: 0; opacity: 0; filter: alpha(opacity=0); } button { position: absolute; top: 270px; left: 1150px; z-index: 1; width: 90px; height:40px; } ......

这里用户会认为这个恶意网址。

3.如何防御

1)referer的限制

如果确定传递URL参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接

2)加入有效性验证Token

我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,但是如果功能本身要求比较开放,可能导致有一定的限制。

五、SQL注入

SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。

1.SQL注入的原理

我们先举一个万能钥匙的例子来说明其原理:

Username:

Password:

后端的 SQL 语句可能是如下这样的:

let querySQL = ` SELECT * FROM user WHERE username='${username}' AND psw='${password}' `; // 接下来就是执行 sql 语句...

这是我们经常见到的登录页面,但如果有一个恶意攻击者输入的用户名是 admin' --,密码随意输入,就可以直接登入系统了。why! ----这就是SQL注入

我们之前预想的SQL 语句是:

SELECT * FROM user WHERE username='admin' AND psw='password'

但是恶意攻击者用奇怪用户名将你的 SQL 语句变成了如下形式:

SELECT * FROM user WHERE username='admin' --' AND psw='xxxx'

在 SQL 中,' --是闭合和注释的意思,-- 是注释后面的内容的意思,所以查询语句就变成了:

SELECT * FROM user WHERE username='admin'

所谓的万能密码,本质上就是SQL注入的一种利用方式。

一次SQL注入的过程包括以下几个过程:

获取用户请求参数拼接到代码当中SQL语句按照我们构造参数的语义执行成功SQL注入的必备条件:

1.可以控制输入的数据

2.服务器要执行的代码拼接了控制的数据。

我们会发现SQL注入流程中与正常请求服务器类似,只是黑客控制了数据,构造了SQL查询,而正常的请求不会SQL查询这一步,SQL注入的本质:数据和代码未分离,即数据当做了代码来执行。

2.危害

获取数据库信息管理员后台用户名和密码获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息……整个数据库:脱裤获取服务器权限植入Webshell,获取服务器后门读取服务器敏感文件3.如何防御

严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如使用正则表达式进行一些匹配处理。对进入数据库的特殊字符(',",,<,>,&,*,; 等)进行转义处理,或编码转换。基本上所有的后端语言都有对字符串进行转义处理的方法,比如 lodash 的 lodash._escapehtmlchar 库。所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query 方法中的 ? 占位参数。六、OS命令注入攻击

OS命令注入和SQL注入差不多,只不过SQL注入是针对数据库的,而OS命令注入是针对操作系统的。OS命令注入攻击指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。倘若调用Shell时存在疏漏,就可以执行插入的非法命令。

命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序。也就是说,通过命令注入攻击可执行操作系统上安装着的各种程序。

1.原理

黑客构造命令提交给web应用程序,web应用程序提取黑客构造的命令,拼接到被执行的命令中,因黑客注入的命令打破了原有命令结构,导致web应用执行了额外的命令,最后web应用程序将执行的结果输出到响应页面中。

我们通过一个例子来说明其原理,假如需要实现一个需求:用户提交一些内容到服务器,然后在服务器执行一些系统命令去返回一个结果给用户

// 以 Node.js 为例,假如在接口中需要从 github 下载用户指定的 repo const exec = require('mz/child_process').exec; let params = {/* 用户输入的参数 */}; exec(`git clone ${params.repo} /some/path`);

如果 params.repo 传入的是 上下载到想要的代码。

但是如果 params.repo 传入的是 权限起的就糟糕了。

2.如何防御

后端对前端提交内容进行规则限制(比如正则表达式)。在调用系统命令前对所有传入参数进行命令行参数转义过滤。不要直接拼接命令语句,借助一些工具做拼接、转义预处理,例如 Node.js 的 shell-escape npm包以上就是常见的web安全漏洞及防御方法!

你可能想看:

Web安全漏洞如何修复?

作为信息安全领域的从业人员很高兴回答你的问题。关于Web安全如何修复我认为漏洞修复分四步发现漏洞、确定漏洞的危害、确定有那些修复方案及成本、综合比较选择修复方案进行修复。可以通过专业的漏洞扫描工具或者...

服务器安全漏洞有哪些呢?怎么样去提高呢?

服务器漏洞在我看来分为三类。第一类是服务器系统本身的漏洞,你要扫描系统漏洞,更新系统补丁和软件。第二类是服务器配置问题产生的漏洞,需要进行系统加固和基线配置检查,关掉不必要的服务和端口等等。第三类是服...

阿里发现微信高危漏洞立即通知腾讯,腾讯发现支付宝安全漏洞揶揄一番,对此你怎么看?

如果你发现别的部门同事犯了错误怎么办?阿里这次的做法当然也不能说完全厚道,同时通知了国家安全部门和腾讯方面,但也基本上算是“以德报怨”了吧,随后微信赶紧发布了更新版本,并对国家安全部门以及阿里安全团队...

如何快速解决网站中存在的Web漏洞?

最直接的可能就是通过URL 跳转漏洞。而且URL跳转漏洞的测试难度小,其次那些细节可能会存在漏洞呢?认证的正常页面可能存在URL跳转漏洞;可能存在URL跳转漏洞的是站内的一些其他外部链接,当你点击跳转...

黑客怎样做到无需知道源代码的情况下找到系统漏洞?系统漏洞有几种形式?

绝大部分的黑客寻找系统漏洞都不需要知道源代码,黑客基本不会手工的去攻击某个系统或者服务器,黑客就通过这个用户登录到了你的管理后台,那更为严重的可能就是注入了一段删除数据库的脚本。那么你的消息包就可能被...

webshell是什么意思,如何避免网站被留下webshell后门?

webshell实际是以asp、php、jsp,ini、cgi等网页文件形式存在的一种代码执行环境,也可以将其称做为一种网页后门。通常有很多黑客都通过使用webshell来让其在入侵一个网站后留下这个...

微软IE浏览器发现新安全漏洞

新华网4月28日电 据科技博客网站Gizmodo报道,微软公司上周承认,目前已发现一个新零日漏洞,影响每一个版本的IE浏览器。换句话说,这一漏洞的影响范围超过整个浏览器市场的四分之一。IE浏览器在获取...

申通快递被曝出13个安全漏洞 黑客窃取3万多客户信息

9月16日申通快递内部召开了管理层会议,正式宣布了申通、天天两家快递企业将启动战略重组,加快推进两个企业的资源整合。其中要求,快递企业应建立电子数据管理制度,确保用户信息安全。发生或者可能发生用户信息...

网站出现安全漏洞时如何自动修复?

需要人为地去根据网站实际情况寻找安全漏洞,然后手动去修复相关的漏洞。其实网站拥有者都不知道当前网站面临哪些严重的安全漏洞。以网络安全评估的检测结果为依据,对网站应用程序存在的漏洞、页面中存在的恶意代码...

哪个Golang的Web框架好一点,可以推荐一下吗?

可以看一下 GitHub 上的 awesome-go( awesome 很酷的意思。可以理解为优质golang资源大全)这里整理了基于golang的优质的web框架列表,很多开发者都在关注。你可以从中...

安全期是怎么计算的安全期是怎么计算的安全期是怎么计算的安全期是怎么计算的安全期是怎么计算?

女性的排卵日期一般在下次月经来潮前的14天左右。下次月经来潮的第1天算起,倒数 14天或减去14天就是排卵日,排卵日及其前5天和后4天加在一起称为排卵期。例如,某女的 月经周期为28天,本次月经来潮的...

Web3黑暗森林自救指南,5000字说透钱包和安全

原文标题:Web3黑暗森林自救指南,5000字说透钱包和安全前面是从人性的角度讲述可能的攻击手段,现在我们从大家最关心的钱包安全开始,说一些大家最关心的问题。因为你对新的公链肯定不如对ETH了解那么深...

微信爆致命漏洞,一个链接就可以让你中木马,附漏洞复现过程

微信内置浏览器就是chome的内核,并且默认打开了沙盒模式。简单来复现一下:。kali下:msfvenom -f csharp -a x86 --platform windows -o calc.cs...

常见的物流运输方式有哪些?

很多时候,不是单一一种运输形式完成运输任务,就需要两种或者两种以上的运输方式结合使用,因此就被称为多式联运。

常见的消防设施,器材有哪些?

新《消防法》中规定消防设施是指火灾自动报警系统、自动灭火系统、消火栓系统、可提式灭火器系统、灭火器防烟排烟系统以及应急广播和应急照明、安全疏散设施等。消防器材是指灭火器等移动灭火器材和工具。

阀门常见的故障有哪些?

阀门的常见故障及处理方法。2. 阀杆及其配合的丝母螺纹损坏或阀杆头折断、阀杆弯曲。2.2.1操作不当,开关用力过大,限位装置失灵,过力矩保护未动作

常见的麦田杂草和常用除草剂有哪些?

冬小麦苗期杂草防治技术措施 冬小麦田间杂草种类较多,危害严重,如不及时采取防治措施,将严重影响小麦的生长发育而造成减产。结合华北地区的生产实际和气候特点,现简要介绍小麦苗期的田间杂草防治技术措施:1...

电气控制电路中常见的故障有哪些?该如何解决?

电气控制电路常见的故障有哪些?该如何解决?答;电气控制电路中(包括采用PLC、工业控制模块)常见的故障有短路、断路、接触不良等。下面是一个自动往复控制电路图。在工业控制线路中,为了安装、维修方便都采用...

生活中常见的植物有哪些?

谢邀。我们常见的植物很多,数不过来的。依我的所见可以简单地分分类,当然分类方法也不同。一类是草本植物,这种植物一年生,春种秋收的庄稼就是呀。比如大豆、玉米、高粱、谷子、小麦、水稻、棉花等,当然秋小麦是...

常见的乳腺疾病有哪些?如何预防?

乳腺疾病是女性常见的困扰,由于发生在女性乳房器官,所以一旦发生,往往不仅影响身体健康,还对女性心理产生很大的伤害,尤其是恶性的乳腺癌,更是被称为女性的红颜杀手。那么,常见的乳腺疾病有哪些呢?又该如何预...

(来源:问答百科)
免责声明:本文内容来源于第三方或整理自互联网,本站仅提供展示,不拥有所有权,不代表本站观点立场,也不构成任何其他建议,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容,不承担相关法律责任。如发现本站文章、图片等内容有涉及版权/违法违规或其他不适合的内容, 请及时联系我们进行处理。

相关推荐