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

前端大厂面试题探索编辑部——第一期

目录

简介

题目

单选题

题解

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注入 输入验证和转义 简介 这个是一个长系列&#xff0c;我会以题目为导向&#xff…...

图扑 HT UI 5.0 全新升级,开箱即用!

为顺应数字时代的不断发展&#xff0c;图扑 HT UI 5.0 在原有功能强大的界面组件库的基础上进行了全面升级&#xff0c;融入了更先进的技术、创新的设计理念以及更加智能的功能。HT UI 5.0 使用户体验更为直观、个性化&#xff0c;并在性能、稳定性和安全性等方面达到新的高度。…...

数据结构----链表介绍、模拟实现链表、链表的使用

文章目录 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 端口时&#xff0c;可以尝试将端口更换为 443 首先&#xff0c;尝试使用以下命令从 GitHub 克隆仓库&#xff1a; $ git clone gitgithub.com:xxxxx/xxxx.git my-awesome-proj如果出现以下错误信息&#xff1a; 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可视化组件控制单片机外设动作二、使用微信小程序控制单片机外设动作三、总结 本篇博客话接上文&#xff1a; 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)

概述 模板方法模式&#xff1a;定义一个操作中算法的框架&#xff0c;而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术&#xff0c;它是一种类行为型模式。模板方法模式是结…...

07. STP的基本配置

文章目录 一. 初识STP1.1. STP概述1.2. STP的出现1.3. STP的作用1.4. STP的专业术语1.5. BPDU的报文格式1.6. STP的选择原则&#xff08;1&#xff09;选择根桥网桥原则&#xff08;2&#xff09;选择根端口原则 1.7. 端口状态1.8. STP报文类型1.9. STP的收敛时间 二. 实验专题…...

oracle分区范围修改与数据迁移处理

背景 由于对应用上线后流量越来越大&#xff0c;原来的按年自动分区性能跟不上&#xff0c;因此决定改成按月自动分区&#xff0c;同时将原有分区数据重新迁移到新的分区 步骤 修改表分区为一个月一个分区 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包&#xff0c;以及SeaTunnel 和Web 打成的包&#xff0c;可以直接使用&#xff0c;但是需要安装MySQL客户端的分享&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1qrt1RAX38SgIpNklbQJ7pA 提取码&#xff1a;0kmf 1. 环境准备 环境名称版本系统环境C…...

对话泛能网程路:能源产业互联网,行至中程

泛能网的能源产业互联网的标杆价值还不仅于此。其在产业互联之外&#xff0c;也更大的特殊性在于其也更在成为整个碳市场的“辅助运营商”&#xff0c;包括电力、碳等一系列被泛能网帮助企业改造和沉淀的要素资产&#xff0c;都在构成着碳交易市场的未来底层。 这恰是产业互联…...

Doris简介及单机部署(超详细)

文章目录 一、Doris简介1、Doris介绍2、Doris架构 二、Doris单机部署&#xff08;Centos7.9&#xff09;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测试框架&#xff0c;主要特点有以下几点&#xff1a; 简单灵活&#xff0c;容易上手&#xff1b;支持参数化&#xff1b;能够支持简单的单元测试和复杂的功能测试&#xff0c;还可以用来做selenium/appnium等自动化测试、接口自动化测试&#xff08;pytestrequests…...

gorm+mysql查询/修改json列相关操作汇总

目录 具体操作 1&#xff0c;查询JSON段落指定key的值是否有等于value的 或 指定keyvalue的数据记录 2&#xff0c;查询JSON段落中price>19的记录 3&#xff0c;查询JSON段中key为k0的记录 4、JSON段落中提取指定键值对到指定结构 5&#xff0c;查询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电脑的过程中&#xff0c;我们经常会存储大量的重要数据&#xff0c;如照片、文档、视频等。然而&#xff0c;硬盘故障却是一件令人头疼的事情&#xff0c;可能会导致数据丢失、系统崩溃等严重后果。为了保障您的数据安全&#xff0c;我们推荐一款专业的硬盘检测工…...

Spring: alibaba代码规范校验工具checkstyle

