【安全】CSRF、XSS攻击了解与防范

==============================

目录

  一、了解CSRF攻击及防范

  二、了解XSS攻击及防范

===============================

 

 

一、了解CSRF攻击及防范

 

1、了解csrf

  中文叫跨站请求伪造,指攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证(刚登录不久的登录cookie),绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

 

2、csrf解决原理

  攻击者是利用用户的登录状态来发起 CSRF 攻击,而 Cookie 正是浏览器和服务器之间维护登录状态的一个关键数据,因此要阻止 CSRF 攻击,我们首先就要考虑在 Cookie 问题。

 

3、解决方案

  3.1、Cookie中的SameSite设置

    服务端响应时,Set-Cookie将SameSite设置成Strict,限制第三方 Cookie,从而减少安全风险。

     第三方Cookie(第三方网站引导发出的 Cookie)意思是在C网站引导你发出A网站的请求携带A网站的cookie。

  

  3.2、利用同源策略

    可检查请求头hander的referer,服务端检查请求头referer 值,看是否是同源请求
  

  3.3、Token认证

    在用户登录时,服务器生成一个 Token 返回给用户,在浏览器端向服务器发起请求时,带上Token,服务器端验证 Token(如何带上token,可在url后面添加参数;可在hander头部自定义属性添加;表单post请求可在 form 的最后加上 <input type=”hidden” name=”csrftoken” value=”tokenvalue”/>,这样就把 token 以参数的形式加入请求了)。
    如何添加token,加在那里可以看下面连接:链接

  

  3.4、验证码

    这个道理很简单,也是目前使用最广泛的一种方式。验证码则强制用户必须与应用进行交互,才能完成最终请求。但该方式用户体验较差;

 

================================================================================

 

 

二、了解XSS攻击及防范

 

1、了解xss

  XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

 

2、xss攻击分两类

  2.1、反射型XSS,又称非持久型XSS

    通过url的方式传递给了服务器,而服务器则只是不加处理的把脚本“反射”回访问者的浏览器而使访问者的浏览器 执行相应的脚本。

  2.2、储存型XSS,也就是持久型XSS

    储存到数据库中,然后当我们再次访问相同页面时,将恶意脚本从数据库中取出并返回给浏览器执行。例如留言板植入srcrip。



3、xss攻击可以做什么

  3.1、盗用cookie实现无密码登录

    攻击者插入一段可执行的 JavaScripts 脚本,该脚本会读出用户浏览器的 cookies 并将它传输给攻击者,攻击者得到用户的 Cookies 后,即可冒充用户。

  

  3.2、劫持流量实现恶意跳转(劫持访问)    

<script>window.location.href="http://www.baidu.com";</script>

  

  3.3、配合csrf攻击完成恶意请求

    Csrf攻击就是在未经你许可的情况下用你的名义发送恶意请求(比如修改密码,银行转账等)。例如再留言板植入,修改密码的get请求,如果不用原密码比对就能恶意修改所有访问该页面的用户的密码。

 

4、xss攻击防范手段

  4.1、首先是过滤对诸如<script>、<img>、<a>等标签进行过滤。

  4.2、其次是编码像一些常见的符号,如<>在输入的时候要对其进行转换编码,这样做浏览器是不会对该标签进行解释执行的,同时也不影响显示效果。

  4.3、最后是限制。通过以上的案例我们不难发现xss攻击要能达成往往需要较长的字符串,因此对于一些可以预期的输入可以通过限制长度强制截断来进行防御。

 

5、编码防范具体例子

  5.1、利用document.createTextNode 源生的方法,转义快速且全面

var htmlEncode = function (str) {
    var div = document.createElement('div')
    div.appendChild(document.createTextNode(str))
    return div.innerHTML
}

  5.2、利用正则来替换特殊字符串来实现


6、xss额外知识

  6.1、谷歌浏览器对于链接做了严格的xss检测,现在链接上植入xss难度高了很多。火狐就简单很多

    6.2、某些厂商的cookie有其他验证措施如:Http-Only保证同一cookie不能被滥用

posted @ 2021-10-21 19:13  彭胜光  阅读(726)  评论(0编辑  收藏  举报