首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在纯粹的客户端应用程序中,URL中的HTML <script>片段是否可用于XSS?

在纯粹的客户端应用程序中,URL中的HTML <script>片段是否可用于XSS?
EN

Stack Overflow用户
提问于 2018-04-03 00:40:15
回答 2查看 0关注 0票数 0

背景

假设我有以下网页:

代码语言:javascript
复制
<html>
  <script>
    document.write('querystring=' + location.search.substr(1));
  </script>
<html>

我打开它像这样的URL:

代码语言:javascript
复制
http://completely-secure-site/?<script>alert('fsecurity')</script>

在所有浏览器尝试过(Chrome 57,Firefox 52和Safari 10)的结果是:

querystring=%3Cscript%3Ealert(%27fsecurity%27)%3C/script%3E

因为尖括号<>是无效的URL字符,他们似乎得到自动的方式浏览器中编码,才可以拿到附近的JS运行时的任何地方。

我的假设

直接在客户端上直接渲染querystring document.write是安全的,而不是可能的XSS向量。(当然还有很多其他方式可以使应用程序易受攻击)

我的问题

  • URL中不安全字符的入站编码是否在所有合理的浏览器中被标准化/强制要求?(没有可能的XSS)
  • 或者,这仅仅是某些(现代?)客户的精细/实施细节,我不应该在全球范围内依赖这些客户?(上述XSS在理论上是可行的)

与这个问题无关,但有一个有趣的地方。如果我先解码URI,那么浏览器的行为是不同的:document.write(decodeURI(location.search.substr(1)));。Chrome和Safari中的XSS审核程序会阻止该页面,而Firefox会显示警报。

EN

回答 2

Stack Overflow用户

发布于 2018-04-03 08:59:05

如果我使用的查询字符串?<script>alert("d")</script>在Windows XP上的IE6我获得注入的代码显示警告,这种情况也使用decodeURIdecodeURIComponent页面,所以第二个假设是正确的,如果IE6仍然是一个合理的浏览器:它是一个功能现代浏览器

我还看到Firefox 53在使用解码方法时显示注入XSS警报,Opera 44和Chrome 57(全部在Windows上)阻止代码。

票数 0
EN

Stack Overflow用户

发布于 2018-04-03 10:29:52

根据RFC 3986,第2.4节的不安全的字符的入站编码标准化。虽然我建议不要依赖这个:

  • 并非所有的浏览器都实现它
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100007929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档