HTML本地文件包含漏洞怎么测试_HTML页面加载本地文件漏洞测试方法

答案:HTML页面无法直接包含本地文件,漏洞多源于特定环境。现代浏览器通过同源策略阻止file://协议访问本地资源,标准Web环境下此类操作被禁止。测试重点在于验证安全策略有效性及非标准场景风险,如本地HTML文件被恶意执行时可访问同目录文件,属于社会工程学威胁。真正风险集中于Electron等桌面框架,若nodeIntegration启用且无contextIsolation,JavaScript可调用Node.js的fs模块读取任意文件,形成LFI漏洞。此外,不安全的IPC通信、文件上传未校验、恶意浏览器扩展或老旧嵌入式浏览器也可能导致本地文件泄露。防范需多层措施:Web应用应配置CSP、HSTS,禁用危险权限;Electron应用须关闭nodeIntegration,启用contextIsolation,通过预加载脚本暴露受限API;后端需防护路径遍历,实施最小权限原则;同时加强用户教育,避免打开可疑本地文件。

html本地文件包含漏洞怎么测试_html页面加载本地文件漏洞测试方法

当谈到“HTML本地文件包含漏洞”时,我们首先要明确一个核心观点:在现代浏览器和标准Web环境下,HTML页面直接、任意地“包含”或“加载”用户本地文件,通常是极其困难的,甚至可以说是不可能的,这主要得益于浏览器严格的安全沙箱机制。真正的“漏洞”往往不是HTML本身的能力,而是出现在特定上下文、应用场景或用户交互不当的情况下。测试这类“漏洞”的核心,在于探究这些安全边界是否被无意中绕过,或者在非标准环境中是否存在风险。

解决方案

要测试HTML页面加载本地文件是否存在潜在漏洞,我们的思路主要围绕几个方面展开:探测浏览器安全策略的边界、识别非标准环境下的风险点,以及模拟恶意用户或应用行为。这不仅仅是技术层面的操作,更是一种对安全架构深思熟虑的推演。

1. 探测file://协议的限制与利用

基本尝试: 最直接的方法是在HTML页面中尝试使用file://协议引用本地文件。例如,在一个由服务器提供的HTML页面中,插入以下代码:

立即学习“前端免费学习笔记(深入)”;

在标准浏览器中,这些尝试通常会被同源策略(Same-Origin Policy)或更严格的跨域安全限制所阻止,控制台会报错,图片不会显示,iframe会空白,链接可能也无法直接打开。但测试的价值在于确认这些限制是否真的生效。

本地HTML文件场景: 如果一个HTML文件本身就是通过file://协议在本地打开的(比如用户下载后双击打开),那么它对同目录或子目录下的其他本地文件拥有更高的访问权限。测试时,可以构造一个本地HTML文件,尝试加载同目录或已知路径下的敏感文件。例如,创建一个test.html

@@##@@

尝试读取文件内容(需要JS权限,但可测试是否存在其他读取路径)

这里的“漏洞”不在于HTML本身,而是用户执行了一个不受信任的本地文件。测试的重点在于,如果这个HTML是恶意构造的,它能在本地环境下做到什么?

2. 关注Web Workers、Service Workers与Blob URL

虽然这些技术主要用于客户端性能优化和离线存储,但理论上,它们处理数据的方式可能间接暴露信息。例如,如果一个Service Worker被设计成缓存并处理本地文件路径,且没有适当的校验,可能会存在风险。这需要深入分析Worker的脚本逻辑。

3. 特定应用环境的审查(如Electron、NW.js)

Node.js集成: 像Electron这类桌面应用框架,允许Web页面拥有Node.js的API访问能力,这意味着HTML/JavaScript可以直接访问文件系统(fs模块)。这是“本地文件包含”最可能出现漏洞的场景。测试方法: 审查应用代码中nodeIntegrationcontextIsolation等配置。如果nodeIntegrationtrue且没有contextIsolation,那么恶意注入的JavaScript代码可以执行Node.js API。尝试在渲染进程中执行:

// 尝试在开发者工具中执行或注入const fs = require('fs');try {    const content = fs.readFileSync('/etc/passwd', 'utf-8');    console.log('成功读取本地文件:', content);} catch (e) {    console.error('无法读取本地文件:', e.message);}

IPC通信: 检查主进程和渲染进程之间的IPC通信(ipcRenderer, ipcMain)。如果渲染进程可以向主进程发送未经充分验证的请求,要求主进程读取任意文件并返回内容,这就构成了一个典型的LFI漏洞。

4. 用户输入与文件上传接口

