XSS和CSRF详解与防御

news/2024/7/5 23:26:17 标签: javascript, 数据库, 前端
开年遇到的第一个问题就是解决XSS攻击>_<,可见要时刻保证网站的安全性至关重要。做好网站安全,不仅维护网站的稳定性,更保证用户数据的一致性。对此,总结一下笔者在工作中遇到的安全问题以及防御方法。

前端中常见的两种网站应用安全漏洞攻击的方式是 XSS 与 CSRF,本文详细介绍两种攻击方式的概念、原理以及防御方式。

XSS

XSS(Cross-site scripting)跨站脚本攻击是恶意用户在网站中注入的脚本,当正常用户打开网站时受到影响并可能获取用户cookie等信息一种安全攻击行为。常见的例子是用户进入某个网站的时候一直弹出alert框等。
常见的 XSS 方式分为两类:持久性和非持久性,也有机构将其分为传统型(由服务器端代码缺陷引起)和基于 DOM 型(有客户端引起)。下面介绍三种类型:

  • 反射型 反射型跨站脚本攻击最常见的方式是客户端输入查询信息,服务器端将其返回并且显示在页面上造成攻击。如直出页面,后面根据参数查询返回对应的查询信息和结果。或者用户在input输入框中进行查询等,值得注意的是,使用 innerHTML 插入 <script>alert(document.cooke)</script 并不会执行 script 中的代码,需要构造对应事件触发。如: <img src="xxx.jpg" width="0" height="0" border="0" onload="javascript:alert(document.cookie);">
  • 存储型存储型与反射型 XSS 攻击的区别在于是否存储在数据库中,如用户写博客和评论等,这种方式的影响是持久的。
  • 基于 DOM恶意用户构造的脚本并不会经过服务器端,完全发生在客服端,如通过链接(?userName=<img onload="javascript:alert(document.cookie)"/>)的查询参数来显示用户名等。

针对 XSS 攻击,经常有以下两个方式来进行防御:

  • 设置重要的cookie信息为 httpOnly 对于重要的 cookie字段,如:可以通过 cookie 某个字段和某个接口获取好友关系的,需要将其设置为 httpOnly,使得恶意用户无法获取。
  • 对输入进行检测和转义 对用户输入的或者从链接获取参数需要展示到页面中需要校验合法性和使用转义函数进行转义,如常见的函数如下:
javascript">function escHTML(str) {
    if (!str) return '';
    return str.replace(/&/g, '&amp;')
              .replace(/</g, '&lt;')
              .replace(/>/g, '&gt;')
              .replace(/x27/g, '&#039;')
              .replace(/x22/g,'&quto;');
}

CSRF

CSRF(Cross-site request forgery)是一种攻击,迫使用户在受信任网站上执行不需要的一些操作。具体过程如下:

  1. 用户向信任站点如example.com发送请求
  2. 用户验证通过、获得信任站点的身份信息,并放入cookie中,用户此时可以在站内进行其他请求;
  3. 用户未退出登录example.com,然后访问hack.com网站,该网站返回攻击性代码并且在页面中存在访问example.com的请求;
  4. 浏览器在用户可能不知情的情况下向example.com发送请求;
  5. 由于同域名可以带上cookie信息,因此信息认证通过,请求伪造成。

针对 CSRF 攻击,常用的防御方式如下:

  • 检测请求来源 在请求头中有一个refree字段,refree记录了发送请求的域名,比如:hack.com向example.com中发送请求,那么refree就为hack.com,只要在处理请求中做相应的校验就可以中断请求。
  • 加入token校验 crsf之所以能够伪造请求成功,其原因之一在于所有的用户信息放于cookie中;因此可以在每次请求中加入token,然后后台进行校验,如果校验通过则进行处理。生成token方式之一如下:
javascript">function getToken (token) {
    var str = token || '';
    var hash = 5381;
    for (var i = 0, len = str.length; i < len; ++i) {
        hash += (hash << 5) + str.charCodeAt(i);
    }
    return hash & 0x7fffffff;
}

具体攻击示例点击查看


http://www.niftyadmin.cn/n/1373497.html

相关文章

真正的十大暴利商品 成本曝光

1、化妆品 男士也许该怀疑&#xff0c;大宝是暴利产品吗&#xff1f;NO。这里的化妆品是指进口高端产品。SK&#xff0d;II 著名的神仙水在中国零售价格为560元&#xff0c;而其制造成本仅为人民币6.5元。惊讶么&#xff1f;就算研 发成本都加进去&#xff0c;每单只成本也不…

计算机操作系统--PV操作详细说明

计算机操作系统--PV操作详细说明在计算机操作系统中&#xff0c;PV操作是进程管理中的难点。 首先应弄清PV操作的含义&#xff1a;PV操作由P操作原语和V操作原语组成&#xff08;原语是不可中断的过程&#xff09;&#xff0c;对信号量进行操作&#xff0c;具体定义如下&#x…

111:TemplateView讲解

TemplateView&#xff1a; django.views.generic.base.TemplateView&#xff0c;这个类视图是专门用来返回模版的。在这个类中&#xff0c;有两个属性是经常需要用到的&#xff0c;一个是template_name&#xff0c;这个属性是用来存储模版的路径&#xff0c;TemplateView会自动…

OpenCL和CUDA的使用比较

OpenCL和CUDA虽然不是同一个平级的东西,但是也可以横向比较! 对OpenCL和CUDA的异同做比较: 指针遍历 OpenCL不支持CUDA那样的指针遍历方式, 你只能用下标方式间接实现指针遍历. 例子代码如下: // CUDA struct Node { Node* next; } n n->next; // OpenCL struct Node …

超级详细的手写webpack4配置来启动vue2项目(附配置作用)

基础目录结构以及各个文件的作用 初始npm项目 npm init 一路回车&#xff0c;一律使用默认的npm项目配置 package.json修改scripts 如下&#xff1a; {"name": "doing-a-webpack4-vue2-pro","version": "1.0.0","description&quo…

西方妖怪大百科(下)

中网新空气之军事天地本文版权归作者 maomi 和中网新空气共同拥有, 转贴请注明作者及出处如将本文用于媒体出版, 请与作者本人联系文章标题&#xff1a; 西方妖怪大百科&#xff08;下&#xff09;——绝好的文章&#xff0c;看西方小说时碰到这方面的典故就不会疑惑了&#xf…

西方爵位的由来

中网新空气之军事天地本文版权归作者 maomi 和中网新空气共同拥有, 转贴请注明作者及出处如将本文用于媒体出版, 请与作者本人联系文章标题&#xff1a; 西方爵位的由来&#xff01;(确实是很好的史料&#xff0c;看西方古典小说不会迷惑了&#xff01;) (Zt)文章作者&#xff…

HEVC 中主要LCU分析函数xCompressCU说明

所有LCU都是通过调用xCompressCU来实现其CU/PU划分. 然后通过其结果再调用 TEncCu::xencodeCU 函数来实现对所有CUs进行压缩编码. xCompressCU大体可分为一下三块. Void TEncCu::xCompressCU(){ //第一块 for (Int iQPiMinQP; iQP<iMaxQP; iQP)// do inter modes, SKI…