前端安全

2023-11-14

有哪些可能引起前端安全的问题?

跨站脚本攻击(Cross-Site Scripting,XSS):一种代码注入方式,为了与 CSS 区分所以被称为 XSS。早期常见于网络论坛,起因是网站没有对用户的输入进行严格的限制,使得攻击者可以将脚本上传到帖子让其他啊人在浏览到有恶意脚本的页面。其注入方式很简单,包括但不限于 JavaScript / VBScript / CSS / Flash 等;

iframe滥用:iframe 中的内容是由第三方来提供的,默认情况下它们不受我们控制,它们可以在 iframe 中运行 JavaScript 脚本、Flash 插件、弹出对话框等,这些可能会破坏前端用户的体验;

跨站请求伪造(Cross-Site Request Forgeries,CSRF):指攻击者通过设置好的陷阱,强制对于完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击;

恶意第三方库:无论开发服务端还是客户端,绝大多数时候我们都在借助开发框架和各种第三方工具库进行快速开发,一旦第三方库被植入恶意代码人容易引起安全问题。

XSS 攻击(跨站脚本攻击)
英文全称:Cross Site Script,XSS 攻击,通常指黑客通过 HTML 注入篡改了网页,插入恶意脚本,从而在用户浏览网页时,控制用户浏览器的一种行为

XSS分类
根据攻击的来源,XSS 攻击可分为存储型、反射型和 DOM型三种。
存储区:恶意代码存放的位置
插入点:由谁取得恶意代码,并插入到网站。

存储型XSS
原理:一般是攻击者输入的恶意代码存储在服务端,主要是将 XSS 代码发送到服务器(不管是数据库、内存还是文件系统),只要受害者浏览包含次恶意代码的网页就会执行恶意代码

存储型攻击步骤:
1. 攻击者将恶意代码提交到目标服务器中;
2. 用户打开目标网站时,网站服务器取出包含恶意代码的数据,拼接在 HTML 中返回给浏览器
3. 用户浏览器接收到相应后解析执行,混在其中的恶意代码也被执行;
4. 恶意代码窃取用户数据并发送到攻击者网站;或冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
这种攻击常见于带有用户保存数据的网站,比如论坛发帖、商品评论、用户私信等。

反射型XSS
原理:反射型 XSS,也叫非持久型 XSS,是指发生请求时,XSS 代码出现在请求 URL 中,作为参数提交到服务器中,服务器解析并响应。响应结果中包含 XSS 代码,最后浏览器解析并执行

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

反射型 XSS 漏洞常见于通过 URL 传参的功能,比如网站搜索、跳转等。
由于需要用户主动打开恶意的 URL 才能生效,因此攻击者往往会结合多种手段诱导用户点击。

DOM型XSS
原理:同以上反射型XSS 攻击一样。

DOM型攻击步骤:
1. 攻击者构造出特殊的 URL,其中包含恶意代码;
2. 用户打开带有恶意代码的 URL;
3. 用户浏览器接收到相应后解析执行,前端 js 取出 URL 中的恶意代码并执行;
4. 恶意代码窃取用户数据并发送到攻击者网站;或冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

DOM型XSS 和前两种 XSS 的区别:DOM型取出和执行恶意代码由浏览器完成,属于前端自身的安全漏洞;而其他两种则属于服务端的安全漏洞。

XSS防御
XSS 攻击有两大要素:
攻击者提交恶意代码;
浏览器执行恶意代码。

输入过滤
在用户提交时,由前端过滤输入,然后提交到后端,是否可行?

答案是 不可行。一旦攻击者绕过前端过滤,直接构造请求,这样就可以提交恶意代码了。

那换一个过滤时机:后端在写入数据库前进行过滤,然后把 安全的 内容返回给前端,是否可行?

答案是 不可行。因为,在写入数据库前进行输入过滤虽然可以过滤掉一部分内容,但是用户的使用场景是很复杂的,我们很难判断出内容会输出到哪里,一旦用户输入的内容经过了转码,客户端就需要进行反转码,而前端不同的位置所需要的编码也是不同的。因此输入侧过滤虽然能够在某些情况下解决 XSS 问题,但是会引入很大的不确定性和乱码问题,所以应当尽量避免使用这种方法。

当然,对于明确的输入类型,例如数字、URL、电话号码、邮件地址等内容,进行输入过滤还是必要的。

