在 Web 安全领域,服务器是整个业务系统的最后一道防线。一旦服务器被攻破,再完善的应用层防护也可能形同虚设。本文将围绕 XSS 防御、SQL 注入防护、Linux 服务器安全加固 三个核心维度,整理一份可直接落地的安全基线检查清单,帮助运维和开发人员系统性排查风险。
一、XSS 的常见方式与前端防御
XSS(跨站脚本攻击)的本质是攻击者将恶意脚本注入到网页中,使其在受害者浏览器上执行。常见类型包括:
- 存储型 XSS:恶意脚本被存入数据库,所有访问该页面的用户都会中招,危害最大。
- 反射型 XSS:恶意脚本通过 URL 参数传入,服务器直接回显到页面,通常配合钓鱼链接使用。
- DOM 型 XSS:完全在前端发生,服务端不参与,由 JavaScript 直接操作 DOM 导致。
常见注入入口包括:搜索框、评论、用户昵称、URL 参数、innerHTML 赋值、document.write 等。
前端防御的核心原则是 “永远不要信任用户输入”,具体措施如下:
- 输出编码:根据输出位置选择编码方式。HTML 上下文使用 HTML 实体编码,JS 上下文使用 JavaScript 编码,URL 上下文使用
encodeURIComponent。 - 避免危险 API:优先使用
textContent而非innerHTML;如必须使用innerHTML,务必配合 DOMPurify 等库进行净化。 - 设置 CSP:通过
Content-Security-Policy响应头限制脚本来源,禁止unsafe-inline,可有效缓解 XSS 危害。 - Cookie 加固:为敏感 Cookie 设置
HttpOnly、Secure、SameSite=Strict,降低会话劫持风险。 - 输入校验:对邮箱、手机号等字段使用白名单正则校验,拒绝非法字符。
需要强调的是,前端防御只是第一层,服务端输出编码才是根本,两者必须结合使用。
二、MySQL 防止 SQL 注入的几种写法
SQL 注入长期位居 OWASP Top 10 前列,其根源是 用户输入被当作 SQL 代码执行。以下是几种安全写法,按推荐程度排序:
1. 预编译语句(Prepared Statement)——首选方案
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
$stmt->execute([$email]);
参数与 SQL 语句分离,数据库先编译后传参,从根本上杜绝注入。Java 的 PreparedStatement、Python 的 cursor.execute(sql, params) 同理。
2. 参数化查询 + 类型绑定
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
注意:不要用字符串拼接 % 或 format,那是伪参数化。
3. 使用 ORM 框架
如 MyBatis 的 #{}(预编译)而非 ${}(字符串拼接)、Hibernate、SQLAlchemy 等,天然支持参数绑定。特别提醒:MyBatis 中 ${} 是注入高发点,能不用就不用。
4. 输入验证与白名单
对排序字段、表名等无法参数化的场景,使用白名单枚举:
$allowed = ['id', 'name', 'created_at'];
$order = in_array($_GET['order'], $allowed) ? $_GET['order'] : 'id';
5. 最小权限原则
数据库账户只授予必要权限,禁止 Web 应用使用 root;关闭 FILE、LOAD_FILE 等危险功能。
6. 错误信息屏蔽
关闭详细报错回显,避免攻击者通过报错推断表结构。
三、Linux 服务器安全加固清单
服务器是承载一切业务的底座,以下是可直接执行的加固检查项:
账户与认证
- 禁用 root 远程登录,修改 SSH 端口,使用密钥认证
- 删除或锁定无用账户,检查
/etc/passwd中 UID 为 0 的账户 - 配置
fail2ban防暴力破解,设置强密码策略
网络与服务
- 使用防火墙(iptables/firewalld)仅开放必要端口
- 关闭无用服务,
netstat -tulnp排查异常监听 - 限制 ICMP、禁止 IP 转发
文件与权限
- 关键目录权限最小化,
/etc/shadow应为 600 - 查找 SUID/SGID 异常文件:
find / -perm -4000 -type f - 使用
chattr +i锁定关键配置文件
日志与审计
- 开启
auditd,记录关键系统调用 - 集中收集
/var/log/secure、auth.log,定期分析 - 配置日志轮转,防止磁盘打满
补丁与更新
- 定期更新内核与软件包,订阅安全公告
- 使用
lynis、OpenSCAP等工具做基线扫描
Web 服务专项
- Nginx/Apache 隐藏版本号,禁用目录浏览
- 限制上传目录执行权限,禁止
.php在 upload 目录运行 - 配置 WAF 或 ModSecurity 规则
总结
安全不是一次性的任务,而是持续的过程。XSS 防御靠“输出编码 + CSP”,SQL 注入防御靠“预编译 + 最小权限”,服务器加固靠“最小化 + 持续监控”。建议将以上清单纳入日常巡检,结合自动化工具定期扫描,才能真正构建起纵深防御体系。
未经允许不得转载:任鹏个人博客 » Linux 服务器安全基线检查清单:Web 安全实战指南


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