以下围绕你提到的要点,对“TPWalletFEG(可视作面向链上/支付场景的钱包与交易系统)”做一份结构化、偏工程视角的详细讲解。由于未提供具体原文,我将以通用的安全与平台工程最佳实践来组织内容,便于你直接用于文章改写或扩展。
一、防XSS攻击(跨站脚本)
1)为什么钱包/支付系统尤其要防XSS
- 钱包系统通常包含:用户昵称、交易备注、合约事件展示、区块链地址、合约交互返回信息等。只要这些字段可被“用户输入”或“链上数据”影响,就可能注入恶意脚本。
- 支付类页面往往具备敏感交互:签名请求、授权弹窗、支付确认、资产展示。XSS一旦成功,攻击者可进行会话劫持、钓鱼诱导、篡改交易参数展示,造成直接经济损失。
2)核心策略:输入与输出双重防护
- 输入端校验(Validation):对昵称、备注、标签等做字符集与长度限制;对疑似脚本片段进行严格过滤(注意不要“只靠黑名单”)。
- 输出端转义(Escaping):在前端渲染任何可变内容时进行 HTML 实体转义,禁止把未可信内容直接拼接到 innerHTML / dangerouslySetInnerHTML。
- CSP(内容安全策略):通过 Content-Security-Policy 限制脚本来源、禁止内联脚本与不必要的 eval,从浏览器层面显著降低XSS利用率。
3)安全渲染与框架约束
- 使用模板引擎/框架的安全渲染模式:例如 React 默认会做转义,Vue/Angular 也有相应安全机制。
- 对富文本或链接展示:
- 禁止任意 HTML 注入;
- 若必须展示“富文本”,则采用白名单策略的 HTML Sanitizer(仅允许受控标签与属性)。
- 链接必须做协议白名单(http/https 等),拒绝 javascript:、data: 等危险协议。
4)会话与权限的XSS缓解
- Cookie 设为 HttpOnly,避免 JS 读写关键令牌。
- CSRF/鉴权:即使防了XSS,也应对跨站请求做 CSRF 防护(token 校验、SameSite 策略等)。
- 交易签名流程:前端展示内容要有“与签名参数绑定”的一致性校验,避免攻击者通过XSS篡改展示而实际签名恶意参数。
5)日志与告警
- 对“疑似注入载荷”(如