flask网站开发网络推广网站制作

张小明 2026/1/14 6:02:30
flask网站开发,网络推广网站制作,怎样给网站做外链,做网站开发需要学什么软件被安全部门约谈了一次。 原因是日志里明文打印了用户手机号、身份证号#xff0c;还被导出到了测试环境。这要是出了事#xff0c;GDPR罚款能让公司破产。 花了两周时间做日志脱敏#xff0c;整理一下方案。 为什么要日志脱敏 日志里经常会有#xff1a; 手机号、身份…被安全部门约谈了一次。原因是日志里明文打印了用户手机号、身份证号还被导出到了测试环境。这要是出了事GDPR罚款能让公司破产。花了两周时间做日志脱敏整理一下方案。为什么要日志脱敏日志里经常会有手机号、身份证号银行卡号、密码别笑真有人打印地址、邮箱Token、API Key这些数据如果被运维人员看到 → 内部泄露风险日志被导出 → 外部泄露风险日志被攻击者获取 → 直接完蛋方案一代码层脱敏最可控的方式在打日志的地方处理。1.1 自定义toStringpublicclassUser{privateStringname;privateStringphone;privateStringidCard;OverridepublicStringtoString(){returnUser{namemaskName(name)\, phonemaskPhone(phone)\, idCardmaskIdCard(idCard)\};}privateStringmaskPhone(Stringphone){if(phonenull||phone.length()!11)returnphone;returnphone.substring(0,3)****phone.substring(7);}privateStringmaskIdCard(StringidCard){if(idCardnull||idCard.length()10)returnidCard;returnidCard.substring(0,4)**********idCard.substring(idCard.length()-4);}privateStringmaskName(Stringname){if(namenull||name.length()2)returnname;returnname.charAt(0)*.repeat(name.length()-1);}}打印出来User{name张*, phone138****5678, idCard3201**********1234}1.2 注解方式更优雅一点用注解标记敏感字段// 自定义注解Target(ElementType.FIELD)Retention(RetentionPolicy.RUNTIME)publicinterfaceSensitive{SensitiveTypetype();}publicenumSensitiveType{PHONE,ID_CARD,NAME,BANK_CARD,EMAIL}// 使用注解publicclassUser{Sensitive(typeSensitiveType.NAME)privateStringname;Sensitive(typeSensitiveType.PHONE)privateStringphone;Sensitive(typeSensitiveType.ID_CARD)privateStringidCard;}// 脱敏工具类publicclassSensitiveUtil{publicstaticStringmask(Objectobj){if(objnull)returnnull;Class?clazzobj.getClass();StringBuildersbnewStringBuilder(clazz.getSimpleName(){);Field[]fieldsclazz.getDeclaredFields();for(inti0;ifields.length;i){Fieldfieldfields[i];field.setAccessible(true);Stringvalue;try{ObjectfieldValuefield.get(obj);if(field.isAnnotationPresent(Sensitive.class)){Sensitiveannotationfield.getAnnotation(Sensitive.class);valuedoMask(String.valueOf(fieldValue),annotation.type());}else{valueString.valueOf(fieldValue);}}catch(IllegalAccessExceptione){valueN/A;}sb.append(field.getName()).append().append(value).append();if(ifields.length-1)sb.append(, );}returnsb.append(}).toString();}privatestaticStringdoMask(Stringvalue,SensitiveTypetype){if(valuenull||null.equals(value))returnvalue;switch(type){casePHONE:returnvalue.length()11?value.substring(0,3)****value.substring(7):value;caseID_CARD:returnvalue.length()10?value.substring(0,4)**********value.substring(value.length()-4):value;caseNAME:returnvalue.length()2?value.charAt(0)*.repeat(value.length()-1):value;caseBANK_CARD:returnvalue.length()8?value.substring(0,4)****value.substring(value.length()-4):value;caseEMAIL:intatIndexvalue.indexOf();returnatIndex2?value.substring(0,2)***value.substring(atIndex):value;default:returnvalue;}}}使用log.info(用户信息: {},SensitiveUtil.mask(user));// 输出用户信息: User{name张*, phone138****5678, idCard3201**********1234}方案二日志框架层脱敏在Logback/Log4j2层面统一处理。2.1 Logback自定义ConverterpublicclassSensitivePatternConverterextendsClassicConverter{privatestaticfinalPatternPHONE_PATTERNPattern.compile(1[3-9]\\d{9});privatestaticfinalPatternIDCARD_PATTERNPattern.compile(\\d{17}[\\dXx]);privatestaticfinalPatternEMAIL_PATTERNPattern.compile([\\w.][\\w.]);OverridepublicStringconvert(ILoggingEventevent){Stringmessageevent.getFormattedMessage();// 手机号脱敏messagePHONE_PATTERN.matcher(message).replaceAll(m-m.group().substring(0,3)****m.group().substring(7));// 身份证脱敏messageIDCARD_PATTERN.matcher(message).replaceAll(m-m.group().substring(0,4)**********m.group().substring(14));// 邮箱脱敏messageEMAIL_PATTERN.matcher(message).replaceAll(m-{Stringemailm.group();intatIndexemail.indexOf();returnatIndex2?email.substring(0,2)***email.substring(atIndex):email;});returnmessage;}}!-- logback.xml --configurationconversionRuleconversionWordsensMsgconverterClasscom.example.SensitivePatternConverter/appendernameCONSOLEclassch.qos.logback.core.ConsoleAppenderencoderpattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %sensMsg%n/pattern/encoder/appender/configuration这样所有日志自动脱敏无需改业务代码。2.2 Log4j2 RewritePolicyPlugin(nameSensitiveRewritePolicy,categoryCore,elementTyperewritePolicy)publicclassSensitiveRewritePolicyimplementsRewritePolicy{OverridepublicLogEventrewrite(LogEventevent){Messagemessageevent.getMessage();StringformattedMessagemessage.getFormattedMessage();// 脱敏处理StringmaskedMessagemaskSensitiveData(formattedMessage);returnnewLog4jLogEvent.Builder(event).setMessage(newSimpleMessage(maskedMessage)).build();}privateStringmaskSensitiveData(Stringmessage){// 同上正则替换returnmessage;}}方案三日志采集层脱敏在Logstash/Filebeat采集时处理。3.1 Logstash Filterfilter{# 手机号脱敏mutate{gsub[message,1[3-9]\d{9},1**********]}# 身份证脱敏mutate{gsub[message,\d{17}[\dXx],****]}# 银行卡脱敏mutate{gsub[message,\d{16,19},****]}}3.2 Filebeat Processorprocessors:-script:lang:javascriptsource:function process(event) { var message event.Get(message); // 手机号脱敏 message message.replace(/1[3-9]\d{9}/g, function(match) { return match.substring(0,3) **** match.substring(7); }); event.Put(message, message); }方案四落盘后处理如果历史日志已经有敏感信息需要清洗。#!/bin/bash# 日志脱敏脚本LOG_DIR/var/log/app# 手机号脱敏find$LOG_DIR-name*.log-execsed-i -Es/1([3-9])[0-9]{9}/1\1*******/g{}\;# 身份证脱敏find$LOG_DIR-name*.log-execsed-i -Es/[0-9]{6}[0-9]{8}[0-9]{3}[0-9Xx]/******/g{}\;最佳实践分层防护代码层 → 日志框架层 → 采集层 → 存储层 ↓ ↓ ↓ ↓ 不打印敏感 自动脱敏 二次脱敏 加密存储建议至少做两层。敏感数据分类级别数据类型处理方式L1绝密密码、密钥禁止打印L2机密身份证、银行卡强脱敏L3敏感手机号、邮箱弱脱敏L4普通姓名、地址可脱敏可不脱敏禁止打印的内容// 密码绝对不能打印log.info(用户登录: {}, 密码: {},username,password);// 错误// Token不能打印log.info(Token: {},token);// 错误// API Key不能打印log.info(调用第三方API, key{},apiKey);// 错误正确做法// 只打印是否存在log.info(用户登录: {}, 密码: {},username,password!null?[已设置]:[未设置]);// Token只打印部分log.info(Token: {}...,token.substring(0,8));验证脱敏效果写个测试用例TestpublicvoidtestSensitiveMask(){UserusernewUser();user.setName(张三);user.setPhone(13812345678);user.setIdCard(320123199001011234);StringmaskedSensitiveUtil.mask(user);// 验证脱敏后不包含原始数据assertFalse(masked.contains(13812345678));assertFalse(masked.contains(320123199001011234));// 验证脱敏格式正确assertTrue(masked.contains(138****5678));assertTrue(masked.contains(3201**********1234));}日志安全审计除了脱敏还要控制日志访问权限。我们有几台日志服务器分布在不同机房之前权限管理很乱。现在用星空组网把所有节点连起来后统一通过跳板机访问权限管控清晰多了。总结日志脱敏方案选择方案优点缺点推荐场景代码层最可控需要改代码新项目日志框架层全局生效性能有损耗老项目改造采集层不改代码本地日志仍有敏感信息补充方案落盘后处理处理历史数据不实时应急处理核心原则能不打印的就不打印必须打印的要脱敏脱敏要分级多层防护日志安全这块有经验的欢迎交流~
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