防止执行恶意代码
存储型和反射型XSS 都是在服务端取出恶意代码后,插入到响应 HTML 中,攻击者可以编写的 数据 被内嵌到 代码 中,被浏览器执行。

预防这两种漏洞,有两种常见的做法:
改成纯前端渲染,把代码和数据分隔开;
对 HTML 做充分转义

纯前端渲染
目前主流框架采用的 SPA 的方式,我们会明确告诉浏览器:下面要设置的内容是文本(.innerText),还是属性(.setAttribute),还是样式(.style)等等。浏览器不会轻易被欺骗,执行与其外的代码。
但纯前端渲染仍需要避免 DOM型 XSS攻击
在很多内部、管理系统中,纯前端渲染是非常合适的,但对于高性能要求,或者是有 seo 需求的页面,我们仍然要面对拼接 HTML 的问题。

转义 HTML
如果拼接 HTML 是必要的,就需要采用合适的转义库对 HTML 模版的各处插入点进行充分的转义。

常见的模版引擎有 ejs 等,对于 HTML 转义通常只有一个规则,就是把 & < > " ’ / 这几个字符转义掉。当然这确实可以起到一定的防护作用,但还不够完善。

预防 DOM型 XSS 攻击
在使用 .innerHTML、.outerHTML、document.write() 是要特别小心,不要把不可信的数据作为 HTML 插入到网页,尽量使用 .textContent、.setAttribute() 等。
如果是使用 Vue / React 时,不要使用 v-html / dangerouslySetInnerHTML ,在前端避免 innerHTML、outerHTML 的 XSS 隐患
另外,DOM 中的内联事件监听器,如 location、onclick、onerror、onload, 标签的 href 属性,JavaScript 的 eval()、setTimeout()、setInterval() 等都能把字符串作为代码运行,如果不可信的数据拼接到字符串中传递给这些 API,很容易产生安全隐患,务必谨慎使用。

其它 XSS 防范措施
虽然在渲染页面和执行 JavaScript 时,通过谨慎的转义可以防止 XSS 的发生,但完全依靠开发的谨慎仍然是不够的。
以下介绍一些通用的方案,可以降低 XSS 带来的风险和后果。

内容安全策略(Content Security Policy,CSP)
严格的 CSP 在 XSS 的防范中可以起到以下的作用:
1. 禁止加载外域代码,防止复杂的攻击逻辑;
2. 禁止外域提交,网站被攻击后,用户的数据不会泄漏到外域;
3. 禁止内联脚本执行;
4. 禁止未授权的脚本执行;
5. 合理使用上报可以及时发现 XSS,利于尽快修复问题。
可以使用以下两种方式开启内容安全策略:
HTTP Header 中的 Content-Security-Policy

输入内容长度控制
对于不受信任的输入,都应该先定一个合理的长度。虽然无法完全防止 XSS 的发生,但是可以增加 XSS 攻击的难度。
HttpOnly
对敏感的 cookie 设置 HttpOnly,禁止 JavaScript 访问这些信息,攻击者在完成 XSS 攻击后也无法窃取敏感信息。

CSRF攻击(跨站请求伪造)
CSRF(Cross-site request forgery)跨站请求伪造:攻击者又到受害者进入第三方网站,在第三方网站中向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

一个典型的 CSRF攻击流程如下:
1. 受害者登录网站A,保留了登录凭证(cookie);
2. 攻击者诱导受害者访问危险网站B;
3. 危险网站B向网站A发送一个正常的请求,浏览器会默认携带存放在网站A下的 cookie;
4. 网站A在接收到请求后,对请求进行验证,确认是受害者的凭证,误以为是受害者自己发送的请求;
5. 网站A以受害者的名义,执行了危险请求中请求的操作;

CSRF分类
GET 类型的 CSRF
GET 类型的 CSRF 实现方式非常简单,只需要一个普通的 HTTP 请求,一般会放在图片等资源里面,受害者在打开危险网站后,危险网站的图片加载就发出了一个危险的 GET 请求,这样就完成了一个 GET 类型的 CSRF 攻击。

POST 类型的 CSRF
这种方式通常会使用一个自动提交的表单。当访问该页面时,表单会自动提交,相当于模拟用户完成了一个 POST 操作。
POST 类型的攻击通常会比 GET 类型的更加严格一点,但仍并不复杂,所以后端的接口并不能将安全寄托在仅允许 POST 上面。

