And*_*dry 1 javascript asp.net html-encode
好.这个夜晚对我来说是一个非常奇怪的夜晚.我很抱歉在之前创建了另外两个问题后创建了一个新问题,但这是另一个论点.如果我在这里得到答案,我也会得到这些问题的答案,所以请有人听我说并尝试理解.
这一切都始于一个简单的脚本JS,通过一个aspx代码隐藏文件生成.在控件上,我必须以这种方式放置JavaScript:
this.MyTxtBox.Attributes["onfocus"] = "windows.alert('Hello World!');";
Run Code Online (Sandbox Code Playgroud)
好.你可能会想,问题出在哪里?问题是ASP.NET 4.0对所有内容进行编码,我说一切都是为了避免在网站上执行XSS.嗯,这似乎不是一个问题,但如果你看看渲染的页面,你会像我一样跳到椅子上:
<textarea id="..." onfocus="windows.alert('Hello World!');"></textarea>
Run Code Online (Sandbox Code Playgroud)
正如你可以看到html,最后的html有点奇怪...... JavaScript引擎不应该接受这种情况.所以我开始提出这个问题:
好吧,我仍然没有得到任何答案是的我们无法理解在.net配置中需要修改的内容,以免发生这种情况.
但现在我考虑一件事,一件重要的事情:JavaScript引擎工作!即使是那些不应该被解释的奇怪代码......
我希望到现在为止一切都很清楚......现在的问题是:
这是JavaScript引擎的正常情况吗?每个浏览器是否都能正确解释用编码字符串替换引号的JavaScript?
如果这是真的,我必须假设.net没有提供一种机制来避免编码只是因为这个原因!
回覆:
<textarea id="..." onfocus="windows.alert('Hello World!');"></textarea>
Run Code Online (Sandbox Code Playgroud)
这没有什么奇怪的(除了你使用windows.alert而不是window.alert).它应该工作正常(并且确实; 例子).该HTML解析器解析HTML属性值,并处理处理实体一样'.它最终交给JavaScript解释器的JavaScript源代码将在其中引用.浏览器不会将文字字符& # 3 9 ;传递给JavaScript解释器.
它与以下相同:
<input type='text' value="This is a 'funny' value too">
Run Code Online (Sandbox Code Playgroud)
HTML解析器处理实体,分配给输入的实际值是This is a "funny" value too.
顺便说一句,这也是为什么这个看似无辜的HTML实际上是错误的并且验证失败的原因(尽管大多数浏览器都会允许):
<a href='http://www.google.com/search?q=foo&hl=en'>Search for foo</a>
Run Code Online (Sandbox Code Playgroud)
更准确地说,那应该是:
<a href='http://www.google.com/search?q=foo&hl=en'>Search for foo</a>
<!-- ^^^^^--- difference here -->
Run Code Online (Sandbox Code Playgroud)
...因为HTML解析器会解析该值,然后将解析后的结果分配给该href属性.当然,一个&引入了一个字符实体,因此从字面上看,&你必须&在HTML中使用.(同样,如果后面的内容&看起来不像是一个实体,那么大多数浏览器都会让你逃脱它.但这可能并且会咬你.)
| 归档时间: |
|
| 查看次数: |
880 次 |
| 最近记录: |