V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Tink
V2EX  ›  问与答

如何保护 PAC 文件中的 HTTP 代理不被恶意滥用?

  •  
  •   Tink · 2017-06-22 15:19:36 +08:00 · 4574 次点击
    这是一个创建于 2504 天前的主题,其中的信息可能已经有所发展或是发生改变。
    之前想了个方法,用 nginx 给 pac 文件加上 basic_auth,但是发现在 windows 系统中没法使用 http://abc:[email protected]/proxy.pac 这样的形式填入自动代理设置。。

    iOS 和 Mac 都没问题,那么问题来了,怎么保护 pac 文件里的 http 代理呢
    25 条回复    2017-06-22 22:09:06 +08:00
    cloverstd
        1
    cloverstd  
       2017-06-22 15:59:54 +08:00
    我知道网上的免费代理哪里来的
    Tink
        2
    Tink  
    OP
       2017-06-22 16:04:16 +08:00
    @cloverstd #1 大多数是扫出来的吧,这个可以装个防扫的东西就行了,主要是如果 pac 文件被别人拿到了,那就是明文了,都不需要扫
    miaomiao888
        3
    miaomiao888  
       2017-06-22 16:07:19 +08:00
    给 PAC 文件混淆加密
    Tink
        4
    Tink  
    OP
       2017-06-22 16:12:17 +08:00
    @miaomiao888 #3 求一个教程,很关键!
    miaomiao888
        5
    miaomiao888  
       2017-06-22 16:18:27 +08:00
    @Tink 没有教程,但似乎 PAC 也是用的 JS 语法,所以应该用 JS 混淆也行
    https://raw.githubusercontent.com/bannedbook/fanqiang/master/jw/new.pac
    Tink
        6
    Tink  
    OP
       2017-06-22 16:21:22 +08:00
    @miaomiao888 #5 明白了,多谢!
    gstqc
        7
    gstqc  
       2017-06-22 16:28:14 +08:00
    代理加账号密码。
    然后大多数客户端都支持带认证的代理的。
    Tink
        8
    Tink  
    OP
       2017-06-22 16:32:28 +08:00
    @gstqc #7 主要是我这边环境不支持认证,支持的话我就自己搞了。。。
    yangff
        9
    yangff  
       2017-06-22 16:35:02 +08:00
    Tink
        10
    Tink  
    OP
       2017-06-22 16:38:34 +08:00
    @yangff #9 passcode 是什么?
    yangff
        11
    yangff  
       2017-06-22 16:43:58 +08:00
    @Tink 你的密码,甚至你可以

    http://example.com/some_secret_string.pac

    安全性和你用 basic auth 几乎是一样的
    Tink
        12
    Tink  
    OP
       2017-06-22 16:44:13 +08:00
    @yangff #9 htpasswd 加密后的?
    crab
        13
    crab  
       2017-06-22 16:49:06 +08:00
    你这个问题矛盾吧。
    pac 你不公开,别人也弄不到啊。
    公开了,拿到肯定能用你的代理了。
    或者可以在代理服务器上做域名得白名单,不存在得不给代理。
    Tink
        14
    Tink  
    OP
       2017-06-22 16:50:07 +08:00
    @yangff #11 没理解啊亲,passcode 是啥密码? basic_auth 的吗?

    http://example.com/?passcode=abc:123

    这样的?


    然后 http://example.com/some_secret_string.pac 这个又是啥意思
    easyzhao
        15
    easyzhao  
       2017-06-22 17:02:26 +08:00
    可以这样 就是麻烦一点
    1.给每个用户 生成 唯一的一个 pac 地址 类似用户的 token
    2.然后用户获取 pac 文件时 可获取 用户的 ip 给该 ip 开白名单
    3.把代理服务器开白名单 才可以访问
    Tink
        16
    Tink  
    OP
       2017-06-22 17:05:13 +08:00
    算了,我按照 9L 给的办法试试,直接在 nginx 里判断 url 参数
    yangff
        17
    yangff  
       2017-06-22 17:11:09 +08:00
    @Tink 就是直接把你的 pac 文件名搞成你的密码,然后不要在服务器上直接的链接…

    basic auth 本质上就是丢一个 base64 编码的密码,所以如果 basic auth 对你的安全性要求是 ok 的话,这样搞也是 ok 的
    Tink
        18
    Tink  
    OP
       2017-06-22 18:21:37 +08:00 via iPhone
    @yangff 这个办法不好。。

    我觉得你说的 passcode 的办法还是可以的,我直接在 nginx 里判断问号后面的 passcode
    Genteure
        19
    Genteure  
       2017-06-22 20:18:53 +08:00
    我觉得文件后面加 passcode 参数、改一个猜不到的文件名都是不错的方法。不要让其他人拿到文件就可以了。

    混淆真的是没啥用。。随手一搜,比如 http://jsnice.org/ 用 #5 发的那个例子测试,五秒钟就看到原本的内容了。况且这也只是转了个码而已,算不上混淆。
    Actrace
        20
    Actrace  
       2017-06-22 20:53:10 +08:00
    楼主可以试试这个在线的 pac
    https://pac.ink
    kslr
        21
    kslr  
       2017-06-22 20:55:09 +08:00
    之前在路由器的代理被人扫到拿来发 spam 邮件。。 欠了不少流量
    Tink
        22
    Tink  
    OP
       2017-06-22 20:59:41 +08:00 via iPhone
    @Actrace 这个是怎么解决这个问题的
    Actrace
        23
    Actrace  
       2017-06-22 21:04:39 +08:00
    @Tink 官方提供 URL 不存在被扫到的可能性,而且是 HTTPS 的。
    另外如果要更进一步的话,我建议你可以在 iptables 上做个规则,只让自己熟知的网段访问。这样基本可以过滤 99%了。
    Tink
        24
    Tink  
    OP
       2017-06-22 21:29:03 +08:00 via iPhone
    @Actrace @Actrace 主要是现在这个网段很不确定,所以没法用 iptables
    xiaopc
        25
    xiaopc  
       2017-06-22 22:09:06 +08:00 via Android
    Windows 可以试试 NTLM Auth
    (渗透提权常用的😄
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1043 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 23:48 · PVG 07:48 · LAX 16:48 · JFK 19:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.