防御策略与安全加固
第四部分:防御策略与安全加固
4.1 漏洞防御
4.1.1 SQL注入防御(Impossible级别)
-
核心策略:
-
参数化查询:使用预处理语句(如
PreparedStatement
)分离SQL逻辑与数据输入。
String sql = "SELECT * FROM users WHERE username = ? AND password = ?"; PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, userInput); stmt.setString(2, passInput);
-
输入白名单校验:限制输入格式(如仅允许字母数字)。
-
最小权限原则:数据库账户仅赋予必要权限(禁用
DROP
、FILE
等高危操作)。 -
WAF规则增强:
-
配置正则表达式拦截常见Payload(如
UNION SELECT
、' OR 1=1 --
)。
4.1.2 命令执行漏洞防御(Low/High级别)
-
输入过滤与转义:
-
禁止特殊字符(如
;
、|
、&
),使用白名单控制参数范围。 -
示例(PHP安全函数):
$input = escapeshellarg($_GET['ip']); system("ping -c 3 " . $input);
- 沙盒隔离:通过容器(Docker)或低权限用户执行高危操作。
4.1.3 文件上传漏洞修复
-
白名单校验:仅允许指定扩展名(如
.jpg
、.png
)。 -
文件内容检测:
-
使用
magic byte
验证文件头(如FF D8 FF
为JPEG)。 -
示例(Python检测文件类型):
import magic file_type = magic.from_buffer(uploaded_file.read(), mime=True) if file_type not in ["image/jpeg", "image/png"]: raise Exception("Invalid file type!")
- 存储隔离:将上传文件存放到非Web目录,并通过代理访问。
4.2 系统安全
4.2.1 账户安全排查(隐藏账号、日志分析)
-
检测隐藏账号:
-
Windows:
Get-WmiObject Win32_UserAccount | Select Name, SID, Disabled # 列出所有用户
- Linux:
cat /etc/passwd | grep -v "nologin\|false" # 过滤无效用户
-
日志分析实战:
-
使用LogParser筛选异常登录事件:
SELECT * FROM Security WHERE EventID=4625 # 提取失败登录记录
4.2.2 Webshell检测与清除
-
检测方法:
-
静态扫描:使用工具D盾、河马查杀扫描可疑文件(如
eval(
、base64_decode
)。 -
动态监控:监控Web目录文件变化(Linux工具
inotifywait
):
inotifywait -m /var/www/html -e create,modify
-
应急响应:
-
隔离服务器,保留攻击痕迹(如Webshell创建时间、攻击IP)。
-
修复漏洞后重置服务器权限。
4.2.3 密码破解防御
-
SSH加固:
-
禁用密码登录,强制使用密钥认证:
# /etc/ssh/sshd_config PasswordAuthentication no PermitRootLogin no
- 限制IP访问:
AllowUsers user@192.168.1.0/24
-
数据库防护:
-
MySQL启用失败登录锁定:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1;
防御加固流程图
漏洞识别 → 输入过滤 → 权限控制 → 日志监控 → 定期审计 → 应急响应
4.3 补丁管理与安全基线
-
补丁更新优先级:
-
高危漏洞(如Log4j、永恒之蓝)需24小时内修复。
-
安全基线配置:
-
Windows:禁用SMBv1、关闭高危端口(135/445)。
-
Linux:
sysctl -w net.ipv4.icmp_echo_ignore_all=1 # 禁用Ping响应 chmod 700 /etc/shadow # 限制敏感文件访问
下期预告
第五部分将深入基础知识与协议,详解HTTP/HTTPS协议抓包分析、Cookie与Session安全机制,以及数据库联合查询注入的底层原理!