文件上传: 虽然这不是直接的“包含”,但如果HTML页面包含文件上传功能,并且后端没有对上传文件的类型、内容进行严格校验,攻击者可能上传恶意HTML或脚本文件,配合目录遍历等漏洞,间接导致本地文件被意外处理或执行。

5. 浏览器扩展与插件

某些浏览器扩展可能拥有读取本地文件的权限。如果一个HTML页面能通过某种方式(如XSS)劫持或利用一个有此权限的扩展,理论上也能实现本地文件访问。这更多是扩展自身的漏洞,而非HTML页面的。

总的来说,测试HTML本地文件包含,更多的是在测试浏览器、应用框架或后端服务在处理HTML和本地文件交互时的健壮性,而非HTML语言本身的缺陷。

file://协议与现代浏览器:本地文件访问的限制与测试

当我们谈到file://协议,很多初学者可能会直观地认为,既然浏览器能打开本地文件,那一个网页也应该能引用它。然而,现实并非如此简单。现代浏览器的安全模型,特别是同源策略(Same-Origin Policy),对file://协议有着非常严格的限制。这就像给你的房子装了多道锁,即使你知道钥匙在哪里,也需要正确的上下文才能打开。

为什么file://协议访问受限?

想象一下,如果你访问一个恶意网站,它悄悄地在后台加载你电脑上的C:/Users/YourName/Documents/MyPasswords.txt,那将是灾难性的。为了防止这种“跨域”攻击,浏览器会严格区分不同的“源”(origin)。一个http://example.com的网页,被视为与file://协议下的任何本地文件都“不同源”。这意味着,即使你尝试用尝试加载passwd,浏览器也会拒绝加载,通常在控制台抛出Not allowed to load local resource或类似的错误。

测试方法与观察点:

直接引用测试:

在一个HTTP或HTTPS协议加载的页面中,尝试嵌入file:///路径的资源(如本地图片)。观察浏览器控制台的报错信息。通常会明确指出因安全策略而阻止了加载。检查页面渲染结果,确认资源是否确实未被加载。思考: 如果某个浏览器版本或特定配置下,这种加载成功了,那将是一个严重的安全漏洞。这在主流浏览器中极少发生,但对老旧浏览器或特殊环境(如嵌入式浏览器)来说,仍有测试价值。

用户交互与file://

浏览器允许用户通过标签主动选择本地文件。但这种方式是用户授权的,文件内容通过FileReader API在内存中处理,而非直接加载到页面DOM中。这不算漏洞,而是标准功能。测试: 尝试绕过用户选择,例如通过JavaScript模拟文件选择事件,这通常会被浏览器阻止。

本地HTML文件的特权:

