• 大白话理解网络攻击(XSS、CSRF)


    本文主要介绍了 XSS 和 CSRF 的攻击原理和防御措施及两者区别。接下来我们来了解下。

    XSS

    一、XSS原理

    Xss(cross-site scripting)攻击:通过向某网站写入js脚本或插入恶意 html标签来实现攻击

    比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息;

    或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。 

    二、XSS攻击的类型

    分为存储性(持久型)、反射型(非持久型)、基于DOM

    1、存储性(持久型)

    用户输入的带有恶意脚本的数据存储在服务器端。当浏览器请求数据时,服务器返回脚本并执行。

    常见的场景:

    攻击者在社区或论坛上写下一篇包含恶意 Js代码的文章或评论,文章或评论发表后,所有访问该文章或评论的用户,都会在他们的浏览器中执行这段恶意的 JavaScript 代码。

    2、反射型(非持久型)

    把用户输入的数据"反射"给浏览器。通常是,用户点击链接或提交表单时,攻击者向用户访问的网站注入恶意脚本。

    常见的场景:

    在正常页面上添加一个恶意链接。恶意链接的地址指向localhost:8080。然后攻击者有一个node服务来处理对localhost:8080的请求:

    当用户点击恶意链接时,页面跳转到攻击者预先准备的localhost:8080页面,执行了 恶意的js 脚本,产生攻击。

    3、基于DOM

    基于DOM的XSS是指通过恶意脚本修改页面的DOM结构。是纯粹发生在 客户端的攻击。

    三、XSS防范方法

    1) 内容安全策略 (CSP)   -https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP

    它是一个额外的安全层,用于检测并削弱某些特定类型的攻击,包括跨站脚本 (XSS) 和数据注入攻击等。无论是数据盗取、网站内容污染还是散发恶意软件,这些攻击都是主要的手段。

    其实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。

    两种方法可以启用 CSP:

    • 设置 HTTP 的 Content-Security-Policy 头部字段
    • 设置网页的<meta>标签。

    2) HttpOnly阻止Cookie劫持攻击

    服务器端Set-Cookie字段设置HttpOnly参数,这样可以避免。(想了解Set-Cookie, 可参考https://www.cnblogs.com/renzm0318/p/11643841.html)

    这时候,客户端的Document.cookie API无法访问带有 HttpOnly 标记的Cookie, 但可以设置cookie。

    注:发起XSS的攻击者既然可以通过注入恶意脚本获取用户的 Cookie 信息。

    所以,严格来说,HttpOnly 并非阻止 XSS 攻击,而是能阻止 XSS 攻击后的 Cookie 劫持攻击。 

    CSRF

    一、CSRF原理

    CSRF(Cross Site Request Forgery),跨站请求伪造。

    CSRF 攻击是攻击者借助用户的 Cookie 骗取服务器的信任,以用户名义伪造请求发送给服务器。如:在请求的url后加入一些恶意的参数

    换句话说,CSRF就是利用用户的登录态发起恶意请求

    场景:

    假设某银行网站A以GET请求来发起转账操作,转账的地址为www.xxx.com/transfer.do?accountNum=l000l&money=10000,参数accountNum表示转账的账户,参数money表示转账金额。
    而某大型论坛B上,一个恶意用户上传了一张图片,而图片的地址栏中填的并不是图片的地址,而是前而所说的砖账地址:<img src="http://www.xxx.com/transfer.do?accountNum=l000l&money=10000">
    当你登录网站A后,没有及时登出,这时你访问了论坛B,不幸的事情发生了,你会发现你的账号里面少了10000块...
    上述只是举例呦,转账怎么可能是get请求,为了保险,肯定是post请求,更何况银行的交易付款会有登录密码和支付密码等一系列屏障,流程复杂得多,安全系数也高得多

    二、CSRF防范

    1、添加 token 验证

    在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,若请求无 token 或者 token 不正确,则认为可能是 CSRF 攻击而拒绝该请求。

    2、Referer Check

    在HTTP头中有一个字段叫做Referer,它记录了该HTTP请求的来源地址。通过Referer Check,可以检查是否来自合法的"源".

    例如:

    从www.user.com发起的删帖请求,那么Referer值是http://www.user.com, 删帖请求应该被允许;

    而如果是从CSRF攻击者构造的页面www.attack.com发起删帖请求, 那么Referer值是http://www.attack.com, 删帖请求应该被阻止。

    3、验证码

    验证码会强制用户必须与应用进行交互,才能完成最终请求,但是也不能给网站所有的操作都加上验证码,所以只能作为防御 CSRF 的一种辅助手段,而不能作为最终的解决方案

    XSS和CSRF区别:

    • XSS是利用用户对指定网站的信任
    • CSRF是利用网站对用户的信任
  • 相关阅读:
    Redis与Memcached汇总
    那些年掉进的坑之AngularJS篇
    常见的Regex表达式(更新RFC标准的email检验)
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    Windows + Android + Cordova + ionic环境搭建
    less语法
    AngularJS 指令之 ng-style
    AngularJS 指令之 ng-if
    ionic之自定义 ion-tabs 图标
    AngularJS之延迟加载html template
  • 原文地址:https://www.cnblogs.com/renzm0318/p/11649611.html
Copyright © 2020-2023  润新知