在 Web 安全领域,运维开发者往往处于攻防对抗的第一线。服务器配置不当、代码写法疏忽、数据库权限过宽,任何一个环节都可能成为入侵入口。本文从 XSS 防御、SQL 注入防护和 Linux 服务器加固三个维度,梳理一份可落地的安全清单,帮助你在日常工作中建立基本的安全防线。
一、XSS 的常见方式与前端防御
XSS(跨站脚本攻击)的本质是攻击者将恶意脚本注入到页面中,当其他用户访问时,脚本在其浏览器中执行。常见的 XSS 类型有三种:
1. 存储型 XSS
恶意脚本被永久存储在服务器上,比如评论区、用户昵称、文章内容。每当用户访问这些页面,脚本就会自动执行。这类 XSS 危害最大,影响范围最广。
2. 反射型 XSS
恶意脚本作为请求参数发送给服务器,服务器未经处理直接返回给用户。常见于搜索框、错误提示页。攻击者通常通过钓鱼链接诱导用户点击。
3. DOM 型 XSS
不经过服务器,完全在前端 JavaScript 中触发。比如代码中使用了 innerHTML、document.write、eval 等危险方法,将用户可控的数据直接插入 DOM。
前端防御要点
- 输出编码:根据输出位置选择编码方式。HTML 内容用 HTML 实体编码,属性值用引号包裹并编码,URL 参数用
encodeURIComponent,JavaScript 变量用JSON.stringify。 - 避免危险 API:优先使用
textContent而非innerHTML;如果必须插入 HTML,使用 DOMPurify 等库进行净化。 - CSP 内容安全策略:通过响应头
Content-Security-Policy限制脚本来源,禁止内联脚本执行,这是纵深防御的重要手段。 - HttpOnly Cookie:给会话 Cookie 加上
HttpOnly标志,即使 XSS 发生,攻击者也无法直接读取 Cookie。
需要强调的是,前端防御只是辅助,服务端在输出时同样必须做编码处理,不能把安全责任全部推给浏览器。
二、MySQL 防止 SQL 注入的几种写法
SQL 注入的根源是用户输入被当作 SQL 代码执行。防御的核心原则只有一个:让数据和代码分离。
1. 预处理语句(Prepared Statement)
这是最推荐的方式。以 PHP PDO 为例:
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);
SQL 语句先被数据库解析,参数随后绑定,用户输入永远不会被解释为 SQL 语法。Java 的 PreparedStatement、Python 的 cursor.execute 参数化查询同理。
2. 使用 ORM 框架的安全方法
Laravel 的 Eloquent、Django ORM、MyBatis 的 #{} 占位符都会自动参数化。但要注意,ORM 中拼接原生 SQL 的部分仍然可能引入漏洞,比如 MyBatis 的 ${} 就是直接拼接,应尽量避免。
3. 输入验证与类型约束
对参数做白名单校验,比如 ID 必须是整数,排序字段只能从固定枚举中选择。这不能替代参数化查询,但能减少攻击面。
4. 最小权限原则
给 Web 应用使用的数据库账号只授予必要的权限,禁止 DROP、FILE、GRANT 等高危操作。即便注入发生,攻击者能做的事也有限。
5. 避免拼接 SQL
以下写法必须杜绝:
// 危险!
$sql = "SELECT * FROM users WHERE id = " . $_GET['id'];
三、Linux 服务器安全加固清单
服务器是最后一道防线,加固工作应从多个层面展开。
账号与认证
- 禁用 root 远程登录,修改 SSH 端口,使用密钥认证替代密码。
- 删除或锁定不必要的系统账号,定期检查
/etc/passwd中的异常账户。 - 配置
fail2ban防止暴力破解。
网络与防火墙
- 使用
iptables或firewalld只开放必要端口,默认拒绝所有入站流量。 - 关闭不必要的服务,用
netstat -tulnp检查监听端口。 - 数据库、Redis 等服务禁止绑定
0.0.0.0,只监听内网地址。
系统更新与补丁
- 开启自动安全更新,或定期执行
yum update/apt upgrade。 - 关注内核和 OpenSSL 等基础组件的漏洞公告。
文件权限与审计
- 敏感文件如
/etc/shadow权限设为000或600。 - Web 目录禁止执行脚本上传,设置
open_basedir限制 PHP 访问范围。 - 开启
auditd记录关键系统调用,日志集中收集到远程服务器。
Web 服务加固
- Nginx/Apache 隐藏版本号,关闭目录浏览。
- 配置安全响应头:
X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security。 - 强制 HTTPS,使用 TLS 1.2 以上协议。
备份与应急
- 定期备份数据和配置,备份文件离线保存。
- 制定入侵响应流程,保留现场证据后再清理。
安全加固不是一次性的任务,而是持续的过程。建议将上述清单转化为自动化检查脚本,纳入 CI/CD 流程,每次上线前自动扫描配置偏差。只有把安全左移,才能真正降低运维风险。
未经允许不得转载:任鹏个人博客 » 运维开发者必须掌握的 Linux 安全加固清单


朋友圈点赞图在线生成源码