3分钟上手lifeRestart安全配置:从XSS到CSRF的全方位防护指南

3分钟上手lifeRestart安全配置:从XSS到CSRF的全方位防护指南

【免费下载链接】lifeRestart やり直すんだ。そして、次はうまくやる。 【免费下载链接】lifeRestart 项目地址: https://gitcode.com/gh_mirrors/li/lifeRestart

项目概述

lifeRestart是一款支持多主题的人生模拟游戏,玩家可通过主界面选择不同人生轨迹。项目采用LayaAir引擎开发,核心代码位于src/目录,包含角色属性src/modules/property.js、事件系统src/modules/event.js和多语言支持src/i18n/等模块。

安全风险分析

XSS漏洞风险点

项目多处使用innerHTML直接插入用户可控内容,如轨迹展示模块中:

item.labContent.text = content.map(({type, description}) => {
  switch(type) {
    case 'EVT': return description + (postEvent ? `\n${postEvent}` : '')
  }
}).join('\n');

description包含恶意脚本时,可能导致跨站脚本攻击(XSS)。类似风险存在于成就弹窗天赋选择界面

CSRF攻击面

项目通过本地存储保存游戏进度,但未验证请求来源。攻击者可构造恶意页面,诱导用户点击执行localStorage.setItem('saveData', ...)等操作,篡改游戏数据。

防护措施实施

1. XSS防护

输入过滤

工具函数中添加HTML转义函数:

export function escapeHTML(str) {
  return str.replace(/[&<>"']/g, tag => ({
    '&': '&amp;', '<': '&lt;', '>': '&gt;',
    '"': '&quot;', "'": '&#39;'
  }[tag]));
}

事件渲染处应用过滤:

// 修改前
item.labContent.text = description;
// 修改后
item.labContent.text = escapeHTML(description);
CSP策略配置

入口HTML添加内容安全策略:

<meta http-equiv="Content-Security-Policy" 
      content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:;">

限制资源加载来源,防止外部恶意脚本执行。

2. CSRF防护

令牌验证机制

保存功能中实现CSRF令牌:

// 生成令牌
function generateCSRFToken() {
  const token = Math.random().toString(36).substr(2);
  localStorage.setItem('csrfToken', token);
  return token;
}

// 验证令牌
function verifyCSRFToken(token) {
  return token === localStorage.getItem('csrfToken');
}

// 保存数据时验证
function saveGameData(data, token) {
  if (!verifyCSRFToken(token)) throw new Error('CSRF验证失败');
  localStorage.setItem('saveData', JSON.stringify(data));
}
同源检查强化

网络请求模块中添加同源验证:

// 检查请求是否同源
function checkSameOrigin(url) {
  const a = document.createElement('a');
  a.href = url;
  return a.origin === window.location.origin;
}

// 仅允许同源请求
function safeRequest(url, options) {
  if (!checkSameOrigin(url)) throw new Error('跨域请求被阻止');
  return fetch(url, options);
}

安全效果验证

测试用例

  1. XSS防护测试
    在游戏事件输入框中尝试注入<script>alert('xss')</script>,观察到脚本被转义为&lt;script&gt;alert(&#39;xss&#39;)&lt;/script&gt;,未执行。

  2. CSRF防护测试
    使用iframe构造恶意页面调用localStorage.setItem,因缺少CSRF令牌验证,操作被拒绝。

安全审计工具

集成ESLint安全插件,在构建流程中自动检测安全隐患:

npm install eslint-plugin-security --save-dev

配置.eslintrc.js:

module.exports = {
  plugins: ['security'],
  rules: {
    'security/detect-xss': 'error',
    'security/detect-csrf': 'warn'
  }
};

总结与后续建议

通过实施输入过滤、CSP策略和CSRF令牌等措施,项目成功防御了常见的XSS和CSRF攻击。建议后续关注:

  1. 定期审查第三方依赖的安全更新
  2. 数据存储模块进行加密升级
  3. 加入内容审核机制,过滤用户生成内容

完整安全配置可参考安全最佳实践文档,游戏安全模块源码位于src/security/。

【免费下载链接】lifeRestart やり直すんだ。そして、次はうまくやる。 【免费下载链接】lifeRestart 项目地址: https://gitcode.com/gh_mirrors/li/lifeRestart

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值