当前位置: 首页 > news >正文

2024 高级前端面试题之 前端安全模块 「精选篇」

该内容主要整理关于 前端安全模块 的相关面试题,其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。

前端安全模块精选篇

  • 1. 代码注入XSS
        • 如何攻击
        • 如何防御
        • cookie 如何防范 XSS 攻击
  • 2. 跨站请求伪造CSRF
  • 3. 浏览器同源策略 SOP
  • 4. 跨域资源共享 CORS
  • 5. 密码安全


1. 代码注入XSS

跨网站指令码(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及使用者端脚本语言

XSS 分为三种:反射型,存储型和 DOM-based

如何攻击

XSS 通过修改 HTML 节点或者执行 JS代码来攻击网站。
例如通过 URL 获取某些参数

<!-- http://www.domain.com?name=<script>alert(1)</script> -->
<div>{{name}}</div>    

上述 URL 输入可能会将 HTML 改为 <div><script>alert(1)</script></div> ,这样页面中就凭空多了一段可执行脚本。这种攻击类型是反射型攻击,也可以说是 DOM-based 攻击

如何防御
  1. 最普遍的做法是转义输入输出的内容,对于引号,尖括号,斜杠进行转义

    function escape(str) {str = str.replace(/&/g, "&amp;");str = str.replace(/</g, "&lt;");str = str.replace(/>/g, "&gt;");str = str.replace(/"/g, "&quto;");str = str.replace(/'/g, "&##39;");str = str.replace(/`/g, "&##96;");str = str.replace(/\//g, "&##x2F;");return str
    }
    
  2. 通过转义可以将攻击代码 <script>alert(1)</script> 变成字符串

    // -> &lt;script&gt;alert(1)&lt;&##x2F;script&gt;
    escape('<script>alert(1)</script>')
    
  3. 对于显示富文本来说,不能通过上面的办法来转义所有字符,因为这样会把需要的格式也过滤掉。这种情况通常采用白名单过滤的办法,当然也可以通过黑名单过滤,但是考虑到需要过滤的标签和标签属性实在太多,更加推荐使用白名单的方式

    var xss = require("xss");
    var html = xss('<h1 id="title">XSS Demo</h1><script>alert("xss");</script>');
    // -> <h1>XSS Demo</h1>&lt;script&gt;alert("xss");&lt;/script&gt;
    console.log(html);
    

    以上示例使用了 js-xss 来实现。可以看到在输出中保留了 h1 标签且过滤了 script 标签

cookie 如何防范 XSS 攻击

XSS (跨站脚本攻击)是指攻击者在返回的 HTML 中嵌入 javascript 脚本,为了减轻这些 攻击,需要在 HTTP 头部配上,set-cookie

  • httpOnly 这个属性可以防止 XSS,它会禁止 javascript 脚本来访问 cookie
  • secure- 这个属性告诉浏览器仅在请求为 https 的时候发送 cookie

2. 跨站请求伪造CSRF

  • CSRF 就是利用用户的登录态发起恶意请求
  • CSRF(Cross-site request forgery) 跨站请求伪造,是一种常见的攻击方式。是指 A 网站正常登陆后,cookie 正常保存登录信息,其他网站 B 通过某种方式调用 A 网站接口进行操作,A 的接口会在请求时会自动带上 cookie。
  • 同源策略可以通过 html 标签加载资源,而且同源策略不阻止接口请求而是拦截请求结果,CSRF 恰恰占了这两个便宜。

  • 对于 GET 请求,直接放到 <img> 就能神不知鬼不觉地请求跨域接口。

  • 对于 POST 请求,很多例子都使用 form 提交:

    👇 例子

    <form action="<nowiki>http://bank.com/transfer.do</nowiki>" method="POST"><input type="hidden" name="acct" value="MARIA" /><input type="hidden" name="amount" value="100000" /><input type="submit" value="View my pictures" />
    </form>
    

浏览器同源策略不能作为防范 CSRF 的方法
浏览器允许这么做,归根到底就是因为你 无法用 js 直接操作获得的结果

  • CSRF怎么获取用户的登录态
  • cookie通常是不能跨域访问的,那为什么会有CSRF攻击
  • 总结

3. 浏览器同源策略 SOP

  • 3.1 同源
  • 3.2 限制
  • 3.3 绕过跨域
  • 3.4 浏览器同源策略与ajax

4. 跨域资源共享 CORS

  • 4.1 简单请求
  • 4.2 预检请求
  • 4.3 CORS 与 cookie

5. 密码安全

http://www.lryc.cn/news/295199.html

相关文章:

  • SpringBoot Security安全认证框架初始化流程认证流程之源码分析
  • 2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测
  • test1
  • 远程主机可能不符合 glibc 和 libstdc++ Vs Code 服务器的先决条件
  • 备战蓝桥杯---数据结构与STL应用(进阶2)
  • SpringBoot:多环境配置
  • input框中添加一个 X(关闭/清空按钮)
  • Unity3d Shader篇(三)— 片元半兰伯特着色器解析
  • 【vue3学习P5-P10】vue3语法;vue响应式实现
  • 相机图像质量研究(3)图像质量测试介绍
  • PaddleDetection学习5——使用Paddle-Lite在 Android 上实现实时的人脸检测(C++)
  • 全套电气自动化样例图纸分享,使用SuperWorks自动化版免费设计软件!
  • 带你实现用自己域名打开Tomcat
  • python coding with ChatGPT 打卡第18天| 二叉树:从中序与后序遍历序列构造二叉树、最大二叉树
  • java基础训练题(1)
  • 【自定义序列化器】⭐️通过继承JsonSerializer和实现WebMvcConfigurer类完成自定义序列化
  • 闲聊电脑(5)装个 Windows(一)
  • 力扣(leetcode)第414题第三大的数(Python)
  • 使用wda框架实现IOS自动化测试详解
  • LeetCode--代码详解 2.两数相加
  • 【Django开发】美多商城项目第3篇:用户注册和图片验证码开发(附代码,文档已分享)
  • 代码随想录算法训练营DAY10 | 栈与队列 (1)
  • flinkjar开发 自定义函数
  • Golang 学习(一)基础知识
  • C++学习:string的了解
  • Webpack源码浅析
  • Hadoop:HDFS学习巩固——基础习题及编程实战
  • SASS 官方文档速通
  • 《动手学深度学习(PyTorch版)》笔记7.4
  • 关于自动驾驶概念的学习和一些理解