1. 数据库服务
在系统开发中,往往需要在系统运行前,先对数据库中的表进行数据初始化。对于百度云内网服务器,因为数据库不能用navicat等工具从本机连接,所以只能采用百度云内网的数据管理DMS执行sql脚本的方式。
DMS中每执行一个脚本(有条数限制,最多只能1000条语句),就需要审批一次。
审批的流程涉及到审批模板和审批人。
审批模板用的一般都是采用默认模板(外包人员不太可能创建一下新的审批模板。)
这时审批节点就比较关键了,因为默认的节点审批人一般都是百度的大领导或是百度相关组的负责人,不可能随时给审批,等待的时间成本太高,所以要在审批节点上动点小手段。
不要使用默认的审批人,而是把审批人设置为自己的账号(同一个账号提交和审批),这样就能绕过百度的审批流程。
2. 邮箱发送
邮箱发送有很多框架都能实现。以使用发送端口分类,大体分为三类。一类是默认使用端口25 ,一类使用端口465,一类使用端口587。
SMTP(简单邮件传输协议) :
端口25:SMTP的标准端口,用于邮件的发送。然而,由于这个端口容易被滥用用于发送垃圾邮件,许多互联网服务提供商(ISP)和托管服务可能会对其进行 限制或完全封锁。
端口465:最初被设计用于SMTPS(即SMTP over SSL),提供加密的邮件发送服务。虽然这个端口在1997年被IANA(互联网号码分配局)废弃,并推荐使用 端口587,但它仍然被广泛使用,特别是对于需要从一开始就建立加密连接的场景。
端口587:为邮件提交(MSA-邮件提交代理)设计的端口,用于客户端向邮件服务器提交要发送的邮件。推荐用于支持STARTTLS的邮件发送,这允许从一个非加密连接开始,然后升级到加密连接。
端口587用的场合特殊,使用极少。目前市面上的框架都是基于25端口发送的。
百度云内网为了防止发送垃圾邮箱,禁止了端口25的使用,所以 java开发中,spring-boot-starter-mail 等框架一旦部署到百度内网服务器,是必然无法使用的,所以只能使用javax.mail 这种jdk中最原生的api去实现(原生api使用的是465端口)。
python语言开发邮箱发送也有类似的问题,如果遇到务必谨慎。
3. 安全检测
百度内网有着极为严格的安全检测。程序员开发时候,喜欢引入大量的成熟组件或是框架,以提高开发效率。可是这些组件所带有一些附带功能,却不能机翼被开发人员所忽略,这些附带功能所隐藏的安全漏洞在百度内网的安全检测机构面前基本无所遁形。因此引入组件的时候,务必先对组件的安全性进行调研,以免被发函整改,甚至返工。
下面就对几个常见的框架或是组件的所蕴含的安全隐患做梳理,并提出解决办法。
-
druid
Druid 是一个 JDBC 组件,可以监控数据库访问性能,Druid 内置提供了一个功能强大的 StatFilter 插件,能够详细统计 SQL 的执行性能,这对于线上分析数据库访问性能有帮助。
但是Druid 自动提供了两个监控页面,*/druid/weburi.html 和 */druid/index.htm,该页面会暴露内网数据库的运行状态,是一个极大的隐患。解决办法如下:
spring: datasource: druid: filte: stat: enabled: false wall: enabled: false slf4j: enabled: false log4j2: enabled: false log4j: enabled: false commons-log: enabled: false stat-view-servlet: enabled: false login-username: username login-password: ysername web-stat-filter: enabled: false session-stat-enable: false
加入如下配置即可。其中login-username,login-password 可自行设置,login-password要有较高的密码强度。
2. swagger
Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型紧密集成到服务器端的代码,允许API来始终保持同步。对于开发人员,swaager 可以实现接口文档在线自动生成,并对功能测试有极大的帮助。
但是swagger 同时也可能导致 系统接口的泄漏。所以处理方式如下:
在SwaggerConfig类上,加入这么一行:
@ConditionalOnProperty(name = "swagger.enable", havingValue = "true"), 通过application.yml 中swagger.enable 参数值进行关闭
3. FastAPI
FastAPI 是一个基于Python 3.6+ ,用于快速构建 现代、快速(高性能)的 web 框架。
FastAPI 试用的开发者很多,特别是一些初入门者。FastApi使用简单,易上手,可是也同样直接融入了很多组件。其中有两个组件会产生安全隐患。分别是swagger 和 open-api。
1.swagger
1.调用fastapi 时候,直接加上 docs_url=None,redoc_url=None 两个参数,禁用swagger app = FastAPI(docs_url=None,redoc_url=None)
2.open-api
引入 starlette 组件 from starlette.requests import Request from starlette.responses import JSONResponse 在app = FastAPI(docs_url=None,redoc_url=None) 语句下,直接加入 @app.middleware("http") async def block_openapi(request: Request, call_next): if request.url.path == "/openapi.json": return JSONResponse({"message": "Access forbidden"}, status_code=403) return await call_next(request) 禁止open-api的访问。