链接类型的 CSRF
这种方式并不常见,实现思路和 GET 类型一致,但是需要用户手动点击才能触发,因此攻击者通常会以广告的形式诱导用户中招。

CSRF防御
CSRF攻击通常发生在第三方网站,被攻击的网站无法防止攻击发生,只能提高自己的安全性。
CSRF的两个特点:
1. 发生在第三方域名;
2. 攻击者不能获取 cookie 信息,只能使用

针对这两点,我们可以专门指定防护策略:
阻止部名外域的访问
同源检测
Samesite Cookie
提交时要求附加本域才能获取的信息
Token
双重 Cookie 验证

同源检测
既然大多数 CSRF 都发生在第三方网站,那么我们就直接禁止外域对我们发起的请求:
1. 使用 Origin Header 确定来源域名:在部分与 CSRF 相关的请求中,请求头不会携带 Origin 字段,如果 Origin 字段存在则可以使用它来确定来源域名;
2. 使用 Referer Header 来确定来源域名:根据 HTTP 协议,在请求的头部会有一个 Referer 字段,记录了请求的来源地址。

CSRF Token
CSRF 的另一个特征是攻击者无法直接窃取用户的信息,仅仅是冒用而已。
而 CSRF 之所以能成功,是因为服务器误把攻击者发送的请求当成用户自己的请求。那么我们可以要求所有的用户请求都携带一个 CSRF 无法获取到的 Token,服务器判断 Token 是否正确,从而将正常的请求和攻击的请求区分开。

防护策略分为三个步骤:
1. 将 CSRF Token 输出到页面;
2. 页面提交的请求携带这个 Token;
3. 服务器验证 Token 是否正确。

双重 Cookie 验证
原理和 Token 相似,在请求接口时,在请求参数中附带上对应的 cookie,服务端在接收到请求时对参数中的 cookie 和 cookie 中的值进行对比判断是否为攻击请求。

Samesite Cookie 属性
Google起草了一份草案来改进HTTP协议,那就是为Set-Cookie响应头新增Samesite属性,它用来标明这个 Cookie是个“同站 Cookie”,同站Cookie只能作为第一方Cookie,不能作为第三方Cookie,Samesite 有两个属性值:
1. Samesite=Strict: 这种称为严格模式,表明这个 Cookie 在任何情况下都不可能作为第三方 Cookie
2. Samesite=Lax: 这种称为宽松模式,比 Strict 放宽了点限制,假如这个请求是这种请求且同时是个GET请求,则这个Cookie可以作为第三方Cookie

网络劫持
网络劫持的分类
DNS劫持:输入京东被强制跳转到淘宝就属于 DNS劫持
1. DNS强制解析:通过修改运营商本地 DNS 记录,来引导用户流量到缓存服务器;
2. 302 跳转:通过监控网络出口的流量,分析判断哪些内容是可以进行劫持处理,在对劫持的内存发起 302 跳转的回复,引导用户获取内容。

HTTP劫持:例如访问百度,但是一直有贪玩蓝月的广告。由于 HTTP 是明文传输,运营商会修改你的 HTTP 响应内容(即加广告)

网络劫持防御
DNS劫持由于涉嫌违法,已经被监管起来,现在很少会遇到 DNS 劫持。
但是 HTTP 劫持依然非常盛行,最有效的方法就是使用 HTTPS,将 HTTP 加密起来,运营商无法获取明文,就无法劫持你的响应内容。

中间人攻击(Man-in-the-middle attack,MITM)
中间人是指攻击者与通讯两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端都认为他们正在一个私密的连接与对方直接对话,但实际上整个会话都被攻击者完全控制。在中间人攻击中,攻击者可以拦截通讯双方的通话,并插入新的内容。
一般流程如下:
1. 服务端请求客户端,请求被中间人拦截;
2. 服务器向客户端发送公钥;
3. 中间人截取公钥,保留在自己手上,并伪造一个公钥发送给客户端;
4. 客户端收到伪造的公钥后,生成加密密钥发送给服务端;
5. 中间人通过私钥解密得到真密钥,同时生成假的密钥,用服务端的公钥加密后发送给服务端;
6. 服务端收到请求后用私钥解密得到假的密钥,然后用假的密钥加密明文数据传输给客户端。

