LLaMA

JavaScript 由于某种需求必须 eval 拼接代码执行**(不要讨论为什么)**,如果正则过滤掉所有非字母数字和分隔符,的字符,还有恶意代码被执行风险吗?

  •  
  •   LLaMA · Mar 24, 2023 · 2752 views
    This topic created in 1171 days ago, the information mentioned may be changed or developed.
    14 replies    2023-03-27 08:44:38 +08:00
    hellohy
        1
    hellohy  
       Mar 24, 2023
    即使您使用正则表达式过滤掉所有非字母数字和分隔符的字符,JavaScript 仍然存在恶意代码被执行的风险,因为恶意代码可以使用各种技巧来绕过这种过滤。

    例如,恶意代码可以使用 JavaScript 中的 Unicode 编码来编码其代码,从而使其绕过您的过滤。恶意代码还可以使用 JavaScript 中的注释来隐藏其代码,使其不易被检测到。

    另外,使用 eval() 函数执行动态拼接的代码也是不安全的做法,因为它会执行任何传递给它的代码,包括恶意代码。建议使用更安全的方式来执行动态拼接的代码,例如使用 Function() 构造函数或使用模板字面量来拼接代码。

    综上所述,为了确保 JavaScript 代码的安全性,建议不要使用 eval() 函数来执行动态拼接的代码,并采取其他措施来防止恶意代码的执行。
    LLaMA
        2
    LLaMA  
    OP
       Mar 24, 2023   ❤️ 1
    @hellohy 过滤掉所有非字母数字和分隔符的字符还怎么使用 JavaScript 中的 Unicode 编码来编码其代码?这是 GPT 的回答吧,全是前后矛盾的内容和废话 @Livid
    aloxaf
        3
    aloxaf  
       Mar 24, 2023
    也就是说你要 eval 的内容只包含数字、字母、逗号?
    我认为这样应该确实没法执行恶意代码了,但是我有点难以想象这是什么内容——你确定没有方括号,引号之类的字符吗?
    LLaMA
        4
    LLaMA  
    OP
       Mar 24, 2023
    @aloxaf #3 确实没有,每个分隔符隔开的是纯字母数字组成的 ID 。程序会 forEach 这个 split 后的结果,然后 eval 每一项(每一项都会过滤掉全部非字母数字)
    JonyFish
        5
    JonyFish  
       Mar 25, 2023 via Android
    理论上是安全的,实际上就不好说了
    oott123
        6
    oott123  
       Mar 25, 2023 via Android
    但我还是好奇你想做什么。听着和 str.split(",").map(key => globalThis[key]) 效果一样?
    proxychains
        7
    proxychains  
       Mar 25, 2023   ❤️ 1
    @Livid 1F chatgpt
    learningman
        8
    learningman  
       Mar 25, 2023 via Android
    你语言的不会是 paraeInt 啥的吧
    DonDonc
        9
    DonDonc  
       Mar 25, 2023   ❤️ 1
    考虑到 JavaScript 的各种神奇特性,说不定存在什么风险。
    http://www.jsfuck.com/
    Livid
        10
    Livid  
    MOD
    PRO
       Mar 25, 2023
    @benrezzagmehamed
    @proxychains

    谢谢。那个使用 ChatGPT 回复的账号已经被彻底 ban 。
    kkocdko
        11
    kkocdko  
       Mar 25, 2023 via Android
    虽然但是,还是希望给出 x 问题。
    azcvcza
        12
    azcvcza  
       Mar 25, 2023
    给用户直接执行的话,只要下功夫就没有绕不过的,jsfuck,16 进制,各种奇怪的编码防不胜防
    jones2000
        13
    jones2000  
       Mar 26, 2023
    把在 eval 里面执行的代码,自己做下词法,语法分析,生成 AST (抽象语法树),遍历语法树, 把有危害的操作节点都剔除掉,剩下的就是安全的。 然后再还原成 js 代码,调用 eval 执行。
    jifengg
        14
    jifengg  
       Mar 27, 2023
    @DonDonc 我第一时间也想到了这个。而且,楼主还保留 字母数字和分隔符,那不是分分钟被恶意
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5719 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 01:41 · PVG 09:41 · LAX 18:41 · JFK 21:41
    ♥ Do have faith in what you're doing.