学会wordpress建站做个网站多少钱啊

企业级文档智能处理:PPStructureV3如何重塑业务流程 【免费下载链接】PaddleOCR 飞桨多语言OCR工具包(实用超轻量OCR系统,支持80种语言识别,提供数据标注与合成工具,支持服务器、移动端、嵌入式及IoT设备端的训练与部署…

张小明 2026/1/10 6:03:31 网站建设

洛阳网站建设启辰网络如何进行网站域名解析

在无监督学习的聚类家族中,层次聚类以 “可解释的层级结构” 脱颖而出,而DIANA(Divisive Analysis) 作为分裂式层次聚类的经典代表,靠 “从整体拆分为局部” 的思路,在细分场景中颇受欢迎。今天咱们深入聊聊…

张小明 2026/1/10 2:23:24 网站建设

球类网站如何做宣传wordpress上传安装包

终极免费AI桌面应用Chatbox完整使用指南:快速上手与高效配置 【免费下载链接】chatbox Chatbox是一款开源的AI桌面客户端,它提供简单易用的界面,助用户高效与AI交互。可以有效提升工作效率,同时确保数据安全。源项目地址&#xff…

张小明 2026/1/11 2:24:46 网站建设

腾讯云网站备案不能用阿里云店面怎么做位置定位

构建高精度FAQ机器人:Kotaemon结合微调模型最佳实践 在企业客服中心,每天可能要处理成千上万条关于“如何重置密码”“订单为何未发货”的重复提问。传统FAQ系统靠关键词匹配,面对“我登不进去账号”和“登录失败怎么办”这种语义相近但措辞不…

张小明 2026/1/10 0:05:54 网站建设

wordpress网站地图生成插件大连建网站

lc2505遍历数组累加前缀和,不断将当前数和前缀和与结果做或运算最终得到所有子序列和的或值算所有子序列和的或值,只需看每个二进制位是否能被“激活”:子序列和的任意二进制位为1,必然对应1.“单个元素”2.或“某个前缀和”的该位…

张小明 2026/1/11 0:16:10 网站建设

常州市建设银行网站如何利用社交网站做招聘

1.问题当zset的score有较多相同值,通过ZREVRANGEBYSCORE等命令查询时,可能出现死循环,查询不完的情况。2.解决方案2.1 计算offset每次查询完一页后,计算ZREVRANGEBYSCORE查询的最小值,判断和前一个值是否相等&#xff…

张小明 2026/1/10 15:01:39 网站建设