XSS跨站脚本攻击漏洞(Cross Site Scripting)
前提概要
本文章主要用于分享XSS跨站脚本攻击漏洞基础学习,以下是对XSS跨站脚本攻击漏洞的一些个人解析,请大家结合参考其他文章中的相关信息进行归纳和补充。
XSS跨站脚本攻击漏洞描述
跨站脚本攻击(XSS)漏洞是一种常见且危害较大的网络安全隐患。它产生的根源主要在于网站对用户输入的验证不足,以及输出处理不当,使得攻击者有机可乘。
当存在此类漏洞时,攻击者能够将恶意脚本注入目标网站。攻击类型多样,反射型 XSS 攻击者构建含恶意脚本的 URL,诱使用户点击,服务器响应后脚本在用户浏览器执行;存储型 XSS 则是攻击者将恶意脚本存入服务器,众多访问相关页面的用户都会因服务器返回的恶意内容而遭受攻击;DOM 型 XSS 通过篡改页面 DOM 树注入脚本。这些恶意脚本一旦在用户浏览器中执行,可能导致用户信息泄露,如登录凭证被盗取,或是网站被恶意篡改,严重威胁用户隐私与网站安全 。
XSS跨站脚本攻击漏洞原理
XSS 跨站脚本攻击漏洞的原理是攻击者利用网站对用户输入或输出处理不当的漏洞,将恶意脚本注入到目标网站中。当用户访问该网站时,浏览器会误认为这些恶意脚本是合法的,从而执行它们,导致用户的信息泄露、权限被滥用或其他恶意行为发生。根据注入方式和执行机制的不同,XSS 攻击主要分为以下三种类型:
- 反射型 XSS:攻击者构造包含恶意脚本的 URL,诱使用户点击。服务器接收并处理该请求时,将用户输入的恶意脚本反射到响应页面中,返回给用户浏览器。浏览器解析页面时执行恶意脚本,从而实现攻击。这种攻击通常是一次性的,依赖用户主动点击恶意链接。
- 存储型 XSS:攻击者将恶意脚本提交到目标网站的数据库或其他存储介质中,例如通过留言板、评论区等功能。当其他用户访问包含该恶意脚本的页面时,服务器从存储介质中读取并将恶意脚本发送给用户浏览器,浏览器执行脚本,导致攻击发生。存储型 XSS 攻击的影响范围更广,因为只要有用户访问相关页面,就可能受到攻击。
- DOM 型 XSS:攻击者通过修改页面的 DOM 结构来注入恶意脚本。这种攻击主要发生在客户端,利用浏览器中 DOM 操作的漏洞,当用户与页面进行交互时,恶意脚本被执行。例如,攻击者通过修改 URL 参数或其他方式,改变页面中某些元素的属性或内容,从而注入并执行恶意脚本。与前两种类型不同,DOM 型 XSS 攻击不依赖服务器端的响应,完全在客户端的浏览器环境中进行。
XSS跨站脚本攻击漏洞场景
- URL 参数处理处:服务器或客户端对 URL 参数验证过滤不足,引发反射型 XSS。
- 表单输入模块:各类表单元素输入处理不当,易出现反射型或存储型 XSS。
- 搜索框功能区:搜索结果页面直接嵌入用户输入,产生反射型 XSS。
- 评论与留言系统:存储和展示环节未严格过滤,是存储型 XSS 温床。
- 用户资料修改处:对输入验证不充分,导致存储型 XSS。
- 富文本编辑器:输入过滤及内容处理不当,引发 XSS 漏洞。
- JSONP 回调处理:回调函数名验证缺陷,造成基于 JSONP 的 XSS。
- 动态 HTML 模板引擎:渲染时对数据转义过滤不足致 XSS。
- 浏览器本地存储操作:存读数据缺安全处理,引发 XSS。
- 日志记录与展示:日志未过滤恶意输入,查看时触发 XSS 。
XSS跨站脚本攻击漏洞危害
XSS 跨站脚本攻击漏洞可能导致多方面的危害,主要包括以下几点:
- 用户信息泄露:攻击者可通过恶意脚本窃取用户的敏感信息,如登录凭证、账号密码、个人资料、联系方式等。这些信息一旦落入攻击者手中,可能会被用于盗刷用户账户资金、冒充用户身份进行网络诈骗、贩卖个人信息等违法活动,给用户带来严重的经济损失和隐私侵犯。
- 网站被篡改:攻击者利用 XSS 漏洞注入恶意脚本,能够对网站页面进行篡改。他们可能会修改网站的内容,替换正常的页面元素,插入虚假广告、恶意链接或其他有害信息,影响网站的正常运营和形象,降低用户对网站的信任度,同时也可能误导用户进行一些危险操作。
- 发起钓鱼攻击:通过 XSS 攻击,攻击者可以在目标网站上创建虚假的登录页面或其他欺骗性界面,诱使用户输入敏感信息。由于这些页面看起来与真实的网站页面非常相似,用户很难察觉其中的差异,从而容易上当受骗,进一步导致个人信息和资金的损失。
- 传播恶意软件:恶意脚本还可以用来传播恶意软件,如病毒、木马等。当用户访问被攻击的网站时,浏览器执行恶意脚本,自动下载并安装恶意软件到用户的设备上,从而控制用户设备,窃取设备中的数据,或者利用用户设备作为跳板进一步攻击其他网络设备。
- 实施 DDoS 攻击:攻击者可以利用 XSS 漏洞控制大量用户的浏览器,组成僵尸网络,然后向目标服务器发送大量请求,从而导致服务器瘫痪,无法正常提供服务,即分布式拒绝服务(DDoS)攻击。这种攻击不仅会影响网站的正常运行,还可能给网站所有者带来巨大的经济损失和业务影响。
XSS跨站脚本攻击漏洞评级
XSS 跨站脚本攻击漏洞评级主要分四级。严重级能让攻击者完全掌控用户浏览器,窃取关键敏感信息或冒用用户身份执行核心操作。高危级可使攻击者获取大量敏感数据,严重破坏网站核心功能。中危级可被用于篡改页面、展示误导信息等恶意行为,但影响相对有限。低危级利用条件苛刻,仅产生轻微视觉干扰或对用户体验有极小影响,基本不威胁用户数据与网站安全 。
XSS跨站脚本攻击漏洞形式
- 反射型 XSS:也称为非持久型 XSS。攻击者构造包含恶意脚本的 URL,诱使用户点击。服务器接收请求后,将恶意脚本反射给用户浏览器执行。这种攻击通常是一次性的,脚本不会存储在服务器上(存储在url),如攻击者通过电子邮件发送包含恶意脚本的链接,用户点击后触发攻击。
- 存储型 XSS:又称持久型 XSS。攻击者将恶意脚本存入服务器,如在论坛发帖、评论等位置输入恶意代码。当其他用户访问相关页面时,服务器会将恶意脚本发送给用户浏览器执行。这种攻击影响范围广,只要访问该页面的用户都会受到攻击。
- DOM 型 XSS:通过修改页面的 DOM 树来注入恶意脚本。攻击者利用浏览器端脚本对 DOM 操作的漏洞,在用户浏览器本地修改页面结构,插入并执行恶意脚本,不涉及服务器端的数据处理。例如,通过修改 URL 参数导致页面 DOM 被恶意修改,进而执行脚本。
按攻击目标分类
- 针对用户的 XSS 攻击:主要目的是窃取用户的敏感信息,如登录凭证、个人资料等,或者以用户的身份在网站上执行操作。攻击者通过注入恶意脚本,获取用户在浏览器中输入的信息,然后将这些信息发送到自己的服务器。
- 针对网站的 XSS 攻击:旨在破坏网站的正常运行,篡改网站的内容,影响网站的声誉和可用性。例如,攻击者可能会利用 XSS 漏洞在网站页面上插入大量广告、恶意链接或破坏页面的布局,使网站无法正常展示给用户。
按攻击载体分类
- 基于 HTML 的 XSS 攻击:攻击者利用 HTML 标签和属性的特性,注入恶意脚本。例如,通过在
<img>
标签的src
属性中插入恶意脚本,当浏览器加载该图片时,就会执行脚本。- 基于 JavaScript 的 XSS 攻击:直接注入 JavaScript 代码,利用浏览器对 JavaScript 的执行机制来实现攻击。这是最常见的 XSS 攻击方式,因为 JavaScript 可以直接操作浏览器的 DOM、发送网络请求等,具有很强的攻击性。
- 基于 CSS 的 XSS 攻击:虽然 CSS 本身不能直接执行代码,但攻击者可以利用 CSS 的一些特性,如
@import
规则、url()
函数等,来加载恶意的 CSS 文件或执行一些间接的攻击行为,例如通过 CSS 样式改变页面的布局,误导用户进行一些操作。按传播途径分类
- 主动式 XSS 攻击:攻击者通过直接发送恶意链接或利用社会工程学手段,诱使用户主动访问包含恶意脚本的页面。例如,通过电子邮件、即时通讯工具等发送钓鱼链接,用户点击后就会触发攻击。
- 被动式 XSS 攻击:攻击者将恶意脚本隐藏在正常的网站内容中,等待用户访问该网站时自动触发攻击。这种攻击方式通常利用网站的漏洞,将恶意脚本注入到网站的页面中,用户在浏览网站时不知不觉地受到攻击。
XSS跨站脚本攻击漏洞验证
portswigger靶场
1.
2.
3.
4.
<img src=1 onerror=alert(1)>
在这段代码中:
<img>是 HTML 中的图像标签,用于在网页上显示图片。
src是<img>标签的一个属性,它指定了要加载的图像的来源(路径或 URL)。这里src的值被设置为1,这不是一个有效的图片路径或 URL,所以浏览器会无法加载该图片,从而引发一个错误。
onerror是<img>标签的一个事件属性,当图像加载过程中出现错误时,浏览器会触发onerror事件,然后执行onerror后面指定的 JavaScript 代码。在这里,onerror后面跟着alert(1),这是一个简单的 JavaScript 函数调用,alert函数会弹出一个警告框,显示数字1。
如果这段代码被包含在一个网页中,并且用户的浏览器尝试加载这个网页,那么当浏览器解析到这个<img>标签时,由于src属性值无效导致图像加载错误,就会触发onerror事件,进而执行alert(1),弹出警告框。
5.
6.
7.
"onmouseover="alert(1)
8.
9.
'-alert(1)-'
10.
XSS跨站脚本攻击漏洞防御措施
输入验证和过滤
- 白名单验证:在服务器端,对用户输入的数据进行严格验证,只允许符合预定义规则的字符和内容通过。例如,对于用户的用户名输入,只允许字母、数字和特定的符号,其他字符则拒绝。
- 过滤特殊字符:对用户输入中的特殊字符进行过滤或转义,如将
<
转换为<
,>
转换为>
,这样可以防止恶意脚本的注入。例如,在 PHP 中可以使用htmlspecialchars
函数进行转义。- 验证数据类型和长度:确保用户输入的数据类型和长度符合预期。例如,对于年龄输入,验证其是否为数字且在合理范围内。
输出编码
- HTML 实体编码:在将用户输入的数据输出到 HTML 页面时,进行 HTML 实体编码,将特殊字符转换为对应的 HTML 实体。这样可以确保即使输入中包含恶意脚本,也不会被浏览器执行。
- JavaScript 编码:如果需要在 JavaScript 代码中输出用户输入的数据,要进行适当的编码,避免脚本注入。例如,使用
JSON.stringify
对数据进行编码。- CSS 编码:当将用户输入的数据用于 CSS 样式时,同样需要进行编码,防止恶意的 CSS 注入。
配置 HTTP 头信息
- Content-Security-Policy(CSP):通过设置 CSP 头信息,限制页面可以加载的资源来源,只允许从指定的域名加载脚本、样式表和其他资源,从而防止恶意脚本的加载和执行。例如,设置
Content-Security-Policy: default-src'self'; script-src'self' trusted - domain.com
表示只允许从当前域名和trusted - domain.com
加载脚本。- X-XSS-Protection:虽然现代浏览器对 XSS 攻击有一定的内置防护机制,但仍然可以通过设置
X-XSS-Protection
头信息来增强防护。例如,设置X-XSS-Protection: 1; mode = block
可以让浏览器在检测到 XSS 攻击时阻止页面加载。框架和库的安全使用
- 使用安全的框架:选择具有良好安全机制的 Web 框架,这些框架通常会提供输入验证、输出编码等功能,帮助开发者避免常见的 XSS 漏洞。例如,Django、Ruby on Rails 等框架都有相应的安全防护措施。
- 及时更新依赖库:保持框架和库的版本更新,及时修复已知的安全漏洞,避免因使用过时的库而引入安全风险。
前端验证和防护
- 前端输入验证:在前端页面使用 JavaScript 进行输入验证,给用户提供即时的反馈,提示用户输入不符合要求。但需要注意的是,前端验证不能替代服务器端验证,因为攻击者可以绕过前端验证。
- 使用 HttpOnly 和 Secure 属性:对于存储敏感信息的 Cookie,设置
HttpOnly
属性可以防止 JavaScript 脚本访问 Cookie,设置Secure
属性可以确保 Cookie 只通过 HTTPS 协议传输,减少被窃取的风险。安全意识培训
- 开发者培训:对开发人员进行安全培训,提高他们对 XSS 攻击的认识和防范意识,使其在开发过程中遵循安全编码规范。
- 用户教育:向用户宣传 XSS 攻击的风险,提醒用户不要随意点击不明来源的链接,避免在不可信的网站上输入敏感信息。
XSS跨站脚本攻击漏洞相关名词
- Blind XSS(盲打型 XSS):攻击者将恶意脚本注入到应用程序中,该脚本不会在正常的页面显示中立即执行,而是在应用程序的其他部分(通常是管理员或其他特权用户访问的后台页面)执行。由于攻击者无法直接看到攻击结果,需要采用一些特殊的技术来确认攻击是否成功,比如利用外部服务器日志记录或监控特定的网络流量。
- XSS Chaining(XSS 链):攻击者结合多个不同的 XSS 漏洞或者与其他类型的漏洞(如 CSRF、SQL 注入等)组合使用,以实现更复杂和严重的攻击。例如,先利用一个 XSS 漏洞获取用户的会话信息,再使用这个会话信息进行跨站请求伪造攻击。
- XSS Worm(XSS 蠕虫):这是一种特殊的 XSS 攻击,恶意脚本会自我复制并在不同用户之间传播。当一个用户访问包含 XSS 蠕虫的页面时,脚本会自动修改页面内容,将自身传播到其他用户可能访问的链接或页面中,从而迅速感染大量用户。
- Anti - XSS Library(反 XSS 库):开发人员可以使用的工具库,用于对用户输入和输出进行安全过滤和编码,防止 XSS 攻击。这些库通常提供了各种函数和方法,帮助开发者处理不同类型的数据,确保数据在使用过程中不会引发 XSS 漏洞。
- XSS Auditor:部分浏览器内置的一种安全机制,用于检测和阻止反射型 XSS 攻击。当浏览器检测到可能存在的 XSS 攻击时,会自动阻止脚本的执行,并对页面进行相应的处理,以保护用户的安全。
- XSS Payload Generator(XSS 有效载荷生成器):攻击者使用的工具,可根据不同的攻击场景和目标,自动生成合适的恶意脚本(即有效载荷)。这些工具可以帮助攻击者快速构造出能够绕过目标网站防御机制的 XSS 攻击代码。
- XSS Obfuscation(XSS 代码混淆):攻击者为了绕过防御机制,会对恶意脚本进行混淆处理,使其看起来不像是正常的脚本代码。例如,使用编码、加密、拆分代码等技术,让 XSS 过滤器难以识别恶意脚本。
- Payload(有效载荷):在 XSS 攻击中,指攻击者注入的恶意脚本或代码,用于实现特定的攻击目的,如窃取用户信息、执行非法操作等。
- Vector(攻击向量):指攻击者利用 XSS 漏洞进行攻击的方式或途径,例如通过 URL 参数、表单输入、HTTP 请求头字段等将恶意脚本注入到目标系统中。
- Sanitization(数据净化):对用户输入的数据进行处理,去除或转义其中可能包含的恶意字符和脚本,以防止 XSS 攻击。这是一种常见的防御措施,通过对输入数据进行严格的验证和过滤,确保数据的安全性。
- Encoding(编码):将数据转换为特定的格式,以便在传输和存储过程中避免数据被误解或篡改。在 XSS 防御中,常使用 HTML 编码、URL 编码等方式对用户输入进行处理,将特殊字符转换为安全的表示形式,防止脚本注入。
- CSP(Content - Security - Policy,内容安全策略):一种 HTTP 头信息,用于指定页面可以加载的资源来源,限制浏览器从非信任的源加载脚本、样式表、图片等资源,从而有效防止 XSS 攻击。通过 CSP,网站管理员可以明确允许或禁止某些来源的资源加载,增强网站的安全性。
- HttpOnly:是 Cookie 的一个属性,设置了
HttpOnly
的 Cookie 不能被客户端脚本(如 JavaScript)访问,只能通过 HTTP 协议由服务器进行读写操作。这可以防止攻击者通过 XSS 攻击窃取用户的 Cookie 信息,从而保护用户的登录状态和其他敏感信息。- Exploit(漏洞利用):指攻击者利用 XSS 漏洞编写的代码或程序,用于触发漏洞并执行恶意操作,以达到攻击目的。
- Vulnerability Scanner(漏洞扫描器):一种工具,用于检测网站或应用程序中是否存在 XSS 等安全漏洞。它通过发送各种测试请求,分析响应来发现可能存在的安全隐患。
- XSS Filter(XSS 过滤器):用于检测和阻止 XSS 攻击的工具或机制,通常部署在服务器端或网络设备上,对用户输入和输出的数据进行检查,识别并过滤掉可能包含恶意脚本的内容。
- JavaScript Injection(JavaScript 注入):XSS 攻击的一种常见形式,攻击者将恶意的 JavaScript 代码注入到目标页面中,使其在用户浏览器中执行,从而实现对用户的攻击。
- HTML Injection(HTML 注入):攻击者尝试将恶意的 HTML 代码注入到目标页面中,可能会改变页面的结构和内容,有时也可用于触发 XSS 攻击,例如通过注入包含恶意脚本的 HTML 标签。
- Phishing(网络钓鱼):虽然不完全等同于 XSS,但常常与 XSS 结合使用。攻击者通过 XSS 攻击获取用户的敏感信息,如用户名、密码等,然后利用这些信息进行网络钓鱼,冒充合法用户进行各种欺诈活动。
- Session Hijacking(会话劫持):攻击者利用 XSS 漏洞获取用户的会话标识(如会话 ID),然后使用该标识冒充用户身份,在用户的会话中执行操作,获取用户的敏感信息或进行其他恶意行为。
- Canonicalization(规范化):在处理用户输入时,将数据转换为标准的、规范的形式,以防止攻击者利用不同的字符编码或特殊字符组合来绕过输入验证和过滤机制,从而避免 XSS 攻击。
- Polyglot Attack(多语言攻击):攻击者构造的恶意代码可以在多种不同的环境或解释器中执行,例如同时利用 HTML、JavaScript 和 CSS 等多种语言的特性来实施 XSS 攻击,增加攻击的复杂性和隐蔽性。
- Web Shell:攻击者通过 XSS 等漏洞上传到目标服务器的一个脚本程序,它可以为攻击者提供一个远程控制服务器的接口,使攻击者能够执行各种命令,进一步控制服务器或窃取数据。
个人疑问
反射型XSS为什么是一次性攻击?
- 攻击触发机制:反射型 XSS 攻击依赖用户点击包含恶意脚本的特定 URL 来触发。当用户点击该 URL 后,服务器将恶意脚本作为响应的一部分反射给用户浏览器,浏览器执行脚本从而引发攻击。但这个过程仅在用户点击链接的当下发生,一旦用户关闭相关页面或进行其他操作,攻击行为就会停止,不会像存储型 XSS 那样,恶意脚本被存储在服务器端,持续对访问相关页面的用户造成威胁。
- URL 的一次性特征:攻击所用的恶意 URL 通常是针对特定目标和场景构造的,具有一次性使用的特点。攻击者需要诱骗用户点击这个特定的 URL 才能实施攻击,而用户一旦点击过该 URL,再次点击的可能性较低,且其他用户一般不会轻易点击与自己无关的陌生 URL。所以,从攻击的触发和传播角度来看,反射型 XSS 攻击往往是一次性的,难以形成持续性的攻击效果。
攻击方向不同,使用的恶意代码分别是什么?
相关文章:
XSS跨站脚本攻击漏洞(Cross Site Scripting)
前提概要 本文章主要用于分享XSS跨站脚本攻击漏洞基础学习,以下是对XSS跨站脚本攻击漏洞的一些个人解析,请大家结合参考其他文章中的相关信息进行归纳和补充。 XSS跨站脚本攻击漏洞描述 跨站脚本攻击(XSS)漏洞是一种常见且危害较…...
Android:蓝牙设置配套设备配对
一、概述 在搭载 Android 8.0(API 级别 26)及更高版本的设备上,配套设备配对会代表您的应用对附近的设备执行蓝牙或 Wi-Fi 扫描,而不需要 ACCESS_FINE_LOCATION 权限。这有助于最大限度地保护用户隐私。使用此方法执行配套设备&am…...
MFC中CString类型是如何怎么转std::string的
文章目录 一、转换方法总结二、详细步骤1. Unicode 项目(CStringW → std::string)2. 多字节项目(CStringA → std::string) 三、注意事项四、总结更多信息(知识点存在重复,可跳过)方法 1:项目使用 Unicode…...
使用vscode搭建pywebview集成vue项目示例
文章目录 前言环境准备项目源码下载一、项目说明1 目录结构2 前端项目3 后端项目获取python安装包(选择对应版本及系统) 三、调试与生成可执行文件1 本地调试2 打包应用 四、核心代码说明1、package.json2、vite.config.ts设置3、main.py后端入口文件说明 参考文档 前言 本节我…...
JAVASCRIPT 基础 DOM元素,MAP方法,获取输入值
从输入框获取数据的一般写法是: javascript const w parseFloat(document.getElementById("weight").value); const h parseFloat(document.getElementById("height").value); 而从弹窗获取数据一般写法是: javascript const w …...
VLAN间通信
目录 第一步:配vlan 第二步:配置核心vlanif,MAC地址信息。 第三步:ospf协议 三层交换机(汇聚层): 对于交换机、路由器、防火墙等网络设备而言,接口类型一般存在两种:二层接口,三…...
MySQL颠覆版系列————MySQL新特性(开启数据库的新纪元)上篇
文章目录 前言一、窗口函数(Window Functions)1.1 窗口函数概念1.2 常见的窗口函数 二、公用表表达式(Common Table Expressions, CTEs)2.1 公用表表达式的概念2.2 常见的公用表表达式 三、JSON增强3.1 JSON增强的概念3.2 常见的J…...
5.安全相关(双手启动、安全触边传感器)
一、关于双手启动按钮的使用规范 本文介绍双手启动按钮的使用。概括来讲: 双手按下之间的时间差间隔应该在0.5-2秒之间。一旦释放任何一个按钮,启动信号输出结束。只有两个按钮都被释放之后,才能再次触发双手启动信号。如果某按钮被按下超过…...
国产达梦(DM)数据库的安装(Linux系统)
目录 一、安装前的准备工作 1.1 导包 1.2 创建用户和组 1.3 修改文件打开最大数 1.4 目录规划 1.5 修改目录权限 二、安装DM8 2.1 挂载镜像 2.2 命令行安装 2.3 配置环境变量 2.4 启动图形化界面 三、配置实例 四、注册服务 五、启动 停止 查看状态 六、数据库客…...
mapper.xml中 “http://mybatis.org/dtd/mybatis-3-mapper.dtd“> 报错的解决方法
我用mybatisx自动生成代码,但是mapepr.xml中的 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">报错,如下图,圈起来的部分是之前的报错,现在已经解决,所以没有爆红: 解决方法:…...
01_JavaScript
目录 一、js介绍、能做什么 --了解 二、JavaScript的组成-重点 三、JavaScript代码的书写位置 行内JS 内嵌 JS 外链 JS 四、JS 中的注释 单行 多行 五、变量(重点) 定义变量及赋值 变量的命名规则和命名规范 六、数据类型(重…...
数组作为哈希表的妙用:寻找缺失的第一个正数
数组作为哈希表的妙用:寻找缺失的第一个正数 大家好,我是Echo_Wish,今天我们来探讨一个经典的算法问题——“缺失的第一个正数”。听起来可能有点简单,但它实际上是一个非常有意思且富有挑战性的题目,在面试中常常会碰…...
JAVA学习*Object类
Object类 Object类是所有类的父类 类中有一些方法(都需要掌握) toString()方法 在学习类的对象的时候有介绍过了,当我们重新给此方法就会打印类与对象的信息 equals()方法 在Java中的比较, 如果左右两侧是基本类型变量&#…...
《论语别裁》第02章 为政(03)星辰知多少
第二个问题说到“北辰”。我们中国文化发达得最早的是天文。过去我们把天体分成二十八宿和三垣——紫微、少微、太微,类似于我们现在讲天文的经纬度。经纬度是西方的划分法。曾经有位天文学家主张,我们自己重新划过,不照西方的度数划…...
git_version_control_proper_practice
git_version_control_proper_practice version control,版本控制的方法之一就是打tag 因为多人协作的项目团队,commit很多,所以需要给重要的commit打tag,方便checkout,检出这个tag 参考行业的实践方式。如图git、linux…...
playwright-go实战:自动化登录测试
1.新建项目 打开Goland新建项目playwright-go-demo 项目初始化完成后打开终端输入命令: #安装项目依赖 go get -u github.com/playwright-community/playwright-go #安装浏览器 go run github.com/playwright-community/playwright-go/cmd/playwrightlatest insta…...
手机扫描仪 含PDF转word功能+OCR识别110种语言
TapScanner Premium 是一款功能强大的手机扫描仪应用,支持 PDF 合并、分割以及转换为 Word 文档格式,还具备 OCR 识别功能,可识别 110 种语言。汉化中文且已激活全部功能,可免费使用。 该应用操作简洁,扫描文档、收据…...
数据可视化在商业智能中的应用:从数据到洞察的桥梁
数据可视化在商业智能中的应用:从数据到洞察的桥梁 大家好,我是Echo_Wish。今天,我们来探讨一个数据领域的热门话题——数据可视化在商业智能中的应用。在数据驱动的时代,如何从海量的数字和信息中提炼出有价值的洞察,成为了企业决策的关键。而数据可视化,正是将枯燥的数…...
【HarmonyOS Next的奇幻大冒险】DevEco Studio的AI助手CodeGenie挺好用
遇到些问题在官网搜不出答案,CodeGenie都给解决了! 不过我的问题可能比较初级,往后再看看它的能力怎么样 下面的截图是关于其中一个问题的对话。可见CodeGenie干脆利索,并且给出了相关知识点在官网上的参考信息链接,大…...
替代-UX设计师
初创公司如何在没有设计师的情况下 打造实用的用户体验 一个常见的捷径是使用预构建的组件库,如谷歌的 Material UI它们为你提供了构建块,但它们并没有为你考虑整个用户流程你仍然需要弄清楚所有这些是如何组合在一起的但是,很多时候&#x…...
ISIS-1 ISIS概述
前面几章我们介绍了OSPF的基础工作原理以及怎样交互LSA形成LSDB链路状态数据库的 这一章我们来介绍另一个链路状态路由协议,ISIS路由协议 一、概述 ISIS(Intermediate System to Intermediate System,中间系统到中间系统)是由ISO(International Organization for Standardiza…...
电脑上不了网普通用户排除方法
1:首先通过电脑的运行/CMD/ipconfig /all 命令查看电脑的ip地址是否正常如图: 2:在命令行中运行:ping 127.0.0.1 如图则正常,否则要重新安装网卡驱动 程序。 3:用ping命令,ping一下同网段的电…...
Qt 控件概述 QLCDNumber 和 Progressbar
目录 QLCDNumber 进度条 定时器进度条的实现 通过stylesheet来改变进度条颜色 QLCDNumber LCD数字显示器 实现一个定时器 QLCDNumber 进度条 定时器进度条的实现 为什在Widget.h种头文件并没有包含QTimer这个头文件,却还可以申明一个TImer指针呢?…...
2025.03.21首板涨停股票分析
目录 1 涨停原因分析2 交易建议 1 涨停原因分析 2 交易建议...
数据库的DDL操作
目录 一、创建数据库 (1)字符集和校验集 二、操作数据库 (1)查看数据库 (2)显示创建语句 (3)修改数据库 (4)删除数据库 三、数据库的备份与恢复 四、…...
Docker 部署 Graylog 日志管理系统
Docker 部署 Graylog 日志管理系统 前言一、准备工作二、Docker Compose 配置三、启动 Graylog 服务四、访问 Graylog Web 界面总结 前言 Graylog 是一个开源的日志管理平台,专为实时日志收集、分析和可视化设计。它支持强大的搜索功能,并且与 Elastics…...
特征工程自动化(FeatureTools实战)
目录 特征工程自动化(FeatureTools实战)1. 引言2. 项目背景与意义2.1 特征工程的重要性2.2 自动化特征工程的优势2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 自动化特征工程理论基础4.1 特征工程的基本概念4.2 FeatureTools库简介4.3 关键公…...
Linux:xxx is not in the sudoers file. This incident will be reported.
报错 xxx is not in the sudoers file. This incident will be reported.解决方式 切换到root用户下操作 # 1、修改/etc/sudoers文件为可修改,默认是只读的 ls -lh /etc/sudoers -r--r----- 1 root root 4.3K Dec 1 01:45 /etc/sudoerschmod uw /etc/sudoersls…...
fastapi+playwright爬取google搜索1-3页的关键词返回json
1,playwright无头 2,代理池随机获取代理ip 3,随机浏览行为,随机页面滚动 4,启用stealth模式 5,随机延时搜索 from fastapi import FastAPI, HTTPException from fastapi.responses import JSONResponse import asyncio from concurrent.futures import ThreadPool…...
论文阅读笔记:Denoising Diffusion Probabilistic Models (3)
论文阅读笔记:Denoising Diffusion Probabilistic Models (1) 论文阅读笔记:Denoising Diffusion Probabilistic Models (2) 论文阅读笔记:Denoising Diffusion Probabilistic Models (3) 4、损失函数逐项分析 可以看出 L L L总共分为了3项…...
FlauBERT:面向法语的无监督语言模型预训练
摘要 语言模型已成为在许多不同自然语言处理(NLP)任务中取得最先进成果的关键步骤。利用当今可用的大量未标注文本,它们提供了一种有效的方式来预训练连续词表示,这些表示可以在下游任务中进行微调,并在句子级别上进行…...
JavaScript严格模式
文章主要介绍JavaScript严格模式,包括启用原因、方式以及需避开的常见陷阱,助力开发者写出更健壮代码。 1. 启用原因:将普通JavaScript中的“静默错误”变为抛出错误,有助于编写健壮代码;修复阻碍JavaScript引擎优化的…...
文件上传的小点总结(1)
2.文件类型绕过 问题插入:BP无法拦截本地流量 ①插件限制 不代理的地址列表通常写有localhost和127.0.0.1,把本地的全都删掉,然后应用保存。 ②浏览器限制 Firefox浏览器设置:检查浏览器代理配置和proxy listeners都没问题后&…...
2024年数维杯数学建模B题生物质和煤共热解问题的研究解题全过程论文及程序
2024年数维杯数学建模 B题 生物质和煤共热解问题的研究 原题再现: 随着全球能源需求的不断增长和对可再生能源的追求,生物质和煤共热解作为一种潜在的能源转化技术备受关注。生物质是指可再生能源,源自植物和动物的有机物质,而煤…...
@maptalks/gl-layers中的VectorTileLayer的Symbol样式文档
maptalks/gl-layers中的VectorTileLayer的Symbol样式文档 矢量的Symbol样式分为以下几个大类: marker样式属性,定义了图标相关样式属性 text样式属性,定义了文字相关样式属性 line样式属性,定义了线相关的样式属性 polygon样式属…...
OpenCV旋转估计(3)帮助构建一个最大生成树(Maximum Spanning Tree)函数findMaxSpanningTree()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::detail::findMaxSpanningTree 是 OpenCV 中用于图像拼接工作流的一个函数,它帮助构建一个最大生成树(Maximum Spanni…...
OpenCV HighGUI 模块使用指南(Python 版)
用户让我编写一个 HighGUI 模块的使用指南,包括函数的使用和应用场景的实现。首先,我需要回顾 HighGUI 模块的主要功能:图像显示、视频捕获、鼠标和键盘事件。然后,按照用户提供的结构,整理每个部分的函数详解、代码示…...
SPI 机制与 Spring Boot AutoConfiguration 对比解析
一、架构效率革命性提升 1.1 类加载效率跃升 Spring Boot 2.7引入的AutoConfiguration.imports采用清单式配置加载,对比传统SPI机制: 传统SPI扫描路径:META-INF/services/** Spring Boot新方案:META-INF/spring/org.springfram…...
算法基础篇(1)(蓝桥杯常考点)
算法基础篇 前言 算法内容还有搜索,数据结构(进阶),动态规划和图论 数学那个的话大家也知道比较难,放在最后讲 这期包含的内容可以看目录 模拟那个算法的话就是题说什么写什么,就不再分入目录中了 注意事…...
【蓝桥杯速成】| 10.回溯切割
前面两篇内容我们都是在做有关回溯问题的组合应用 今天的题目主题是:回溯法在切割问题的应用 题目一:分割回文串 问题描述 131. 分割回文串 - 力扣(LeetCode) 给你一个字符串 s,请你将 s 分割成一些 子串ÿ…...
【Spring】深入理解 Spring 事务管理
文章目录 一、事务的基本概念原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability) 二、Spring 事务管理的优势简化事务管理代码提供多种事务管理方式整合…...
java学习笔记6
按住shift键,选择开始的一位和最后结束的一位来全选 面向对象特征之二:继承性(inheritance) 面向对象特征之二:继承性1.继承性的理解 > 生活上:财产的继承、颜值的继承 > 代码层面:> 自上而下:定义了一个类A,在定义另一个类B时&…...
人工智能在现代科技中的应用和未来发展趋势
人工智能(Artificial Intelligence,AI)是一种模拟人类智能思维和行为的技术,已经在现代科技中得到广泛应用。以下是人工智能在现代科技中的应用和未来发展趋势: 应用: 机器学习:机器学习是人工…...
第二十一章:模板与继承_《C++ Templates》notes
模板与继承 重点和难点编译与测试说明第一部分:多选题 (10题)第二部分:设计题 (5题)答案与详解多选题答案:设计题参考答案 测试说明 重点和难点 21.1 空基类优化(EBCO) 知识点 空基类优化(Empty Base Cla…...
STC89C52单片机学习——第35节: [16-1] AD/DA
写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难,但我还是想去做! 本文写于:2025.03.23 51单片机学习——第35节: [16-1] AD/DA 前言开发板说明引用解答和科普一、AD问题…...
算法-最大公约数
1、约数: 1.1 试除法求约数 原理:只需要遍历最小的约数即可,较大的那个可以直接算出来。 import java.util.*; public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {int t sc.nextIn…...
在 SaaS 应用上构建 BI 能力的实战之路
SaaS 产品在持续运营过程中积累了大量数据,这些数据不仅是数字的记录,更是洞察市场趋势、优化产品功能、提升用户体验的宝贵资源。 因此,大部分的 SaaS 产品在发展到一定阶段后,都会开始构建自己的报表模块或分析模块,…...
代码随想录刷题day51|(二叉树篇)654.最大二叉树
一、二叉树基础知识 详见:代码随想录刷题day34|(二叉树篇)二叉树的递归遍历-CSDN博客 二、递归思路 递归三部曲 构造树一般采用前序遍历,因为先构造中间节点,然后递归构造左子树和右子树; 1.递归函数参数…...
深入理解 C++11 智能指针:独占、共享与弱引用的完美管理
文章目录 std::unique_ptr(独占式智能指针)std::shared_ptr(共享式智能指针)std::weak_ptr(弱引用智能指针)示例展示:智能指针的原理内存泄漏**什么是内存泄漏,内存泄漏的危害****如…...
1.2 编译器结构
编译器具有模块化的高层结构。还可以将模块化进一步细化。编译器可以看成多个阶段构成的流水线结构。 一种没有优化的编译器结构 更复杂的编译器结构...