XSS和CSRF两种攻击方式

2023-12-20 13:10
文章标签 两种 xss csrf 攻击方式

本文主要是介绍XSS和CSRF两种攻击方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是xss攻击

Cross-Site Scripting(跨站脚本攻击),简称XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如Cookie、SessionID等,进而危害数据安全。

xss攻击的本质是将数据注入到静态代码中(如html和js等),当浏览器渲染html时就会触发注入的脚本引发xss攻击。

xss攻击产生的原因是对用户的输入过滤不严格,在能够同用户实现交互的地方更容易发现xss漏洞。

如何注入xss攻击

  • 在HTML内嵌的文本中,恶意内容以script标签形成注入
  • 在内联的JavaScript中,拼接的数据突破了原本的限制(字符串,变量,方法名)等
  • 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签
  • 在标签的 href、src 等属性中,包含 javascript: (伪协议)等可执行代码
  • 在 onload、onerror、onclick 等事件中,注入不受控制代码
    总之,任何可以输入的地方都可能引起xss攻击

xss攻击的分类

根据攻击来源xss攻击可以分为三类

反射性xss
什么是反射性xss

反射型XXS是一种非持久性的攻击,它指的是恶意攻击者往Web页面里插入恶意代码,当用户浏览该页时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的目的。这里插入的恶意代码并没有保存在目标网站,需要引诱用户点击一个链接到目标网站的恶意链接来实施攻击。

反射性xss攻击的步骤
  • 攻击者构造特殊的URL(包含了恶意代码)
  • 用户打开带有恶意代码的URL之后,服务端将恶意代码取出来,拼接在html中返回给浏览器
  • 用户浏览器收到响应后解析执行,恶意代码也被执行
  • 恶意代码窃取用户的信息发到攻击者网站或者冒充用户做攻击者的目标行为
存储性xss
什么是存储性xss攻击

存储型xss是一种持久性攻击,存储型xss就是攻击者的恶意代码会保存到服务器中,比如留言板评论区这种公共区域,当其他用户访问存储有恶意代码的页面时就会触发恶意代码。存储型和反射性xss的区别在于,反射性xss需要用户点击恶意链接才能执行代码,而存储型xss是不需要访问合法网站以外的任何链接的。

存储性xss攻击的步骤
  • 攻击者将恶意代码提交到目标网站的数据库
  • 用户打开目标网站,服务端将恶意代码从数据库中取出拼接在html中返回给浏览器
  • 用户浏览器收到响应后解析执行,恶意代码也被执行
  • 恶意代码窃取用户的信息发到攻击者网站或者冒充用户做攻击者的目标行为
DOM型xss
什么是DOM型攻击

务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型

DOM型攻击的步骤
  • 攻击者构造出特殊的 URL,其中包含恶意代码。
  • 用户打开含有恶意代码的目标网站
  • 用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行
  • 恶意代码窃取用户的信息发到攻击者网站或者冒充用户做攻击者的目标行为

DOM型xss攻击和反射性xss攻击、存储性攻击的区别是:DOM型xss攻击属于前端自身的安全漏洞,其他两种属于是服务端安全漏洞。

三种xss攻击的简单对比
类型存储区插入点安全漏洞类型
反射型URLHTML后端漏洞
存储性后端数据库HTML后端漏洞
DOM型后端数据库;前端存储;URLJavaScript前端漏洞

如何防御xss攻击

  • httpOnly:在cookie中设置HttpOnly属性后,js脚本将无法读取到cookie信息
  • 使用 XSS Filter:针对用户提交的数据进行有效的验证,只接受我们规定的长度或内容的提交,过滤掉其他的输入内容
  • 转义HTML:如果拼接 HTML 是必要的,就需要对于引号,尖括号,斜杠进行转义,并且对 HTML 模板各处插入点进行充分的转义,就需要采用合适的转义库

什么是CSRF攻击

Cross-site request forgery(跨站请求伪造),是一种挟持用户在当前已登陆的Web应用程序上执行非本意的操作的攻击方法。如:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

CSRF攻击的原理

  • 用户打开浏览器,访问安全网站A,输入用户名和密码请求登录网站A
  • 在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录A成功,可以正常发送请求到网站A。
  • 用户没有退出A之前,在同一个浏览器中,打开一个Tab页面来访问网站B
  • 网站B接收到用户的请求后,返回一些攻击代码,并且发出一个请求要求访问第三方站点A
  • 浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发出的,所以会根据用户C的cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