文章目录 一、idea配置checkstyle插件二、激活CheckStyle三、配置自动格式化功能四、使用代码格式化 一、idea配置checkstyle插件 下载 Intellij IDEA Checkstyle 插件&#xff1a;File -> setting -> plugin通过关键字CheckStyle-IDEA搜索并安装。 安裝完成后重启idea…...

c++线程thread示例

本文章记录c创建线程&#xff0c;启动线程和结束线程的代码。 需要注意&#xff0c;编译时需要添加-lpthread依赖。 代码&#xff1a; ThreadTest.h #ifndef TEST_THREAD_TEST_H #define TEST_THREAD_TEST_H#include <thread> #include <mutex>class ThreadTes…...

Compose | UI组件(十一) | Spacer - 留白

文章目录 前言Spacer组件的参数说明Spacer组件的使用 总结 前言 Spacer组件是让两组件之间留有空白间隔 Spacer组件的参数说明 Spacer只有一个修饰符&#xff0c;修饰留空白的大小和比例&#xff0c;颜色 Spacer(modifier: Modifier)Spacer组件的使用 Row {Box(modifier M…...

PyTorch的nn.Module类的详细介绍

在PyTorch中&#xff0c;nn.Module 类是构建神经网络模型的基础类&#xff0c;所有自定义的层、模块或整个神经网络架构都需要继承自这个类。nn.Module 类提供了一系列属性和方法用于管理网络的结构和训练过程中的计算。 1. PyTorch中nn.Module基类的定义 在PyTorch中&#xff…...

python使用activemq库ActiveMQClient类的连接activemq并订阅、发送和接收消息

引入activemq模块&#xff1a;from activemq import ActiveMQClient from activemq import ActiveMQClient 是一个Python的导入语句&#xff0c;它从activemq模块中导入了ActiveMQClient类。 解释一下各个部分&#xff1a; from activemq: 这表示我们正在从一个名为activemq…...

【Flutter 面试题】Dart是什么?Dart和Flutter有什么关系?

【Flutter 面试题】Dart是什么&#xff1f;Dart和Flutter有什么关系&#xff1f; 文章目录 写在前面Dart是什么Dart和Flutter有什么关系&#xff1f; 写在前面 &#x1f44f;&#x1f3fb; 正在学 Flutter 的同学&#xff0c;你好&#xff01; &#x1f60a; 本专栏是解决 Fl…...

前后台分离跨域交互

后台处理跨域 安装插件 >: pip install django-cors-headers插件参考地址&#xff1a;https://github.com/ottoyiu/django-cors-headers/项目配置&#xff1a;dev.py # 注册app INSTALLED_APPS [...corsheaders, ]# 添加中间件 MIDDLEWARE [...corsheaders.middleware.…...

React16源码: React中处理LegacyContext相关的源码实现

LegacyContext 老的 contextAPI 也就是我们使用 childContextTypes 这种声明方式来从父节点为它的子树提供 context 内容的这么一种方式遗留的contextAPI 在 react 17 被彻底移除了&#xff0c;就无法使用了那么为什么要彻底移除这个contextAPI的使用方式呢&#xff1f;因为它…...

Boost.Test资源及示例

Note&#xff1a;boost_1_84_0的动态连接库资源链接 1.代码组织如下图&#xff1a; 2.包括程序入口的代码文件 示例&#xff1a; // M24.01.MyTestModule.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #define BOOST_TEST_MODULE MYTESTMODULE #def…...

数据结构二叉树

二叉树是数据结构中的一个基本概念&#xff0c;它是每个节点最多有两个子节点的树结构。在二叉树中&#xff0c;每个节点通常有两个指针&#xff0c;分别指向左子节点和右子节点。 数据结构定义 在二叉树的节点中&#xff0c;通常包含以下信息&#xff1a; 数据域&#xff1…...

JavaScript继承与原型链

继承和原型链是什么&#xff1f; 1.1 在继承中&#xff0c;子类继承父类的特征和行为&#xff0c;使得子类对象具有父类的实例域和方法。这意味着子类可以使用父类的方法和属性&#xff0c;使用继承的目的是为了更好设置实例的公共属性和方法&#xff0c;如下例子&#xff1a; …...