XSS中如何绕过客户端编码

发布于 2025-01-05 06:54:50 字数 243 浏览 1 评论 0原文

我听到每个人都说输出编码必须在客户端而不是服务器端完成。我的问题是:它不会随上下文而变化吗?

  1. 是否存在客户端输出编码足够好的情况 无法绕过吗?
  2. 如果我使用像 encodeURIComponent 这样的客户端 js 函数来编码导致 XSS 的 url,那么攻击者如何绕过这个并仍然导致 XSS?
  3. XSS 也可能导致网络钓鱼。如果我至少进行输出编码可以防止网络钓鱼吗?

I hear everyone saying Output encoding has to be done client-side instead of server-side. My question is: doesnt it vary with context?

  1. Are there cases where client-side output encoding is good enough and
    cant be bypassed?
  2. If I use a client side js function like encodeURIComponent to encode a url causing XSS, how can an attacker bypass this and still cause XSS?
  3. Phishing can also happen due to XSS. If I at least do output encoding can phishing be prevented?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

失退 2025-01-12 06:54:50

简而言之,XSS 编码需要在数据放入 html 或 javascript 中(无论是服务器端还是客户端)时发生。我可以很容易地想象,放入服务器端脚本标记中的数据开始正确编码,但客户端的 JavaScript 会以不安全的方式使用该值,从而创建 XSS 漏洞。

因此,当将不受信任的数据放入网页时(无论是在 html 标签中、内部标签中、在 css 中等 - 请参阅 OWASP XSS 预防备忘单),我们需要进行编码。然后,当我们来到客户端时,我们还需要确保我们的 javascript 不会引入 XSS 问题。例如,这可能是基于 DOM 的 XSS,或者上面提到的示例。

所以我的答案是,您需要在服务器端和客户端上进行编码。

我不明白第三个问题有什么关系。网络钓鱼可能以多种不同的方式发生。在完全不同的域上,只是模仿原始页面等。

编辑:还有一件事。如果不可信的数据未经编码就被放入页面服务器端,则客户端几乎无法修复该问题。很可能已经太晚了。

The short answer is that XSS encoding needs to happen where data is put into html or javascript be it server-sider and/or client-side. I could easily imagine data put into a script tag on the server side begin properly encoded, but then javascript on the client-side is using that value in an insecure way, creating an XSS vulnerability.

So when putting untrusted data into a web page (be it in a html tag, inside -tags, in css. etc - see the OWASP XSS prevention cheat sheet) we need to encode. Then when we come to the client side, we also need to make sure our javascript does not introduce XSS-problems. This could for instance be DOM-based XSS, or the example mentioned above.

So my answer is, you need to do encoding both on the server AND client side.

I don't understand how the 3rd question is related. Phishing could happen in so many different ways. On a completely different domain just mimicking the original page etc.

Edit: One more thing. If utrusted data is put into the page server side without encoding, there is very little the client side can do to fix that. It's most likely already to late.

離殇 2025-01-12 06:54:50

Erlend 的回答很漂亮。我想分享我关于输出编码的发现。

在服务器端完成的输出编码比在客户端更好。

您可以从 OWASP Xss Prevention 获取有关输出编码的更多知识

,并且您可以也做这个客户端。如果您打算在 html 上下文中使用不可信(用户给定的输入)数据,请使用 javascript 的本机 api insideText IE 文档(moz 的 textContent)或对字符进行编码(<,>,',",/,) 到 html 实体中

Erlend answer is beautiful. I want to share my findings regarding output encoding.

Output encoding done in server side is better that in client side.

You can get more knowledge regarding output encoding from OWASP Xss Prevention

and you can do this client side too. If you are going to use un trusted(user given input) data in html context, please use javascript's native api innerText IE Docs ( textContent for moz) or encoding the characters (<,>,',",/,) into html entity

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文