相关疑难解决方法(0)

URL上的HTML <script>片段是否可以用于纯客户端应用程序中的XSS?

背景

说我有以下网页:

<html>
  <script>
    document.write('querystring=' + location.search.substr(1));
  </script>
<html>
Run Code Online (Sandbox Code Playgroud)

我在这样的URL打开它:

http://completely-secure-site/?<script>alert('fsecurity')</script>
Run Code Online (Sandbox Code Playgroud)

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

查询字符串=%3Cscript%3Ealert(%27fsecurity%27)%3C /脚本%3E

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

我的假设

这让我相信简单地在客户端上直接渲染查询字符串document.write总是安全的,而不是可能的XSS向量.(我意识到当然还有许多其他方式可以让应用程序容易受到攻击,但让我们坚持这里描述的精确案例.)

我的问题

我在这个假设中是否正确?

  • 在所有合理的浏览器中标准化/强制规定的URL中的不安全字符的入站编码是什么?(没有可能的XSS)
  • 或者,这只是我不应该全球依赖的某些(现代?)客户的精确/实施细节?(上面描述的XSS理论上是可行的)

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

html javascript security xss http

18
推荐指数
1
解决办法
710
查看次数

在ASP.NET 4.5中,我应该如何编码要用作JavaScript变量的字符串,以防止XSS攻击

我知道有几种方法可以做到这一点,但它们都有一些缺点.是否有"接受"的方式,这被认为是最好的?

我以前使用的Microsoft.Security.Application.AntiXss.JavaScriptEncode()是很棒的,但AntiXSS已经结束了,因为编码器现在包含在4.5中的.NET中.

但是,由于某种原因,System.Web.Security.AntiXss.AntiXssEncoder不包括该JavaScriptEncode方法.

System.Web.HttpUtility.JavaScriptStringEncode(),但它使用黑名单方法进行编码,因此它不太可能像白名单编码器一样好.

我已经看到了一些使用的建议System.Web.Script.Serialization.JavaScriptSerializer.Serialize(),但这只是打电话HttpUtility.JavaScriptStringEncode().

那么目前用于编码作为JS变量编写的值的最佳接受白名单方法是什么?

javascript asp.net xss antixsslibrary

3
推荐指数
1
解决办法
3709
查看次数

标签 统计

javascript ×2

xss ×2

antixsslibrary ×1

asp.net ×1

html ×1

http ×1

security ×1