发表日期:2025/9/17 文章编辑:展鸿网络
据 OWASP(开放 Web 应用安全项目)报告,80% 的网站存在至少一个高危漏洞,其中 SQL 注入、XSS 攻击、CSRF 攻击是最常见的攻击方式。网站安全不仅关系到用户数据安全,还可能导致服务器被劫持、业务中断甚至法律风险。本文将拆解主流攻击原理,提供可落地的防护方案,帮助开发者构建 “纵深防御” 体系。
一、常见攻击方式与防御手段
SQL 注入:杜绝恶意 SQL 执行
攻击原理:攻击者通过输入框、URL 参数等注入恶意 SQL 语句,例如在登录页面输入'' OR ''1''=''1,可能绕过验证直接登录。
防御方案:
使用参数化查询(Prepared Statement):所有数据库操作均通过参数传递,而非拼接 SQL 语句。例如 PHP 中使用 PDO:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute([''username'' => $username]); // 参数化传递,避免注入
限制数据库用户权限:网站使用的数据库账号仅授予 “SELECT/INSERT/UPDATE” 等必要权限,禁止 “DROP/ALTER” 等高危操作。
XSS 攻击:防止恶意脚本注入
攻击原理:攻击者注入恶意 JavaScript 代码,当用户访问页面时,脚本在用户浏览器中执行,可窃取 Cookie、伪造操作等。
防御方案:
输入过滤与输出编码:对用户输入的特殊字符(如<、>、")进行转义,输出到页面时使用htmlspecialchars()(PHP)或React的自动转义功能。
使用 CSP(内容安全策略):通过 HTTP 头Content-Security-Policy限制脚本加载源,例如:
Content-Security-Policy: default-src ''self''; script-src ''self'' https://analytics.example.com; style-src ''self'' ''unsafe-inline''; img-src ''self'' data:;
这段配置仅允许从自身域名和指定域名加载脚本,禁止加载外部恶意脚本。
CSRF 攻击:验证请求合法性
攻击原理:攻击者诱导用户在已登录的情况下点击恶意链接或提交表单,利用用户的身份执行未授权操作(如转账、修改密码)。
防御方案:
生成 CSRF 令牌:在表单中添加随机生成的令牌,服务器验证令牌是否与用户会话中的令牌一致,不一致则拒绝请求:
<form action="/update-password" method="post">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION[''csrf_token'']; ?>">
<input type="password" name="new_password" required>
<button type="submit">修改密码</button>
</form>
验证 Referer 头:检查请求的 Referer(来源)是否为可信域名,但若用户浏览器禁用 Referer 则失效,需配合令牌使用。
二、服务器与数据层面的安全防护
服务器环境加固
关闭不必要的端口:仅开放 80(HTTP)、443(HTTPS)等必要端口,通过防火墙(如 iptables、UFW)限制访问来源。
定期更新软件:及时修复操作系统、Web 服务器(Nginx、Apache)、数据库(MySQL、PostgreSQL)的安全漏洞,避免使用过时版本。
禁用目录浏览:在 Nginx 中添加autoindex off;,防止攻击者通过 URL 浏览服务器文件目录。
数据加密与备份
传输加密:全站启用 HTTPS,通过 Let’s Encrypt 获取免费 SSL 证书,并配置HSTS(HTTP Strict Transport Security)强制使用 HTTPS,避免降级攻击。
存储加密:敏感数据(如用户密码)需加密存储,密码不可明文保存,应使用 bcrypt、Argon2 等哈希算法加盐存储:
$password = $_POST[''password''];
$salt = random_bytes(16); // 生成随机盐值
$hashedPassword = password_hash($password, PASSWORD_DEFAULT, [''salt'' => $salt]);
// 存储$hashedPassword和$salt到数据库
定期备份:数据库需每日自动备份,备份文件加密存储在异地服务器,防止数据丢失或被篡改。
日志监控与应急响应
开启访问日志与错误日志:记录所有请求的 IP、时间、URL、状态码,便于追踪异常访问(如频繁失败的登录请求)。
使用安全监控工具:部署 WAF(Web 应用防火墙)如 Cloudflare WAF、阿里云 WAF,拦截恶意请求;使用 IDS/IPS(入侵检测 / 防御系统)监控服务器异常行为。
制定应急方案:明确漏洞发现、漏洞修复、数据恢复的流程,例如发现 SQL 注入漏洞后,应立即暂停相关功能,修复代码并排查数据是否被篡改。
Date:2025/9/17
Date:2025/9/16
Date:2022/5/27
Date:2022/5/25
Date:2022/5/25
Date:2025/9/17
Date:2025/9/17
Date:2025/9/17
Date:2025/9/16
Date:2025/9/16