遭遇黑客攻击不要慌!6种攻击特征识别+自愈代码实战

一、攻击类型快速判定表

攻击类型典型特征检测方法
SQL注入URL中含'UNION SELECT等关键字日志正则匹配
XSS攻击请求参数包含<script>javascript:输入内容过滤
暴力破解同一IP高频POST /login请求登录失败计数监控
端口扫描短时间内大量SYN包发往不同端口TCP连接状态分析
文件上传漏洞上传文件扩展名为.php.jsp文件类型白名单校验
CSRF攻击请求头无Referer或与域名不匹配Token验证机制

二、攻击检测与自愈代码实战

1. SQL注入实时阻断(Python +正则)
# Web中间件检测SQL注入(保存为sqli_blocker.py)  
from flask import Flask, request, abort  
import re  

app = Flask(__name__)  
SQLI_PATTERNS = [  
    r"union\s+select",  
    r"\d+\s+or\s+\d+",  
    r"';?\s*--"  
]  

@app.before_request  
def check_sqli():  
    for arg in request.values.values():  
        if any(re.search(pattern, arg, re.I) for pattern in SQLI_PATTERNS):  
            ip = request.remote_addr  
            print(f"SQLi detected from {ip}: {arg}")  
            abort(403, description="非法请求已被拦截")  

if __name__ == "__main__":  
    app.run(port=8080)  

测试命令

curl "http://localhost:8080/?id=1' OR 1=1--"  
# 输出:403 Forbidden - 非法请求已被拦截  
2. XSS攻击防御(前端+后端双重过滤)

前端过滤(JavaScript)

// 输入内容消毒  
function sanitizeInput(input) {  
    return input.replace(/<[^>]*>?/gm, '')  
               .replace(/javascript:/gi, '')  
               .replace(/onerror=/gi, '');  
}  

// 使用示例  
document.getElementById('comment').addEventListener('input', function(e) {  
    this.value = sanitizeInput(this.value);  
});  

后端加固(Node.js)

const xss = require('xss');  

app.post('/comment', (req, res) => {  
    const cleanContent = xss(req.body.content, {  
        whiteList: {},  // 禁止所有HTML标签  
        stripIgnoreTag: true  
    });  
    // 存储cleanContent到数据库  
});  

三、自动化防御工具链搭建

1. 基于Fail2ban的暴力破解拦截
# 安装Fail2ban  
sudo apt install fail2ban  

# 配置Jail规则(/etc/fail2ban/jail.local)  
[sshd]  
enabled = true  
maxretry = 3  
bantime = 1h  

# 自定义Nginx登录防护规则  
[nginx-login]  
enabled = true  
port = http,https  
filter = nginx-login  
logpath = /var/log/nginx/access.log  
maxretry = 5  
2. 端口扫描实时告警(Python + Scapy)
# 实时检测SYN扫描(保存为portscan_detect.py)  
from scapy.all import *  
from collections import defaultdict  

port_counter = defaultdict(int)  

def packet_handler(pkt):  
    if pkt.haslayer(TCP) and pkt[TCP].flags == 'S':  
        src_ip = pkt[IP].src  
        port_counter[src_ip] += 1  
        if port_counter[src_ip] > 50:  # 阈值:50个SYN包/分钟  
            print(f"[!] 端口扫描检测: {src_ip}")  
            os.system(f"iptables -A INPUT -s {src_ip} -j DROP")  

sniff(filter="tcp", prn=packet_handler, store=0)  

启动命令

sudo python3 portscan_detect.py  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值