3分钟上手lifeRestart安全配置:从XSS到CSRF的全方位防护指南
【免费下载链接】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 => ({
'&': '&', '<': '<', '>': '>',
'"': '"', "'": '''
}[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);
}
安全效果验证
测试用例
-
XSS防护测试
在游戏事件输入框中尝试注入<script>alert('xss')</script>,观察到脚本被转义为<script>alert('xss')</script>,未执行。 -
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攻击。建议后续关注:
完整安全配置可参考安全最佳实践文档,游戏安全模块源码位于src/security/。
【免费下载链接】lifeRestart やり直すんだ。そして、次はうまくやる。 项目地址: https://gitcode.com/gh_mirrors/li/lifeRestart
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



