【发布时间】:2010-09-08 09:58:15
【问题描述】:
我认识到,基于我要使用某些参数的上下文,至少有 4 种编码是避免执行损坏代码所必需的:
-
构造 javascript 代码时的 Javascript 编码,例如
var a = "what's up ?" var b = "alert('" + a + "');" eval(b); // or anything else that executes b as code -
使用字符串作为参数进入 url 时的 URL 编码,例如
var a = "Bonnie & Clyde"; var b = "mypage.html?par=" + a; window.location.href = b; // or anything else that tries to use b as URL -
使用字符串作为某些元素的 HTML 源时的 HTML 编码,例如
var a = "<script>alert('hi');</script>"; b.innerHTML = a; // or anything else that interprets a directly -
使用字符串作为属性值时的 HTML 属性编码,例如
var a = 'alert("hello")'; var b = '<img onclick="' + a + '" />'; // or anything else that uses a as a (part of) a tag's attribute
虽然在 ASP.NET 代码隐藏中,我知道在所有 4 种情况下对字符串进行编码的方法(例如使用 DataContractJsonSerializer、HttpUtility.UrlEncode、HttpUtility.HtmlEncode 和 HttpUtility.HtmlAttributeEncode),这将非常有趣知道在这 4 种情况下我是否可以直接从 javascript 中使用一些实用程序来编码/解码字符串。
【问题讨论】:
-
在情况 3 中,您是否试图避免 JavaScript 完全被执行?
-
没错,在这种情况下我希望代码显示在页面上
标签: c# javascript asp.net html encoding