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