奇葩的后端分页要求 --后端大佬安排&前端小白实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qshu
V2EX    程序员

奇葩的后端分页要求 --后端大佬安排&前端小白实现

  •  
  •   qshu 2019-05-25 16:41:47 +08:00 5252 次点击
    这是一个创建于 2356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    GET 参数 params 来获取指定页内容

    /api/cont?limit=数量&cOntinue=Base64 加密的 JSON 页数

    大家有没有遇到过这样搞分页的,页码数 base64 加密?

    41 条回复    2019-05-26 18:26:08 +08:00
    viakiba
        1
    viakiba  
       2019-05-25 16:44:06 +08:00 via Android
    base64 只能称为编解码 不属于加密
    FrankFang128
        2
    FrankFang128  
       2019-05-25 16:44:46 +08:00
    这不算奇葩,只能算脱裤子放屁多此一举。
    qshu
        3
    qshu  
    OP
       2019-05-25 16:45:47 +08:00
    @viakiba 编码人类不能直接理解与加密有什么区别(-_-)
    imnpc
        4
    imnpc  
       2019-05-25 16:46:27 +08:00
    页数 base64 ?我记得 get 传递 base64 会出问题来着?有些符号会变?
    yahon
        5
    yahon  
       2019-05-25 16:46:44 +08:00   1
    可以,但没必要。
    qshu
        6
    qshu  
    OP
       2019-05-25 16:48:06 +08:00
    @imnpc 大佬是这么要求的 出问题接着问他就把类似 "{"start":2}"这种字符串转 base64
    zjsxwc
        7
    zjsxwc  
       2019-05-25 16:49:16 +08:00
    如果 base64 后包含符号 & ? + 等符号时,
    你不就凉了 233333
    LancerComet
        8
    LancerComet  
       2019-05-25 16:49:33 +08:00
    如果是 JSON 的问题,可以 stringify 之后当字符串传,这种还挺多的
    Elethom
        9
    Elethom  
       2019-05-25 16:50:58 +08:00
    这种后端留着过年?怕不是来搞笑的吧。
    qshu
        10
    qshu  
    OP
       2019-05-25 16:51:50 +08:00
    @zjsxwc 好像是唉,把这放在 URL 真的无语
    tomczhen
        11
    tomczhen  
       2019-05-25 17:03:49 +08:00   6
    为了防止遍历分页还是有把分页编码或者加密的需求的。

    base64 中只有 / 和 + 字符,没有 & 和 ?,而且 web 上一般用 url safe base64,所以担心特殊字符的就算了。
    passerbytiny
        12
    passerbytiny  
       2019-05-25 17:08:13 +08:00
    难道是反爬?
    gaoryrt
        13
    gaoryrt  
       2019-05-25 17:08:36 +08:00
    @zjsxwc base64 编码之后合法字符包括 [A-Za-z/+=]
    讲道理应该是没问题的。。。吧
    qshu
        14
    qshu  
    OP
       2019-05-25 17:09:28 +08:00
    @passerbytiny 反爬好像是有那么点效果的
    qshu
        15
    qshu  
    OP
       2019-05-25 17:10:59 +08:00
    @tomczhen
    @gaoryrt 感谢,刚查了下,是没有影响的字符,才疏学浅了
    zjsxwc
        16
    zjsxwc  
       2019-05-25 17:12:51 +08:00
    @gaoryrt

    看了下普通数字是不会有特殊字符 0-9 总共就那么几个字母轮流替换
    Macolor21
        17
    Macolor21  
       2019-05-25 18:11:16 +08:00 via iPhone   4
    @qshu
    编码就是编码,加密就是加密,不能混淆。那我们的编程语言的也对普通人不可理解,那算加密么?
    另外这种风格我见国外的外部 api 也有用的,一般就是出于各种考虑和妥协的后果,不要见到什么不和自己的理念就吐槽,这种心态不太好。
    hanxiV2EX
        18
    hanxiV2EX  
       2019-05-25 18:25:12 +08:00 via Android
    加密 url 参数也不是这样搞的呀,接过 sdk 的都应该知道是给参数加盐后求 sign
    fundon
        19
    fundon  
       2019-05-25 18:31:51 +08:00
    还不如 POST 数据一把梭
    vevlins
        20
    vevlins  
       2019-05-25 18:37:34 +08:00
    反爬也不能用这种手段啊,太不优美。大佬都给你安排好了你还准备跟他肛一波不成?按照要求写呗
    Vegetable
        21
    Vegetable  
       2019-05-25 20:06:48 +08:00
    自以为是吧,不过 base64+urlencode 看起来的确不那么容易直接看出来,但是 f12 看一下,大家都会把 base64 过的字段解出来看一下的。所以这一步只是自己骗自己。
    MonoLogueChi
        22
    MonoLogueChi  
       2019-05-25 20:16:42 +08:00 via Android
    base64 没问题啊,jwt 就是 base64 编码的,有那么多人在用,为什么楼上说凉凉之类的。这样用也没什么问题吧,只要能解决需求就好,在 get 参数里做 base64 编码也是很常见的操作
    code2019
        23
    code2019  
       2019-05-25 20:20:12 +08:00
    不应该是 POST 嘛
    Lax
        24
    Lax  
       2019-05-25 20:50:36 +08:00
    如果目的是反爬的话,单单把参数放 json 里在 base64 这一种措施真的是没什么用,大佬的方案里是不是还有其它关键参数?
    winglight2016
        25
    winglight2016  
       2019-05-25 21:42:50 +08:00
    @code2019 post 没法缓存,不适合列表页面
    kekxv
        26
    kekxv  
       2019-05-25 22:07:34 +08:00 via Android
    也许是祖传的坑,一直没改
    xiangyuecn
        27
    xiangyuecn  
       2019-05-25 22:33:09 +08:00
    @viakiba base64 编码也算是一种加密!不信来一段试试:

    5oiR5LiN5L+h5L2g6IO95LiA55y855yL5Ye65oiR5Yqg5a+G55qE5q2k5q615YaF5a65

    在不知道解密算法的前提下,要得到明文是很困难的,哈哈

    ----------------


    此后端分页要求在合理的场景下不算奇葩。也许是增加别有用心的人的利用难度而已,算是低成本高回报;加密算法也许哪天可以不用 base64 了,换成别的,或者算法一天一换。

    另一个心里安慰:用户看不到 url 里面的页码。。。看起来蛮高大上
    yhxx
        28
    yhxx  
       2019-05-25 22:41:21 +08:00
    类似 "{"start":2}"这种字符串也转 base64

    不会因为 url 长度太长出现某些奇怪的问题吗?
    zsdroid
        29
    zsdroid  
       2019-05-25 22:48:53 +08:00
    md5 可还行
    an168bang521
        30
    an168bang521  
       2019-05-25 22:52:43 +08:00
    感觉这么做可以的,类似网页防用户复制和前端压缩混淆一样,防住一些初级小白和君子就好;
    业务上没问题,增加爬取难度就行了,
    真想爬你的页面,你再怎么加盐,加 sige,别人大不了直接绕过你那一套,直接拿你页面"下一页"的最终链接,还不是直接爬到;
    luopengfei14
        31
    luopengfei14  
       2019-05-25 23:19:26 +08:00 via iPhone
    @zsdroid md5 不可逆,只能做校验吧 _
    mooncakejs
        32
    mooncakejs  
       2019-05-25 23:23:21 +08:00
    关键在于 continue 的内容是前端 encode 的还是后端直接字符串返回的,如果是后者,这就是一个 cursor,前端不应该关心其内容。
    chendy
        33
    chendy  
       2019-05-25 23:25:43 +08:00
    脱裤子放屁行为
    还反爬虫…随便开几个观察一下参数就知道怎么回事了好么…
    qshu
        34
    qshu  
    OP
       2019-05-26 13:34:30 +08:00
    @mooncakejs 作为分页的按钮来跳转,每次都需要 encode,跳转的话,翻下一页的话,还是需要自己转
    qshu
        35
    qshu  
    OP
       2019-05-26 13:38:31 +08:00
    @vevlins 有疑问,感觉这么做不大合适,才发出来看看大家意见和建议
    Youen
        36
    Youen  
       2019-05-26 14:22:30 +08:00
    和 OData 差不多啊。 编码一下也没啥, 反向代理会过滤一些带特殊字符的 URL
    yanguangs
        37
    yanguangs  
       2019-05-26 15:48:23 +08:00
    base64 可不是加密啊
    我们的解决方式是 post 方式传 json,
    因为之前的项目使用的 mogodb,所以参数是 skip limit,还是很奇怪
    qshu
        38
    qshu  
    OP
       2019-05-26 16:00:00 +08:00
    @xiangyuecn 同理解
    Jiangyf
        39
    Jiangyf  
       2019-05-26 16:12:32 +08:00
    这边建议加盐再 Base64 处理传给后端呢
    pinews
        40
    pinews  
       2019-05-26 17:33:05 +08:00
    php:

    function urlsafe_base64_encode ($data) {
    return str_replace(array('+','/','='),array('-','_',''), base64_encode($data));
    }
    bwangel
        41
    bwangel  
       2019-05-26 18:26:08 +08:00
    base64 中就三个特殊点的字符,+ / =

    可以搜索 URL Safe Base64,会将 + / 替换成 - _,同时不再尾部添加=表示补充的字节。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3032 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:17 PVG 20:17 LAX 04:17 JFK 07:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86