前端大厂面试题探索编辑部——第一期
目录
简介
题目
单选题
题解
A选项的Content-Security-Policy
http-equiv属性
content属性
B选项的CSRF
使用CSRF Token
验证Referer和Origin头
C选项的HTTP Only
D选项的防止SQL注入
输入验证和转义
简介
这个是一个长系列,我会以题目为导向,通过题目来针对性的学习前端的方方面面,每篇文章涉及到的题目并不多,但是每道题我都会尽量细致,面向初学者友好的去讲解,喜欢的可以一直关注,我会持续更新这个系列的文章。
题目
单选题
1.关于前端安全,以下说法正确的是()
A. XSS(跨站脚本攻击)可以通过设置HTTP响应头的Content-Security-Policy为none来防止。
B. CSRF(跨站请求伪造)攻击可以通过移除所有的cookie来防止。
C. HTTP Only属性可以防止通过JavaScript访问cookie,从而减少XSS攻击的风险。
D. 输入验证和转义是防止SQL注入的无效方式。
题解
答案选C,我们逐个解释,我们尽量讲解的细致一些,面向初学者友好一些,而且我们尽量有代码示例就用代码来解释。
A选项的Content-Security-Policy
设置HTTP的响应头的Content-Security-Policy为none,并不是防止XSS攻击的有效正确方式。相反,Content-Security-Policy反而是可以有效防止XSS的攻击。XSS,是一种网站应用程序的安全漏洞攻击,是代码注入的一种。 HTTP概括来讲,就是万维网的数据通信的基础。而Content-Security-Policy,以后我简称为CSP,CSP是HTTP的一个响应头,它不是对象,属性或者方法,而是一种服务器发送的指令。 我们在HTML文件中,<head>标签下会有一个<meta>标签,在这个标签下,我们可以对于http-equiv设置一个配置性的命令,即CSP,它可以告诉浏览器如何处理一个网页的内容。
<!DOCTYPE html>
<html lang="en">
<head> <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';"> <meta charset="UTF-8"> <title>Title</title>
</head>
<body> </body>
</html>
http-equiv属性
http-equiv属性的作用是模拟HTTP响应头部的效果,这里我们设置为CSP,就是它指令的一种,而CSP的作用就是有效防止XSS的攻击
content属性
- content属性用于定义与name属性和http-equiv属性相关的值,它可以设置很多相关的命令,这个例子就是一个典型的样式
- default-src 'self指令设置了所有类型资源的默认策略,我们一般都是这样设置的,这里的资源就是比如脚本、样式、图片和字体等等。
- img-src https://指令用于指定哪些来源的图片可以被加载,我们设置为这个命令,意味着我们可以在任何使用HTTPS协议的来源,来去加载图片
- child-src 'none',也是一个属性,我们设置为none,表示不允许从任何源加载这类内容,这里的内容我们说的是要嵌入的内容,比如iframe/embed/object这些元素
回到题目本身,其实那么我们到底如何做到A选项说的,如何防止XSS呢?完整的代码是这样的,但是,概括来讲,正确配置Content-Security-Policy(如限制资源的加载和执行来源)可以有效防止XSS攻击,A说法说反了。
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self' https://trustedscript.com;connect-src 'self';img-src 'self' https://trustedimagehost.com;style-src 'self' 'unsafe-inline';font-src 'self';object-src 'none';frame-ancestors 'none';base-uri 'self';
">
B选项的CSRF
移除所有的cookie并不是防止CSRF攻击的有效方法,Cross-Site Request Forgery,全称为这个,为跨站请求伪造,简单来说,是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站,并执行一些操作。
什么是cookie呢?全称为HTTP cookie,我们在浏览一些国外网站的时候,可能会遇到这个选项,是我们在浏览网站时,网络服务器创建的,并通过网页浏览器存放在用户计算机的小文本文件,即cookie就是一些小文件。移除所有的cookie并不能防止CSRF攻击。要通过CSRF攻击的常见方式,来阻止,比如使用CSRF Token,或者验证Referer和Origin头,下面逐一介绍。
B选项说的,移除所有的cookie,这个操作本身和有效防止CSRF并没有直接关系,CSRF攻击的是什么?它攻击的是用户当前的登录状态,cookie这些小文件更多的是比如购物车信息,会话标识符,跟踪和分析信息等。
使用CSRF Token
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>CSRF的阻止方式一</title>
</head>
<body>
<form action="/submit-form" method="post"><input type="hidden" name="csrf_token" value="your_csrf_token_here"><!-- 其他表单字段 --><input type="submit" value="Submit">
</form>
</body>
</html>
这是一份使用CSRF Token方式的一份代码,这里的value,我们要根据实际情况来定,是服务器生成的唯一随机,并且不可预测的CSRF令牌(token)。
验证Referer和Origin头
const express = require('express');
const app = express();
app.use((req, res, next) => {const referer = req.headers.referer;const origin = req.headers.origin;
// 检查Referer或Origin是否合法if (referer !== 'https://expected-referer.com' && origin !== 'https://expected-origin.com') {return res.status(403).send('CSRF check failed');}
next();
});
app.post('/submit-form', (req, res) => {// 处理表单提交res.send('Form data received');
});
app.listen(3000);
这是通过验证referer和origin头的方式,我们可以在node.js环境下写这样的JavaScript代码,同时满足这两个条件,我们就把参数res的状态设置为403,再send一下信息:CSRF check failed。
C选项的HTTP Only
HTTP Only属性确实可以防止通过JavaScript访问, 减少XSS攻击的风险,前面已经说了cookie是什么?下面来看看完整代码,来看看我们是如何做的。首先确保你的计算机已经安装了node.js和express,如果没有express,我们可以通过npm install express指令来安装。
const express = require('express');
const app = express();
app.use((req, res, next) => {const referer = req.headers.referer;const origin = req.headers.origin;
// 检查Referer或Origin是否合法if (referer !== 'https://expected-referer.com' && origin !== 'https://expected-origin.com') {return res.status(403).send('CSRF check failed');}
next();
});
app.post('/submit-form', (req, res) => {// 处理表单提交res.send('Form data received');
});
app.listen(3000);
当我们访问服务器的根目录'/'的时候,它会设置一个名为secureCookie的Cookie,我们把httpOnly属性设置为true,即使用HTTP Only属性,增强了cookie的安全性。
D选项的防止SQL注入
D说法也是,说反了,我们确实是可以通过输入验证和转义,来防止SQL注入的。什么是SQL注入?SQL注入也是一种常见的网络攻击技术,攻击者通过恶意SQL代码注入到应用程序的输入字段中,试图破坏或者操纵后台数据库。比如攻击者可以写一些这样的语句。
SELECT * FROM users WHERE username = '[用户输入的用户名]' AND password = '[用户输入的密码]';
输入验证和转义
输入验证和转义是两种基本的安全措施,它可以防止很多不同形式的注入攻击,包括SQL注入。比如我们可以写这样的代码。转义,说的是什么事呢?就是指输入数据可能会被错误的解释为代码的特殊字符进行处理的过程,我们通过转义来确保输入字符串中特殊字符,比如单引号,不会结束字符串文本,并且开始新的SQL命令。
app.post('/submit-form', (req, res) => {const email = req.body.email;const age = req.body.age;
// 验证电子邮件地址if (!email.match(/^[^@]+@[^@]+\.[^@]+$/)) {return res.status(400).send('无效的电子邮件地址');}
// 验证年龄if (isNaN(age) || age < 18 || age > 100) {return res.status(400).send('无效的年龄');}
// 处理有效输入// ...
});
这里的if当中的部分即是这种方式的体现。当然,还有很多,比如类型检查,格式验证,长度验证,内容检查等等。
相关文章:
前端大厂面试题探索编辑部——第一期
目录 简介 题目 单选题 题解 A选项的Content-Security-Policy http-equiv属性 content属性 B选项的CSRF 使用CSRF Token 验证Referer和Origin头 C选项的HTTP Only D选项的防止SQL注入 输入验证和转义 简介 这个是一个长系列,我会以题目为导向ÿ…...
图扑 HT UI 5.0 全新升级,开箱即用!
为顺应数字时代的不断发展,图扑 HT UI 5.0 在原有功能强大的界面组件库的基础上进行了全面升级,融入了更先进的技术、创新的设计理念以及更加智能的功能。HT UI 5.0 使用户体验更为直观、个性化,并在性能、稳定性和安全性等方面达到新的高度。…...
数据结构----链表介绍、模拟实现链表、链表的使用
文章目录 1. ArrayList存在的问题2. 链表定义2.1 链表的概念及结构2.2 链表的组合类型 3. 链表的实现3.1 单向、不带头、非循环链表的实现3.2 双向、不带头节点、非循环链表的实现 4.LinkedList的使用4.1 什么是LinkedList4.2 LinkedList的使用4.2.1. LinkedList的构造4.2.2. L…...
微信小程序如何控制元素的显示和隐藏
目录 方式一:display 方式二:wx:if 有时在微信小程序元素的显示需要通过特定的条件,比如组件的显示,通常需要在主界面有指定操作。可以通过以下两种方式控制元素的显示和隐藏。 方式一:display 在wxml或者wxss中设置display样式可以控制元素显示情况,元素默认显示,可…...
解决ssh: connect to host github.com port 22: Connection timed out
当连接 GitHub 时无法连接到 22 端口时,可以尝试将端口更换为 443 首先,尝试使用以下命令从 GitHub 克隆仓库: $ git clone gitgithub.com:xxxxx/xxxx.git my-awesome-proj如果出现以下错误信息: Cloning into my-awesome-proj…...
idea 创建 spring boot
1.创建步骤 2. 编码添加 2.1 这是自动生成的启动函数 package com.example.comxjctest4;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class Application {publi…...
【智能家居入门之微信小程序控制下位机】(STM32、ONENET云平台、微信小程序、HTTP协议)
实现微信小程序控制单片机外设动作 一、使用ONENET可视化组件控制单片机外设动作二、使用微信小程序控制单片机外设动作三、总结 本篇博客话接上文: https://blog.csdn.net/m0_71523511/article/details/135892908 上一篇博客实现了微信小程序接收单片机上传的数据…...
07.领域驱动设计:了解3种常见微服务架构模型的对比和分析
目录 1、概述 2、整洁架构 3、六边形架构 4、三种微服务架构模型的对比和分析 5、从三种架构模型看中台和微服务设计 5.1 中台建设要聚焦领域模型 5.2 微服务要有合理的架构分层 5.2.1 项目级微服务 5.2.2 企业级中台微服务 5.3 应用和资源的解耦与适配 6、总结 1、概…...
设计模式——模板方法模式(Template Method Pattern)
概述 模板方法模式:定义一个操作中算法的框架,而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术,它是一种类行为型模式。模板方法模式是结…...
07. STP的基本配置
文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则(1)选择根桥网桥原则(2)选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…...
oracle分区范围修改与数据迁移处理
背景 由于对应用上线后流量越来越大,原来的按年自动分区性能跟不上,因此决定改成按月自动分区,同时将原有分区数据重新迁移到新的分区 步骤 修改表分区为一个月一个分区 alter table my_table set INTERVAL (NUMTOYMINTERVAL(1, month));…...
回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测
回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测 目录 回归预测 | Matlab实现CPO-LSSVM【24年新算法】冠豪猪优化最小二乘支持向量机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-LSSVM【24年…...
SeaTunnel Web安装 一把成
安装相关jar包,以及SeaTunnel 和Web 打成的包,可以直接使用,但是需要安装MySQL客户端的分享: 链接:https://pan.baidu.com/s/1qrt1RAX38SgIpNklbQJ7pA 提取码:0kmf 1. 环境准备 环境名称版本系统环境C…...
对话泛能网程路:能源产业互联网,行至中程
泛能网的能源产业互联网的标杆价值还不仅于此。其在产业互联之外,也更大的特殊性在于其也更在成为整个碳市场的“辅助运营商”,包括电力、碳等一系列被泛能网帮助企业改造和沉淀的要素资产,都在构成着碳交易市场的未来底层。 这恰是产业互联…...
Doris简介及单机部署(超详细)
文章目录 一、Doris简介1、Doris介绍2、Doris架构 二、Doris单机部署(Centos7.9)1、下载Doris2、准备环境3、安装部署3.1 创建存储目录3.2 配置 FE3.3 启动 FE3.4 查看 FE 运行状态3.5 配置 BE3.6 启动 BE3.7 添加 BE 节点到集群3.8 查看 BE 运行状态3.9…...
Pytest 识别case规则
一、Python测试框架,主要特点有以下几点: 简单灵活,容易上手;支持参数化;能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytestrequests…...
gorm+mysql查询/修改json列相关操作汇总
目录 具体操作 1,查询JSON段落指定key的值是否有等于value的 或 指定keyvalue的数据记录 2,查询JSON段落中price>19的记录 3,查询JSON段中key为k0的记录 4、JSON段落中提取指定键值对到指定结构 5,查询JSON数组是否包含…...
CMake-Cookbook 第0章 配置环境
文章目录 第0章 配置环境0.1 获取代码0.2 Docker镜像0.3 安装必要的软件0.3.1 获取CMake0.3.2 编译器0.3.3 自动化构建工具0.3.4 Python0.3.5 依赖软件0.3.5.1 BLAS和LAPACk0.3.5.2 消息传递接口(MPI)0.3.5.3 线性代数模板库0.3.5.4 Boost库0.3.5.5 交叉编译器0.3.5.6 ZeroMQ, …...
优质硬盘检测工具SMART Utility,保障您的Mac数据安全
在日常使用Mac电脑的过程中,我们经常会存储大量的重要数据,如照片、文档、视频等。然而,硬盘故障却是一件令人头疼的事情,可能会导致数据丢失、系统崩溃等严重后果。为了保障您的数据安全,我们推荐一款专业的硬盘检测工…...
Spring: alibaba代码规范校验工具checkstyle
文章目录 一、idea配置checkstyle插件二、激活CheckStyle三、配置自动格式化功能四、使用代码格式化 一、idea配置checkstyle插件 下载 Intellij IDEA Checkstyle 插件:File -> setting -> plugin通过关键字CheckStyle-IDEA搜索并安装。 安裝完成后重启idea…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
