XSS和CSRF

XSS

XSS:跨站脚本(Cross-site scripting)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。他允许恶意用户将代码注入到网页中,其他用户在观看网页时就会受到影响,这类攻击通常包含了HTML以及用户端脚本语言。
XSS攻击的类型
1.反射型(非持久型)
反射型XSS把用户输入的数据反射给浏览器,这种攻击的方式需要攻击者诱骗用户点击一个恶意链接或者提交一个表单,或者进入一个恶意网站时,将恶意脚本注入攻击者的网站,当用户点击恶意链接时,页面跳转到攻击者预先准备的页面,会发现在攻击者的页面执行了JS脚本,这样产生了反射型XSS攻击,攻击者可以注入任意的恶意脚本进行攻击,可能注入恶作剧脚本或者获取用户隐私数据的脚本。
2.存储性(持久型)
存储型XSS会把用户输入的数据存储到服务器端,当浏览器请求数据时,脚本从服务器上传并整形,这种XSS攻击具有很强的稳定性,一个比较常见的场景是攻击者在论坛上写下一篇包含恶意JS的评论,这个评论发表后,所有访问这个评论的用户都会执行这段恶意的js代码。
3.基于DOM的XSS(非持久型)
DOM型XSS是基于DOM文档对象模型的一种漏洞,DOM型XSS是一种特殊的反射型XSS,区别在于DOM型XSS并不会和后端进行交互,首先客户端的脚本程序可以通过DOM动态的检查和修改页面内容,当攻击者可以控制一些DOM对象,输入一些恶意JS脚本,而客户端脚本并没有对用户输入的内容进行有效的过滤就执行这些脚本,就会导致DOM型XSS漏洞。
XSS攻击的防范方法:
1.HttpOnly防止窃取Cookie
浏览器将禁止页面的js代码访问这个cookie,这样能够阻止XSS攻击后的Cookie劫持攻击
2.输入检查
不要相信用户的任何输入,对于用户的任何输入都要进行检查、过滤和转译。建立可信任的字符和HTML标签白名单,对于不在白名单之列的字符或者标签进行过滤或编码,在XSS防御中,输入检查一般是检查用户输入的数据中是否包含左尖括号或者右尖括号等特殊字符,有则对特殊字符进行过滤或编码来防止XSS攻击。
3.输出检查
用户的输入会存在问题,服务端的输出也会存在问题,一般来说,除了富文本的输出外,在变量输出到HTML页面时,可以使用编码或者转译的方式来防御XSS攻击。

CSRF(XSRF)

跨站请求伪造(Cross-site request forgery),也被称为one-click attack或session riding,通常缩写为CSRF或XSRF,是一种挟制用户在当前已登陆的Web应用程序上执行非本意的操作的攻击方法。
步骤:
1.用户浏览并登陆信任网站A
2.网站A验证通过后,在用户出产生A的Cookie
3.用户在没有退出网站A的情况下,访问了危险的网站B
4.危险网站B要求用户访问第三方站点A,并发出了一个请求
5.用户根据危险网站B的要求,携带着A的cookie对网站A进行了请求
6.网站A并不知道这个请求是用户发出的还是危险网站B发出的,但是因为这个cookie的存在,A会处理这个请求,从而危险网站B达到了自己获取用户信息的目的
常见的CSRF攻击
1.GET类型:通过向受害者网站的网页中注入一个img标签,这个标签的src属性指向共计发出者的服务器,这样攻击者就会获取到含有受害者登录信息的一次跨域请求。
img
src=“http://bank.example/withdraw?amount=10000&for=hacker” >
2.POST类型
利用一个隐形的input表单,当受害者访问该页面的时候,这个表单会自动提交获取到的用户信息
3.链接类型的CSRF
需要用户点击链接才会出发,这种类型通常是发布的突变中嵌入恶意链接,或者以广告的形式诱导用户点击。
CSRF攻击特点
1.通常发生在第三方域名
2.不能获取到cookie等信息,只是使用。
防范CSRF攻击
token验证的CSRF防御机制是公认的最合适方案,主要包括以下三个步骤:
1.将CSRF Token输出到页面中:
用户打开页面的时候,服务器需要给用户生成一个Token,这个一般是随机字符串和时间戳通过加密算法加密后的结果,这个Token不能保存在cookie中,否则可能会被攻击者冒用,为了安全起见,这个Token可以存在服务器的Session中,使用Js遍历整个DOM树,对于DO M中所有的a和form标签后加入Token
2.页面提交的请求需要携带Token
对于GET请求,Token将附加在请求地址之后,对于POST请求,可以在form表单中加入一个隐藏的表单域input,这个input的value中需要携带token。
3.服务端验证Token是否正确
当用户再次访问服务器的时候,服务器需要判断Token的有效性,验证过程是先解密Token,对比加密字符串和时间戳,如果加密字符串一致且时间未过期,则判断这个Token是有效的
Referer Check
根据HTTP协议,在HTTP头部字段中有一个字段referer,记录了该HTT P请求的来源地址,通过Referer check验证目标请求是否来自合法的源。
cookie的SameSite属性设置为strict
设置了这个属性,会使得在跨站情况下,任何情况下都不会发送cookie

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值