1
hellohy 2023-03-24 21:37:01 +08:00
即使您使用正则表达式过滤掉所有非字母数字和分隔符的字符,JavaScript 仍然存在恶意代码被执行的风险,因为恶意代码可以使用各种技巧来绕过这种过滤。
例如,恶意代码可以使用 JavaScript 中的 Unicode 编码来编码其代码,从而使其绕过您的过滤。恶意代码还可以使用 JavaScript 中的注释来隐藏其代码,使其不易被检测到。 另外,使用 eval() 函数执行动态拼接的代码也是不安全的做法,因为它会执行任何传递给它的代码,包括恶意代码。建议使用更安全的方式来执行动态拼接的代码,例如使用 Function() 构造函数或使用模板字面量来拼接代码。 综上所述,为了确保 JavaScript 代码的安全性,建议不要使用 eval() 函数来执行动态拼接的代码,并采取其他措施来防止恶意代码的执行。 |
2
LLaMA OP |
3
aloxaf 2023-03-24 22:40:57 +08:00
也就是说你要 eval 的内容只包含数字、字母、逗号?
我认为这样应该确实没法执行恶意代码了,但是我有点难以想象这是什么内容——你确定没有方括号,引号之类的字符吗? |
4
LLaMA OP @aloxaf #3 确实没有,每个分隔符隔开的是纯字母数字组成的 ID 。程序会 forEach 这个 split 后的结果,然后 eval 每一项(每一项都会过滤掉全部非字母数字)
|
5
JonyFish 2023-03-25 02:18:40 +08:00 via Android
理论上是安全的,实际上就不好说了
|
6
oott123 2023-03-25 08:55:13 +08:00 via Android
但我还是好奇你想做什么。听着和 str.split(",").map(key => globalThis[key]) 效果一样?
|
7
proxychains 2023-03-25 09:19:29 +08:00 1
@Livid 1F chatgpt
|
8
learningman 2023-03-25 09:25:12 +08:00 via Android
你语言的不会是 paraeInt 啥的吧
|
9
DonDonc 2023-03-25 11:42:45 +08:00 1
考虑到 JavaScript 的各种神奇特性,说不定存在什么风险。
http://www.jsfuck.com/ |
10
Livid MOD |
11
kkocdko 2023-03-25 17:42:17 +08:00 via Android
虽然但是,还是希望给出 x 问题。
|
12
azcvcza 2023-03-25 17:42:51 +08:00
给用户直接执行的话,只要下功夫就没有绕不过的,jsfuck,16 进制,各种奇怪的编码防不胜防
|
13
jones2000 2023-03-26 01:37:28 +08:00
把在 eval 里面执行的代码,自己做下词法,语法分析,生成 AST (抽象语法树),遍历语法树, 把有危害的操作节点都剔除掉,剩下的就是安全的。 然后再还原成 js 代码,调用 eval 执行。
|