具体流程看下图:
在这里插入图片描述

CSRF的特点

  • 由第三方网站发起攻击
  • 利用被攻击这的登录凭证,冒充被攻击者,不会直接盗取数据
  • 攻击者仅仅是冒用被攻击者的登录凭证
  • 跨站请求可以通过form表单,cors,URL等,也可以直接嵌入第三方论坛,很难追踪

如何防御CSRF攻击

  • 验证 HTTP Referer 字段:根据 HTTP 协议,在 HTTP 头中有一个字段叫 Referer,它记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站。这种方法简单易实行,但是也有漏洞,因为referer会记录用户的访问来源,很多用户认为会泄露隐私,很多企业也怕内网信息泄露到外网。
  • 在请求地址中添加 token 并验证:CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中,因此黑客可以在不知道这些验证信息的情况下直接利用用户自己的 cookie 来通过安全验证。要抵御 CSRF,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于 cookie 之中。可以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
  • 在 HTTP 头中自定义属性并验证:这种方法也是使用 token 并进行验证,和上一种方法不同的是,这里并不是把 token 以参数的形式置于 HTTP 请求之中,而是把它放到 HTTP 头中自定义的属性里。通过 XMLHttpRequest 这个类,可以一次性给所有该类请求加上 csrftoken 这个 HTTP 头属性,并把 token 值放入其中。这样解决了上种方法在请求中加入 token 的不便,同时,通过 XMLHttpRequest 请求的地址不会被记录到浏览器的地址栏,也不用担心 token 会透过 Referer 泄露到其他网站中去。

xss和CSRF的区别

  • CSRF由xss实现的
  • CSRF是http问题,xss是代码注入问题

这篇关于XSS和CSRF两种攻击方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/516168

相关文章

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

c++11工厂子类实现自注册的两种方法

文章目录 一、产品类构建1. 猫基类与各品种猫子类2.狗基类与各品种狗子类 二、工厂类构建三、客户端使用switch-case实现调用不同工厂子类四、自注册方法一:公开注册函数显式注册五、自注册方法二:构造函数隐形注册总结 一、产品类构建 1. 猫基类与各品种猫子类 class Cat {public:virtual void Printer() = 0;};class

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c

Java构造和解析Json数据的两种方法(json-lib构造和解析Json数据, org.json构造和解析Json数据)

在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍       JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转换的包,主要就是用来解析Json

Web安全之XSS跨站脚本攻击:如何预防及解决

1. 什么是XSS注入 XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的Web安全漏洞,通过注入恶意代码(通常是JavaScript)到目标网站的网页中,以此在用户浏览网页时执行。攻击者可以通过XSS获取用户的敏感信息(如Cookie、会话令牌)或控制用户浏览器的行为,进而造成信息泄露、身份冒用等严重后果。 2. XSS攻击类型 2.1 存储型XSS 存储型XS

【前端安全】浅谈XSS攻击和防范

定义 XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 分类 大分类小分类原理非存储DOM型① 不需要经过服务器

苹果账号登录后端验证两种方式 python2

import jsonimport jwt import requests import json import base64def decode_jwt(jwt_token):try:header,payload,sign = jwt_token.split('.')except:return {},{},""header = json.loads(base64.urlsafe_b6

Python(TensorFlow和PyTorch)两种显微镜成像重建算法模型(显微镜学)

🎯要点 🎯受激发射损耗显微镜算法模型:🖊恢复嘈杂二维和三维图像 | 🖊模型架构:恢复上下文信息和超分辨率图像 | 🖊使用嘈杂和高信噪比的图像训练模型 | 🖊准备半合成训练集 | 🖊优化沙邦尼尔损失和边缘损失 | 🖊使用峰值信噪比、归一化均方误差和多尺度结构相似性指数量化结果 | 🎯训练荧光显微镜模型和对抗网络图形转换模型 🍪语言内容分比 🍇Python图像归一化

【matlab 圆周率计算】matlab 求圆周率的两种算法实现比较

%author:laidefa %data:2014-09-19 %丘德诺夫斯基公式求圆周率 function mpi=qdnfsj(m) i=m; s=13591409; for n=1:i A=(factorial(6n)(13591409+54514013n))/(factorial(3n)factorial(n)3*(-640320)(3n)); s=s+A; end mpi=(42688