上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

【油猴脚本开发指南】关于脚本与网页作用域的引申

[复制链接]
  • TA的每日心情
    擦汗
    4 天前
  • 签到天数: 194 天

    [LV.7]常住居民III

    719

    主题

    6070

    回帖

    6847

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6847

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-11-27 14:59:49 | 显示全部楼层 | 阅读模式

    前文

    最近又碰到了一个比较有意思的问题
    个人认为这篇文章比较有助于大家理解
    由于涉及到一些原理的概念
    说起来如果难吧,又不难
    如果说简单吧,就还有点难

    开始

    如果我们使用var来声明变量,这个时候会挂载到window,输入变量名或者window.变量名都是没问题的
    图片.png
    但是如果声明let或者const,变量并不在window作用域上,只能使用water进行引用
    图片.png
    那我们在油猴脚本里如果是沙盒模式,就没办法用unsafeWindow来引用变量了
    那我们该怎么搞呢?
    我第一反应是在unsafeWindow下写一个函数并且执行

    unsafeWindow.fuck_let=function(){
        console.log(water)
    }

    经过测试是可以正确输出的
    图片.png
    但是很快这种猜想就被推翻了
    因为即使输出
    console.log(water)
    依然可以打印出来内容
    这是为什么呢?
    图片.png
    我们在油猴脚本里打个debugger
    然后格式化看上方代码
    具体我们之前也分析过
    大概就是往window赋值一个函数
    然后调用
    函数内部通过with设置一下this,this内包含一个window
    所以产生了一个proxy window
    最后才执行到我们的函数
    也就是理一下作用域
    可以得出结论是

    window
    proxy window(我们with中的this所产生的属性)
    函数
    我们的代码

    如果我们试图console.log(water)
    那就会先找到函数
    函数里面没有
    再找到proxy window
    proxy window也不存在这个属性
    然后就找到了网页内的window上的这个属性了
    所以说我们脚本可以直接通过
    console.log(water)
    找到网页中定义的let或者const变量

    引申

    如果我们直接在油猴内书写
    global_test=888
    也会直接被设置到网页中
    因为严格意义上来讲proxy window只是油猴创造的一个作用域
    并不属于网页的最初涉及
    这时候global_test没有声明变量操作符let const var等
    根据js涉及会直接逃逸到最顶层
    也就是网页的window上
    该情况的名称叫做Global variable leak,全局变量泄露
    这个时候就出现了不安全因素!
    我们脚本的变量跟网页出现了共享读写!
    所以大家要避免这种操作

    结语

    撒花花~

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情

    2024-8-14 16:46
  • 签到天数: 69 天

    [LV.6]常住居民II

    6

    主题

    127

    回帖

    222

    积分

    高级工程师

    积分
    222

    油中2周年生态建设者

    发表于 2022-11-28 12:12:41 | 显示全部楼层
    GG录个视频教程,绝对流量爆炸,很多小白需要这个
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    4 天前
  • 签到天数: 194 天

    [LV.7]常住居民III

    719

    主题

    6070

    回帖

    6847

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6847

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-11-28 14:12:29 | 显示全部楼层
    极品小猫 发表于 2022-11-28 12:12
    GG录个视频教程,绝对流量爆炸,很多小白需要这个

    我为啥怀疑小猫偷偷写了自动回复脚本
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表