运维开发者必须掌握的 Linux 安全加固清单

在 Web 安全领域,运维开发者往往处于攻防对抗的第一线。服务器配置不当、代码写法疏忽、数据库权限过宽,任何一个环节都可能成为入侵入口。本文从 XSS 防御、SQL 注入防护和 Linux 服务器加固三个维度,梳理一份可落地的安全清单,帮助你在日常工作中建立基本的安全防线。

一、XSS 的常见方式与前端防御

XSS(跨站脚本攻击)的本质是攻击者将恶意脚本注入到页面中,当其他用户访问时,脚本在其浏览器中执行。常见的 XSS 类型有三种:

1. 存储型 XSS

恶意脚本被永久存储在服务器上,比如评论区、用户昵称、文章内容。每当用户访问这些页面,脚本就会自动执行。这类 XSS 危害最大,影响范围最广。

2. 反射型 XSS

恶意脚本作为请求参数发送给服务器,服务器未经处理直接返回给用户。常见于搜索框、错误提示页。攻击者通常通过钓鱼链接诱导用户点击。

3. DOM 型 XSS

不经过服务器,完全在前端 JavaScript 中触发。比如代码中使用了 innerHTMLdocument.writeeval 等危险方法,将用户可控的数据直接插入 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 应用使用的数据库账号只授予必要的权限,禁止 DROPFILEGRANT 等高危操作。即便注入发生,攻击者能做的事也有限。

5. 避免拼接 SQL

以下写法必须杜绝:

// 危险!
$sql = "SELECT * FROM users WHERE id = " . $_GET['id'];

三、Linux 服务器安全加固清单

服务器是最后一道防线,加固工作应从多个层面展开。

账号与认证

  • 禁用 root 远程登录,修改 SSH 端口,使用密钥认证替代密码。
  • 删除或锁定不必要的系统账号,定期检查 /etc/passwd 中的异常账户。
  • 配置 fail2ban 防止暴力破解。

网络与防火墙

  • 使用 iptablesfirewalld 只开放必要端口,默认拒绝所有入站流量。
  • 关闭不必要的服务,用 netstat -tulnp 检查监听端口。
  • 数据库、Redis 等服务禁止绑定 0.0.0.0,只监听内网地址。

系统更新与补丁

  • 开启自动安全更新,或定期执行 yum update / apt upgrade
  • 关注内核和 OpenSSL 等基础组件的漏洞公告。

文件权限与审计

  • 敏感文件如 /etc/shadow 权限设为 000600
  • Web 目录禁止执行脚本上传,设置 open_basedir 限制 PHP 访问范围。
  • 开启 auditd 记录关键系统调用,日志集中收集到远程服务器。

Web 服务加固

  • Nginx/Apache 隐藏版本号,关闭目录浏览。
  • 配置安全响应头:X-Content-Type-OptionsX-Frame-OptionsStrict-Transport-Security
  • 强制 HTTPS,使用 TLS 1.2 以上协议。

备份与应急

  • 定期备份数据和配置,备份文件离线保存。
  • 制定入侵响应流程,保留现场证据后再清理。

安全加固不是一次性的任务,而是持续的过程。建议将上述清单转化为自动化检查脚本,纳入 CI/CD 流程,每次上线前自动扫描配置偏差。只有把安全左移,才能真正降低运维风险。

未经允许不得转载:任鹏个人博客 » 运维开发者必须掌握的 Linux 安全加固清单

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