Iframe 滥用
严格来说这个不算是安全问题,但是如果是要防范自己网站被人用 iframe 嵌套的话,可以使用这几种方法:

添加响应头
在响应头中加一个 X-Frame-Options
取值有三种,大部分浏览器都支持:
1. DENY:拒绝当前页面加载任何 Frame 页面;
2. SAMEORIGIN:Frame 页面只能加载在同源网站下;
3. ALLOW-FROM origin:origin 为允许 Frame 页面加载的地址。

js 脚本

if (window != window.top) {
    window.top.location.replace(window.location)
    // 这是直接代替外窗,你也可以干别的
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端安全 的相关文章

  • asp.NET 2.0网站无法访问App_Code中的类

    将我的网站部署到服务器后 我在访问课程时遇到问题 请注意 这是一个网络Site不是网络应用 错误是 编译器错误消息 CS0246 找不到类型或命名空间名称 Order 是否缺少 using 指令或程序集引用 版本信息 Microsoft N
  • Phonegap - cordova 在 Android 和 iOS 设备上延迟且缓慢

    我刚刚开始使用 zend studio 开始我的第一个 PhoneGap 项目 但是 在我构建并部署它之后 该应用程序非常慢 Android 和 iOS 均可 滚动滞后 如果我按下按钮 转到下一页的速度很慢 有什么办法可以提高它的性能吗 提
  • 为什么使用HTTP协议时需要指定端口号?

    即使我们使用HTTP协议 为什么还需要用IP地址指定端口号 例如 http xyz 8080 这到底是什么意思 我们已经知道 在使用 HTTP 时 请求将在端口 80 上提供服务 那么为什么我们要显式指定端口呢 HTTP 的默认端口为 80
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • php 中的 stackoverflow 上有这样的成就系统吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 从概念上讲 如何使用 PHP 和 MySQL 为网站编写一个成就系统 唯一真正的方法是不断执行 MySQL 查询来测试成绩等吗 您有两
  • 使用 php ping 网站

    我想创建一个 php 脚本 它将 ping 一个域并列出响应时间以及请求的总大小 这将用于监控网站网络 我尝试过curl 这是我到目前为止的代码 function curlTest2 url clearstatcache return if
  • 诸如用于测试 HTTP 请求的虚拟 REST 服务器之类的东西? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在四处寻找 但找不到任何这样的网站 我想知道是否有一些虚拟服务器可以响应测试 GET 请求并返回
  • 在脚本标签内工作的角度表达式

    如何在脚本标签内使用角度表达式 我对此很陌生并且需要帮助 这是我的 java 脚本代码的示例
  • Web 应用程序使用 API 来完成一切?

    我即将开始为我的公司规划一个内部项目管理工具 API 一直让我疑惑 首先创建 API 并使用这些 API 调用构建实际站点而不是实施两次 是否会被视为不好的做法 效率太低 让我知道你的想法 我完全同意开发 API 将为您提供解耦的架构 并且
  • 如何从文件系统访问 api window.showDirectoryPicker() 获取选定的目录路径

    当我选择一个文件夹时 我确实得到了 dirHandle 但无法弄清楚什么属性或方法将为我提供完整路径 const dirHandle await window showDirectoryPicker 所以类似 let path dirHan
  • Azure Web 角色中的网站项目

    我正在研究一个新的 ASP Net 项目 我们希望将其托管在 Windows Azure Web 角色中 该项目的技术要求之一是利用 ASP Net 的完整预编译选项 不可更新 单页程序集 Web Site项目模型 与 ASP Net 相反
  • CSS3 与 JavaScript

    所以我试图在网页上创建一个动画 并试图找到一种使用 CSS3 来实现它的方法 但我对如何做到这一点感到非常困惑 我需要发生的是 当用户单击链接元素时 我希望 div 展开并填充特定于所单击的链接元素的内容 例如 当用户单击标题为 About
  • 我可以通过什么方式混合 jQuery 和 vanilla JavaScript

    我有一个用普通 JavaScript 编写的 Web 应用程序 我想用 jQuery 动画来增强它 并使用我在各种 jQuery 插件中找到的一些功能 例如上传 http www uploadify com 可以通过什么方式将 jQuery
  • 如何在您的网站中连接两个人

    有一款名为 Verbosity 的游戏 这是一款有目的的游戏 位于此链接上www gwap com 在游戏中 他们随机连接两个玩家互相玩 游戏是玩家1应该向他的搭档 玩家2 描述一个单词 而玩家2应该猜测这个单词 我正在尝试建立一个网站来执
  • 删除 cookie php

    我正在尝试创建一个带有登录系统的平台 并将用户名和密码存储在cookie中 以使用户即使关闭浏览器然后再次输入也能保持登录状态 我设法保存了cookie 但我不知道如何制作注销按钮 这是代码 function logout body app
  • 有没有办法以编程方式下载网页的部分内容,而不是整个 HTML 正文?

    我们只需要 nytimes com technology 上的 HTML 文档中的特定元素 该页面包含许多文章 但我们只想要文章的标题 该标题位于 如果我们使用 wget cURL 或任何其他工具或某些包 例如Python 中的请求 htt
  • 仅当 url 以 www 为前缀时才会发生 CORS 错误

    我目前遇到一个关于 CORS 跨源资源共享 的问题 奇怪的是 只有当我使用 www url 前缀时 才会出现这种情况 例如 当我使用以下网址访问我的网站时 http example com index http example com in
  • 使用哪个 HTTP 状态代码来拒绝由于乐观锁定失败而导致的 PUT

    假设我想实现某种乐观锁定并使用 ETag 来指示最新的资源状态 这意味着 客户将使用If Match标题时PUT等待更新 根据HTTP规范 http www w3 org Protocols rfc2616 rfc2616 sec14 ht
  • 遭受xss攻击后如何恢复站点?

    最近我正在研究XSS攻击以及它们对网站的破坏性有多大 让我惊讶的是 网络 even SO 充满了关于如何防止xss攻击但没有相关资源说明如何在网站受到 xss 攻击后恢复网站 我遇到过一些事情 比如 将备份网站代码上传回服务器 下载整个网站
  • 使用其他聚合中的数据检查命令的有效性

    我目前正在开发我的第一个更大的 DDD 应用程序 目前来说 它运行得很好 但我们从早期就陷入了一个让我无法停止思考的问题 在我们的一些聚合中 我们保留对另一个聚合根的引用 这对于整个应用程序非常重要 基于它们的 ID 因此不存在硬引用 删除

随机推荐

  • vue样式穿透 ::v-deep的具体使用

    vue样式穿透 v deep的具体使用 更新时间 2020年06月04日 11 32 59 转载 作者 柳慕笙 这篇文章主要介绍了vue样式穿透 v deep的具体使用 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习
  • 学习笔记:近似推断(待完善)

    在很多概率模型中 很难训练的最重要的原因是 很难进行推断 所以书中 专门开了这章 来面临训练中最大而又 不能不解决的问题 近似推断 近似推断 可以视为优化问题 主要是 最大化下界 最大化下界 1 EM 期望最大化 2 MAP 最大后验推断
  • STM32 通过HAL库实现双机SPI程序烧录之一SPI双机通信

    一 实现SPI双机通信 主要功能 STM32F407VET6作为主机 STM32F103ZET6作为从机实现F4通过SPI接口发送数据给F1进行串口打印功能 主要是使用STM32cubemx进行相关配置 使用这个软件不能只用于生成代码 要学
  • kubeadm一键搭建kubernetes环境

    kubeadm一键搭建kubernetes环境 安装docker 按官网教程执行https docs docker com v17 09 engine installation linux docker ce centos install
  • Tauri打包windows应用配置中文界面

    使用 Tauri Rust 开发桌面应用 在 windows 系统上 打包后安装包名称后缀 安装界面 相关说明默认都是英文的 如果要默认显示为中文 则需要在 tauri conf json 中配置相应参数 前言 默认情况下 在 window
  • Multi-exit Network

    关键词 Multi exit 动态网络 Anytime prediction budgeted batch classification 参考 https blog csdn net c9Yv2cf9I06K2A9E article det
  • TAS-LR 论文辅助笔记 & 图拉普拉斯正则项推导

    1 图拉普拉斯正则项的直观目标函数 我们已知一张图G的邻接矩阵A 和度矩阵D 那么我们就知道他的拉普拉斯矩阵L D A 在使用矩阵分解的时空数据补全问题中 有一些文献使用图拉普拉斯正则化项来对空间特征矩阵进行约束 我们假设低秩的空间特征矩阵
  • 2021-12-23 工作记录--LayUI-单击行内容展示子表(手风琴效果),堪称yyds

    LayUI 单击行内容展示子表 手风琴效果 百度了好多办法 都不能达到这种效果 所以记录一下 最开始使用layui soul table 但是它不能实现单击行内容展示子表 而是单击行最左列展示子表 所以与项目不符 则放弃了 但是感兴趣的小萝
  • 幼儿园里面有科技设备么

    现代社会 幼儿园是孩子们是快乐且有意义的生涯起点 他们从这里认识世间万物 格物斯坦心系每位的热爱人工智能的孩子们 祖国的未来就靠你们了 幼儿园的核心工作是保证幼儿健康成长 同时需要为幼儿提供良好的学习和生活环境 随着现代技术正朝着智能化的方
  • Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 & 源码解析

    1 背景 1 1 Rocketmq 支持的过滤方式 Rocketmq 作为金融级的业务消息中间件 拥有强大的消息过滤能力 其支持多种消息过滤方式 表达式过滤 通过设置过滤表达式的方式进行过滤 TAG 根据消息的 tag 进行过滤 SQL92
  • 【 ROS 入门 2】tf 入门学习教程总结(缺少系统整理)

    ROS官网 tf 教程 http wiki ros org tf Tutorials 参考博客 三维旋转矩阵 包括任意轴的通用旋转矩阵 Euler角 单位四元数 的计算 视觉SLAM中的数学基础 第二篇 四元数 ROS学习 轻松使用tf t
  • PIL,cv2,plt的使用与区别

    PIL cv2 plt的使用与区别 1 比较三者的打开图片 显示图片 打开的图片的类型 2 图像类型的转换 PIL与numpy 3 PIL cv2 plt混用 3 1 cv2 plt读PIL打开的图像 3 2 PIL plt读cv2打开的图
  • https 是如何保护数据传输的

    为什么需要 https https 是 http ssl 也就是加密的 http 数据传输 我们都知道 https 的最主要的作用在于保证数据的安全 但具体来说 https 的安全性主要体现在以下两点 保证数据传输不被中间人盗用和信息的泄漏
  • GitHub开源协议

    开源协议 有名开源许可证 很多 经过Open Source Initiative组织 OSI批准 通过批准的开源协议目前有58种 常见的开源许可证包括 MIT MIT License GPL GNU General Public Licen
  • 预览word文件,支持下载(微软提供)

    预览打印 file 文件对象 url 接口地址 filepath 文件路径 filetype 文件类型 PS 兼容docx pdf后缀文件 export const filePreview file gt if file filepath
  • 三层架构:软件设计架构

    1 界面层 表示层 用户看的得界面 用户可以通过界面上的组件和服务器进行交互 2 业务逻辑层 处理业务逻辑的 3 数据访问层 操作数据存储文件
  • ---复位现象---GD32 MCU插入SD卡MCU立刻复位

    问题描述 程序运行正常 但是在插入SD卡的瞬间 单片机硬件复位 程序重新运行 之后状态一切正常 可以读取到SD卡 如果上电前插入SD卡 则一切正常 原因 使用示波器测试MCU电源 在SD卡插入瞬间 MCU电源电压跌落到2 5V以下 正常GD
  • 重载输入<<,输出>>,前置和后置++,--运算符

    由于系统给定的输入 lt lt 输出 gt gt 前置和后置 运算符只能处理类似于int float等系统已经定义好的类型的变量 为了能对我们自己定义的类的对象也能进行这些操作 我们就要重载这些运算符 定义一个复数类的对象 class Co
  • 基于OPENCV4的火焰烟雾检测

    现在目标检测主要采用深度学习训练模型 然后采用OPENCV4调用 烟雾火焰检测 采用CAFFE训练一个模型 采用OPENCV4调用 C PYTHON都可以调用 可以加Q 2830025146进行讨论 效果测试在 https download
  • 前端安全

    有哪些可能引起前端安全的问题 跨站脚本攻击 Cross Site Scripting XSS 一种代码注入方式 为了与 CSS 区分所以被称为 XSS 早期常见于网络论坛 起因是网站没有对用户的输入进行严格的限制 使得攻击者可以将脚本上传到