如果你直接在本地双击打开一个HTML文件(即它的URL是file:///path/to/your/file.html),那么这个HTML文件可以访问它同目录或子目录下的其他本地文件。这是因为在file://源下,所有本地文件都被视为“同源”。测试: 构造一个本地HTML文件,包含对同目录下其他文件的引用。例如:

@@##@@

这种情况下,local_image.pnganother_local_page.html应该能正常加载。

漏洞思考: 这种“特权”本身不是漏洞,但如果用户被诱骗打开一个恶意的本地HTML文件,该文件就可以利用此权限访问其所在目录下的其他文件,这属于社会工程学和客户端恶意软件范畴。测试的意义在于理解这种本地执行的风险边界。

总之,file://协议在现代Web安全模型下,从远程页面访问本地资源几乎是不可能的。测试的重点在于确认这些安全机制是否健壮,以及在用户主动执行本地文件时可能带来的风险。

哪些特殊场景下,HTML页面能“意外”访问本地文件?

虽然标准浏览器对HTML页面加载本地文件有着严格的限制,但世界并非只有标准Web。在一些特定的、非典型的应用场景下,或者通过一些“非常规”的手段,HTML页面确实有可能“意外”地访问到本地文件,这往往就构成了我们所说的“漏洞”或安全风险。

基于Chromium的桌面应用(如Electron、NW.js):

核心原理: 这类框架允许开发者使用Web技术(HTML、CSS、JavaScript)构建桌面应用。它们的核心是内嵌了一个Chromium浏览器,但关键在于,它们通常会启用Node.js集成。这意味着在渲染进程(即你的HTML页面)中,JavaScript可以直接调用Node.js的API,包括强大的fs(文件系统)模块。“意外”访问: 如果一个Electron应用没有正确配置安全选项(例如nodeIntegration: true且没有contextIsolation),那么:XSS漏洞: 一旦应用中存在跨站脚本(XSS)漏洞,攻击者注入的恶意JavaScript代码就能直接调用require('fs').readFileSync('/etc/passwd', 'utf-8')来读取本地文件,甚至require('child_process').exec()来执行本地命令。不安全的IPC通信: 应用主进程和渲染进程之间通过IPC(Inter-Process Communication)进行通信。如果主进程提供了一个IPC接口,允许渲染进程请求读取任意文件,但又没有对请求的路径进行严格校验,那么渲染进程中的恶意代码就可以利用这个接口读取敏感文件。测试点: 审查main.js(主进程代码)中的BrowserWindow配置,特别是webPreferences对象。关注nodeIntegrationcontextIsolation。在渲染进程中尝试通过开发者工具执行Node.js文件系统操作。

被欺骗或恶意的本地HTML文件执行:

核心原理: 用户的操作系统允许直接打开本地的HTML文件。一旦HTML文件在本地被打开,它就处于file://协议下,拥有访问同目录或子目录下其他本地文件的权限。“意外”访问: 这不是HTML本身的漏洞,而是用户被社会工程学攻击的结果。例如,用户下载了一个名为“假期照片.zip”的文件,解压后里面有一个“查看照片.html”。如果这个HTML文件是恶意的,它就可以:加载同目录下的其他文件(如config.json)。通过属性诱导用户下载更多恶意文件。利用浏览器的一些已知但未打补丁的本地文件API漏洞(虽然现在非常罕见)。测试点: 模拟用户下载并打开一个恶意HTML文件,观察其能访问哪些本地资源。这更多是安全意识教育和防病毒软件的范畴。

浏览器扩展/插件的权限滥用:

核心原理: 浏览器扩展可以请求额外的权限,包括读取本地文件的权限。“意外”访问: 如果用户安装了一个恶意扩展,或者一个合法扩展存在漏洞被劫持,那么这个扩展可以利用其权限,在用户不知情的情况下访问本地文件。HTML页面本身不直接访问,而是通过操控或利用扩展来实现。测试点: 审查浏览器扩展的权限列表。检查扩展是否存在XSS或其他漏洞,可能导致其被恶意网页利用。

老旧浏览器或特定嵌入式环境:

核心原理: 早期浏览器或一些定制的嵌入式浏览器(如IoT设备上的Web UI)可能没有实现完整的安全沙箱或同源策略。“意外”访问: 在这些环境下,一些标准浏览器会阻止的file://引用,可能就会成功。测试点: 在目标老旧浏览器或嵌入式设备上进行前文提到的file://直接引用测试。

这些场景下的“本地文件访问”并非HTML语言的固有缺陷,而是特定运行环境的特性、配置不当或用户行为不慎所导致的。理解这些上下文,对于进行有针对性的安全测试至关重要。

防范HTML页面本地文件访问风险的策略与实践

防范HTML页面相关的本地文件访问风险,是一个多层面、系统性的工作,它不仅仅关乎前端代码,更涉及到整个应用架构、部署环境和用户行为。这就像盖房子,地基、结构、门窗、安保系统,缺一不可。

强化浏览器安全策略的利用与配置:

同源策略(SOP): 确保你的Web应用始终通过HTTP/HTTPS协议提供服务,避免用户直接打开本地HTML文件。这是浏览器最基础也是最强大的防线。内容安全策略(CSP): 为你的Web应用配置严格的CSP。通过default-src 'self'img-src 'self' data:等指令,明确限制页面可以加载的资源来源。虽然CSP主要针对远程资源,但它可以防止XSS攻击,从而间接阻止攻击者注入脚本来尝试绕过其他本地文件访问限制。HTTP Strict Transport Security (HSTS): 强制使用HTTPS,防止中间人攻击降级到HTTP,从而减少被注入恶意内容的机会。

桌面应用框架(如Electron)的安全加固:

禁用nodeIntegration 这是Electron应用安全的第一道防线。除非绝对必要,否则应始终将nodeIntegration设置为false。如果需要Node.js功能,考虑在主进程中实现,并通过安全的IPC通道暴露有限的API给渲染进程。

启用contextIsolation 这能确保你的预加载脚本(preload script)和页面内容运行在独立的JavaScript上下文中,防止页面脚本直接访问Node.js API或修改预加载脚本的环境。

预加载脚本(Preload Script)的正确使用: 如果需要Node.js功能,通过预加载脚本暴露有限的、经过严格验证的API给渲染进程。例如:

// preload.jsconst { contextBridge, ipcRenderer } = require('electron');contextBridge.exposeInMainWorld('myApi', {    readSomeFile: (filename) => ipcRenderer.invoke('read-some-file', filename),    // ...其他安全暴露的API});

在主进程中:

// main.jsipcMain.handle('read-some-file', async (event, filename) => {    // 在这里进行严格的文件路径校验,只允许访问特定目录下的特定文件    if (filename === 'allowed_config.json') {        return fs.readFileSync(path.join(__dirname, filename), 'utf-8');    }    throw new Error('Unauthorized file access');});

禁用或限制webSecurity 在生产环境中,webSecurity应始终为true。如果因开发需要暂时禁用,务必在发布前恢复。

限制导航和新窗口创建: 使用will-navigatenew-window事件监听器,限制应用只能导航到预期的URL,防止用户被重定向到恶意网站。

后端文件处理与校验:

如果应用涉及文件上传或下载,后端必须对文件类型、内容、大小进行严格校验。路径遍历防护: 避免在文件操作中使用用户提供的原始路径,始终对路径进行清理和规范化,确保文件操作限制在预期的目录内。沙箱化: 考虑将文件处理服务部署在沙箱环境中,即使发生漏洞,也能限制其影响范围。

安全开发实践(SDL):

代码审计: 定期对前端和后端代码进行安全审计,查找潜在的XSS、LFI等漏洞。最小权限原则: 无论是应用的用户账户,还是运行服务的系统账户,都应遵循最小权限原则,限制其对文件系统的访问权限。依赖项管理: 及时更新所有第三方库和框架,修补已知的安全漏洞。

用户教育与意识提升:

警惕不明文件: 教育用户不要随意下载、打开来自不明来源的HTML文件、压缩包或可执行文件。识别钓鱼: 提高用户对钓鱼网站和恶意链接的识别能力。谨慎安装扩展: 提醒用户只安装可信赖的浏览器扩展,并定期审查已安装扩展的权限。

通过这些综合性的策略和实践,我们可以大大降低HTML页面在各种场景下被利用来访问本地文件的风险。这不只是一次性的工作,而是一个持续迭代和优化的过程。

HTML本地文件包含漏洞怎么测试_HTML页面加载本地文件漏洞测试方法HTML本地文件包含漏洞怎么测试_HTML页面加载本地文件漏洞测试方法HTML本地文件包含漏洞怎么测试_HTML页面加载本地文件漏洞测试方法

以上就是HTML本地文件包含漏洞怎么测试_HTML页面加载本地文件漏洞测试方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1592761.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何解决在线HTML编辑时浏览器缓存冲突的解决办法
上一篇 2025年12月23日 07:59:33
使用JavaScript和jQuery实现动态表格生成、随机着色与数量控制
下一篇 2025年12月23日 07:59:50

相关推荐

  • 修复Django电商项目中AJAX过滤产品列表图片不显示问题

    在Django电商项目中,当使用AJAX动态加载过滤后的产品列表时,常遇到图片无法正常显示的问题。这通常是由于前端模板中图片加载方式(如data-setbg属性结合JavaScript库)与AJAX动态内容更新机制不兼容所致。解决方案是直接在AJAX返回的HTML中使用标准的标签来渲染图片,确保浏览…

    2026年5月10日
    000
  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 怎么在PHP代码中实现图片上传功能_PHP图片上传功能实现与安全处理教程

    首先创建含enctype的HTML表单,再用PHP接收文件,检查目录、移动临时文件,验证类型与大小,生成唯一文件名,并调整php.ini限制以确保上传成功。 如果您尝试在PHP项目中添加图片上传功能,但服务器无法正确接收或保存文件,则可能是由于表单配置、文件处理逻辑或安全限制的问题。以下是实现该功能…

    2026年5月10日
    100
  • HTML如何隐藏滚动条或去除滚动条

    滚动条可以存在也可以不存在,本文主要介绍了html 隐藏滚动条和去除滚动条的方法的相关资料,大家一起来学习一下html隐藏滚动条或去除滚动条的方法吧。 1. html 标签加属性 XML/HTML Code复制内容到剪贴板 2.body中加入以下代码 立即学习“前端免费学习笔记(深入)”; html…

    用户投稿 2026年5月10日
    000
  • vscode上怎么运行html_vscode上运行html步骤【指南】

    首先保存文件为.html格式,再通过浏览器或Live Server插件打开预览;推荐安装Live Server实现本地服务器运行与实时刷新,提升开发体验。 在 VS Code 上运行 HTML 文件并不需要复杂的配置,只需几个简单步骤即可预览页面效果。VS Code 本身是一个代码编辑器,不直接运行…

    2026年5月10日
    100
  • css max-height属性怎么用

    max-height 属性设置元素的最大高度。 说明 该属性值会对元素的高度设置一个最高限制。因此,元素可以比指定值矮,但不能比其高。不允许指定负值。 注意:max-height 属性不包括外边距、边框和内边距。 立即学习“前端免费学习笔记(深入)”; 值描述none 默认。定义对元素被允许的最大高…

    2026年5月10日
    100
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    000
  • 页面中文本域的值怎么设置

    标签定义多行的文本输入控件。 文本区中可容纳无限数量的文本,其中的文本的默认字体是等宽字体(通常是 Courier)。 可以通过 cols 和 rows 属性来规定 textarea 的尺寸,不过更好的办法是使用 CSS 的 height 和 width 属性。 注释:在文本输入区内的文本行间,用 …

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    000
  • 前端缓存策略与JavaScript存储管理

    根据数据特性选择合适的存储方式并制定清晰的读写与清理逻辑,能显著提升前端性能;合理运用Cookie、localStorage、sessionStorage、IndexedDB及Cache API,结合缓存策略与定期清理机制,可在保证用户体验的同时避免安全与性能隐患。 前端缓存和JavaScript存…

    2026年5月10日
    100
  • HTML5网页如何实现手势操作 HTML5网页移动端交互的处理技巧

    首先利用原生touch事件实现滑动判断,再通过preventDefault解决滚动冲突,接着引入Hammer.js处理复杂手势,最后通过优化点击区域、避免事件冲突和增加视觉反馈提升体验。 在移动端浏览器中,HTML5网页可以通过触摸事件实现手势操作,提升用户体验。虽然原生JavaScript提供了基…

    2026年5月10日
    000
  • 深入理解 Express.js 中 next() 参数的作用与中间件机制

    本文深入探讨 express.js 中间件函数中的 `next()` 参数。它负责将控制权传递给请求-响应周期中的下一个中间件或路由处理程序。文章将详细解释 `next()` 的工作原理、中间件的注册与执行顺序,以及不正确使用 `next()` 可能导致请求挂起的风险,并通过代码示例和实际应用场景,…

    2026年5月10日
    000
  • PHP动态生成表单输入与POST数据获取实践指南

    本教程详细阐述了如何在php中根据动态数据源(如数据库值)生成多个表单输入框,并演示了如何通过post方法准确无误地获取这些动态生成的输入值。文章强调了正确的输入框命名策略,避免了常见的命名误区,并提供了完整的代码示例,确保开发者能够高效处理动态表单数据。 动态生成表单输入 在Web开发中,我们经常…

    2026年5月10日
    000
  • JavaScript 闭包:理解闭包原理与内存泄漏问题

    闭包是函数访问其外部作用域变量的能力,即使外部函数已执行完毕。如 inner 函数引用 outer 中的 count,形成闭包,使变量持久存在。闭包本身无害,但可能因延长变量生命周期导致内存泄漏,例如事件监听器引用大对象时。若未及时清理 DOM 事件或定时器,闭包会阻止垃圾回收,造成内存占用过高。解…

    2026年5月10日
    000
  • JavaScript 动态菜单点击高亮效果实现教程

    本教程详细介绍了如何使用 JavaScript 实现动态菜单的点击高亮功能。通过事件委托和状态管理,当用户点击菜单项时,被点击项会高亮显示(绿色),同时其他菜单项恢复默认样式(白色)。这种方法避免了不必要的DOM操作,提高了性能和代码可维护性,确保了无论点击方向如何,功能都能稳定运行。 动态菜单高亮…

    2026年5月10日
    200
  • c++如何实现UDP通信_c++基于UDP的网络通信示例

    UDP通信基于套接字实现,适用于实时性要求高的场景。1. 流程包括创建套接字、绑定地址(接收方)、发送(sendto)与接收(recvfrom)数据、关闭套接字;2. 服务端监听指定端口,接收客户端消息并回传;3. 客户端发送消息至服务端并接收响应;4. 跨平台需处理Winsock初始化与库链接,编…

    2026年5月10日
    000
  • html5怎么画实线_HTML5用CSS border-style:solid画元素实线边框【绘制】

    可通过CSS的border-style属性设为solid添加实线边框:一、内联样式用border:2px solid #000;二、内部样式表统一设置如div{border:1px solid #333};三、外部CSS文件定义.my-box{border:3px solid red}并引入;四、单…

    2026年5月10日
    200

发表回复

登录后才能评论
关注微信