- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个游戏的想法,人们可以为他们的 Angular 色输入一些简单的指令,例如player.goLeft()或player.attackInFront(),为此我让人们在文本框中输入他们的代码,然后我解析将其放入 eval() 中。这很有效,但它也允许人们通过输入诸如player.health = Infinity;之类的内容来更改自己的 Angular 色对象。或类似的东西。我有一个希望允许人们使用的功能列表,但我不确定如何限制它只使用它们。
我知道不让人们使用 eval 的全部目的是为了避免意外的跨站点脚本编写,但我不确定还能如何做到这一点。如果您有建议,请发表评论。
我问了周围的一些人要做什么,大多数人建议以某种方式改变范围(这是我无法弄清楚的),或者向我的代码中的每个函数添加一些奇怪的参数,这些参数需要是特定的string 来执行任何函数,但这看起来很老套,因为我是用 p5js 在浏览器中制作游戏,所以很容易检查元素并查看密码是什么。
基本上每个字符都有一个名为“指令”的变量,它只是一个 JavaScript 字符串。然后我通过执行 eval(playerList[i].instruction); 来执行游戏的每一帧;
tl;dr,我怎样才能只允许执行特定的函数而不允许执行其他函数?
编辑:我忘了提及,我还计划向玩家提供信息,以便人们可以编写适合情况的代码。例如,会有一个名为 Vision 的参数,其中包含 Vision.front 和 Vision.Left 等。这些变量只会说明网格中周围是否有敌人、墙壁、花等。有些人建议我用关键字替换一些函数,但这会损害使用 if 语句并使其表现不同的想法。
编辑2:很抱歉这篇文章中缺少代码,但是由于我的制作方式,一半的逻辑是在服务器端编写的,一半是在客户端运行的。它会有点大,说实话,我不确定我的代码的可读性如何,到目前为止我仍然得到了很大的帮助,我非常感谢它。感谢所有回答的人
最佳答案
不要使用 eval() 将任意用户输入作为代码执行!没有办法允许您的代码运行函数但又阻止 eval() 执行相同的操作。
相反,您应该做的是制作玩家可以使用的命令映射,将它们映射到函数。这样,您就可以根据 map 查找来运行该函数,但如果它不在 map 中,则无法运行。您甚至可以通过在空格处分割字符串并将数组分布在函数参数上来允许参数。像这样的事情:
const instructions = {
goLeft: player.goLeft.bind(player),
goRight: player.goRight.bind(player),
attackInFront: player.attackInFront.bind(player)
};
function processInstruction(instruction_string) {
const pieces = instruction_string.split(' ');
const command = pieces[0];
const args = pieces.slice(1);
if (instructions[command]) {
instructions[command](...args);
} else {
// Notify the user their command is not recognized.
}
};
这样,玩家可以输入诸如 goLeft 5 6
之类的内容,它会调用 player.goLeft(5,6)
,但如果他们尝试输入 otherFunction 20 40
它只会说它无法识别,因为 otherFunction
不在 map 中。
关于javascript - 如何从全局范围中切断函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616796/
我有一个自定义的 android 开关,它是这样定义的 和像这样的拇指选择器项
很不情愿地,我请求你们帮助我克服我的大脑卡住。我正在录制音频,但遇到一个问题,无法在不丢失一半的情况下获取录制的音频。 recAudioInput = recAudioContext.createMe
我正在学习本教程:http://code.tutsplus.com/tutorials/android-user-interface-design-creating-a-numeric-keypad-
我在 Swift 中使用 CGImageCreateWithImageInRect 在触摸位置创建部分图像的副本。 我的代码运行良好,除非用户触摸屏幕边缘并且矩形大小落在 View 框架之外。它不是返
我有一张正在创建的 map ,它的一部分似乎被切断或偏离了中心。我已经尝试添加 google.maps.event.triggerr(map, 'resize') 但它仍然被切断。有什么想法吗?
我有一个包含 5 列的数据框,所有列都包含数值。列代表时间步长。我有一个阈值,如果在规定时间内达到,就会阻止值发生变化。所以假设原始值是 [ 0 , 1.5, 2, 4, 1] 排列成一行,阈值是 2
有没有办法以编程方式关闭电源或关闭 Mac 上的 USB 端口? 最佳答案 我相信 USB 电源通常直接来自电源。它可能会通过主板或其他一些硬件将其与数据线结合起来,但我认为电压不会通过任何可编程电路
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
Android 上是否有接口(interface)或 API 或其他东西允许应用弹出电缆并停止从电缆供电或接收电源? 我查看了 USBDevice(包括 USBInterfaces),似乎找不到任何可
我知道我可以让 Navigation Header 在 actionBar 上滑动,但我只想将整个 Navigation drawer 向下移动,因为我想保持“后退”按钮和 actionBar 始终可
我有一个主要的 viewController A 和一个 UITabBar。我的问题是,当我滚动到最后一个单元格,然后在 UITableView 中单击单元格进入 viewController B,然
我有一个 Web 应用程序,在 Safari 中呈现时看起来不错,但浏览器不遵守打印媒体查询。在 Chrome 中,整个可打印区域看起来都不错,但在 Safari 中,它似乎只是可见内容的一些变体。
当使用带有 SeekBar View 的自定义 thumb drawable 时,拇指 drawable 在 View 的左右边缘被剪裁。 如何解决此问题? 最佳答案 您应该可以通过设置 paddin
我在文件中有一个字符串: git@github.com:myorg/Myrepo.git git@github.com:myorg/Mysecondrepo.git git@github.com:my
我有一个信息亭网页,其中加载了55px标题,而iFrame则占据了其下方的其余窗口。在iFrame中,我有一个页面可以懒惰地加载项目网格。我们一次加载50个项目,然后再加载50个,依此类推。每个项目都
我正在使用jquery form plugin它使用 jquery ajax 来完成大部分工作。我们有 jquery 1.7.2 我们使用它通过 ajax 向服务器发送表单,并返回指示成功的值或返回带
这是我的按钮元素: Let Me In, please! 这是 CSS: .btn-submit { margin: 0; padding: 0; border: none; font-family:
我的 CSS 样式表中有以下类: .errormsg { border:solid 1px Red; padding:5px 20px 5px 20px; margin:5px; co
我将 JWPlayer 与包含字幕的 HLS 文件一起使用。但是,当我在 iPhone 或其他 iOS 设备上播放此文件时,它会切断字幕: 有没有办法提高移动设备上字幕的高度?我的 HLS 文件是:
我有一个放置在 View 内部的 UIScrollView(界面生成器文档 .xib/.m/.h),但是由于 UITabBarController,UIScrollView 的下半部分被剪裁并且不显示
我是一名优秀的程序员,十分优秀!