首页 > 其他分享 >web安全 - xss攻击与防御

web安全 - xss攻击与防御

时间:2022-08-22 20:33:37浏览次数:62  
标签:web 浏览器 xss 恶意代码 用户 恶意 防御 攻击者

xss(Cross-Site Scripting), 跨站脚本攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。
利用恶意脚本攻击者可以获取用户的敏感信息,Cookie, SessionID等,进而危害数据安全。

1. xss 类型

1. 存储型xss: 恶意脚本来源于数据库

由于恶意代码存储在服务器的数据库中具有持久性和稳定性。

  • 攻击步骤
  1. 攻击者将恶意代码提交到目标网站的数据库中。
  2. 用户打开目标网站时,网站服务端将恶意代码从数据库取出,拼接在HTML中返回给浏览器执行。
  3. 用户浏览器接收到响应后解析执行,拼接在其中的恶意代码也同时被执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行恶意操作。

2. 反射型xss: 恶意脚本来源于受害者的主动请求的URL

攻击者往往通过构造恶意URL链接,诱导用户点击,被攻击网站则将恶意代码返回到浏览器从而执行。

  • 攻击步骤
  1. 攻击者构造出特殊的URL,其中包含恶意代码。
  2. 用户打开带有恶意代码的URL时,网站服务端将恶意代码从URL中取出,拼接在HTML中返回给浏览器。
  3. 用户浏览器接收到响应后执行,混在其中的恶意代码也同时被执行。
  4. 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行恶意操作。

3. Dom xss: 由于前端代码通过修改Dom节点导致恶意代码的执行

2. xss漏洞利用

  • cookie 劫持
  • 构造GET与POST请求
  • xss钓鱼
  • 识别用户浏览器
  • 识别用户安装的软件
  • 识别用户访问过的链接
  • 获取用户的真实IP地址
  • xss 蠕虫

3. xss 防御

  1. 服务端设置Set-Cookie 时添加HttpOnly, 从而禁止客户端脚本读取cookie,防范cookie被劫持。
  2. 输入检查,设置输入白名单,禁止输入恶意危险字符。 (必须在服务端进行输入检查,
    客户端输入检查容易被绕过)
  3. 输出编码和转义,结合具体的输出上下文环境利用合适的编码函数进行输出前的编码和转义,
    从而防止恶意代码被执行。对于存储型xss 和反射性xss在服务端输出时进行编码,对于Dom 型xss
    在客户端进行编码。

4. 正确地防御xss

xss 本质是一种"html注入", 用户的数据被当成了HTML代码一部分来执行,从而混淆了原本的语义。

  • 在HTML标签中输出时 (HTMLEncode)
<div>$var</div>
<a href="#">$var</a>

构造xss如下

<div><script>alert('xss')</script></div>
<a href="#"><img src="#" one rror="alert(1)" /></a>
  • 在HTML属性中输出 (HTMLEncode)
<div id="abc" name="$var" ></div>

构造xss:

<div id="abc" name=" "><script>alert(/xss/)<script><" ">/div>
  • <script>标签中输出 (JavascriptEncode)
<script>
var x = "$var";
</script>

构造xss:

<script>
var x = "";alert(/xss/);//";
</script>
  • 在事件中输出 (JavascriptEncode)
<a href="#" onclick="funcA('$var')">test</a>
构造xss:

<a href="#" onclick="funcA(' ');alert(/xss/);//')" >test</a>

- 在css中输出 (ESAPI.encoder().encodeForCSS())
``` 由于在css中形成xss的多样化,尽量避免在"

标签:web,浏览器,xss,恶意代码,用户,恶意,防御,攻击者
From: https://www.cnblogs.com/xiaodi-js/p/16614163.html

相关文章

  • 浏览器数据库IndexedDB和前端多线程webWorker在3D场景中的实战应用
    背景1.IndexedDB就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。2.在3D场景中模型数据很大,有可能存在数十万级的数据存储,大量数据存储在内存中会很容易导致内......
  • purgecss-webpack-plugin 遇到css 模块化后排除的解决方案
    purgecss-webpack-plugin 的作用是在webpack打包的时候排除没用到的css样式,这里如果在css上设置了模块化 module就会导致module的样式在打包的时候被排除,尽管它会有被......
  • Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.
    maven构建报错:Causedby:org.apache.maven.plugin.MojoExecutionException:ErrorassemblingWAR:webxmlattributeisrequired(orpre-existingWEB-INF/web.xmli......
  • unity打包webgl
    tip:本文unity使用2021版本选择文件->生成设置,如图1所示;图1:弹出“构建设置对话框”,如图2所示;点击图中2位置中的“添加已打开场景”按钮,添加需要打包的场景。点击图中1......
  • docker 安装 datax和datax-web
    1、安装mysql安装步骤:https://www.cnblogs.com/leihongnu/p/16258505.html初始化数据库:datax_web_db 编辑导入数据vim datax_web.sql官网地址:https://github.com/We......
  • WebServer知识点梳理
    epollET模式(边缘触发)mysql(业务部分的内容)连接池(数据库)线程池日志定时器Reactor模式http大端序小端序互转hton读写缓冲区流程主线程监听连接主线程让epol......
  • 【Spring5学习笔记(5)】新特性与WebFlux:
    Spring5框架新功能1、整个Spring5框架的代码基于java8,运行时兼容JDK9,许多不建议使用的类和方法在代码库中删除2、spring5.0框架自带了通用的日志封装(1)Spring5.0已经移......
  • 过滤>符号,Linux下写入Webshell
    最近的学习生活中,看到了好兄弟写出的这么一句话让我陷入沉思,是否>被过滤,就意味着写入不了Webshell了?于是有了下面的Payload只要|没被过滤,就有可能写入成功!echo3c3f706......
  • IDEA 创建 Web 项目
    原文:IDEA2021.1创建JavaWeb项目。简单完善。IDEA2021.1点击next填写项目的名称以及位置,finish右键项目,选择addframeworksupport完成之后,项目结构......
  • webgl丢失上下文
    webgl丢失上下文一、原理WebGL使用了计算机的图形硬件,而这部分资源是被操作系统管理,由包括浏览器在内的多个应用程序共享。如果一个程序接管了图形硬件,或者操作系统......