MVC4 Ajax.JavaScriptStringEncode怎么使用?

问题描述

在Wrox.Professional.ASP.NET.MVC.4.Oct.2012这本书里第3章里提到在javascript里处理用户输入的字符串时要使用Ajax.JavaScriptStringEncode以防止XSS攻击,并给了一个例子:如果用户名是“x3cscriptx3e%20alert(x27pwndx27)%20x3c/scriptx3e”在使用下面的javascript时就有XSS危险<scripttype="text/javascript">$(function(){varmessage='Hello@ViewBag.Username';$("#message").html(message).show('slow');});</script>应该使用下面的javascript:<scripttype="text/javascript">$(function(){varmessage='Hello@Ajax.JavaScriptStringEncode(ViewBag.Username)';$("#message").html(message).show('slow');});</script>但是我试验了一下,结果直接报异常,然后我把上面的用户名里的2个%20换成空格,就执行了javascript,弹出了pwnd,我发现原本直接使用ViewBag.Username会进行的HTML编码,使用了Ajax.JavaScriptStringEncode后就不会进行html编码了,而是把<,>尖括号编码成了unicode了。查了msdnAjax.JavaScriptStringEncode会把字符串转成Json。查了网上一些资料也是说在Javascript里使用用户输入的字符串时要使用Ajax.JavaScriptStringEncode。真不知道是什么原因,请有知道的朋友解答,谢谢!

解决方案

解决方案二:
我也测试了下。发现一个如果你的x3cscriptx3e%20alert(x27pwndx27)%20x3c/scriptx3e是从客户端提交的话,Ajax.JavaScriptStringEncode编码后(\x3cscript\x3ealert(\x27pwnd\x27)\x3c/script\x3e)不会执行。但是如果此段代码是你从后台赋值的话,使用Ajax.JavaScriptStringEncode编码后(n&lt;script&gt;alert('pwnd')&lt;/script&gt;)是可以执行的。
解决方案三:

解决方案四:
这行改成:varmessage='Hello@Html.Raw(Ajax.JavaScriptStringEncode(ViewBag.Username))';如果想要输出一个javascript字符串的话,必须要加上Html.Rasw才可以。

时间: 2024-12-24 20:57:22

MVC4 Ajax.JavaScriptStringEncode怎么使用?的相关文章

MVC遇上bootstrap后的ajax表单验证_AJAX相关

使用bootstrap后他由他自带的样式has-error,想要使用它就会比较麻烦,往常使用jquery.validate的话只有使用他自己的样式了,而且有模型在使用模型验证更方便点.怎么解决呢? 当然你可以专门写一个针对此的jquery插件,我觉得蛮麻烦的,喜欢写插件的研究下吧.  首先Nuget获取一个 MVC EditorTemplates for Bootstrap 3 的组件,有了他以后就有了一些模版,比如比较简单的一个Text:  @model object <div class=&qu

ASP.NET MVC3学习心得-----视图和模型

视图 3.1视图的作用 视图的职责是向用户提供用户界面,向它提供对模型的引用后,它会将模型转换为准备提供给用户的格式. 在ASP.NET MVC中这个过程由两部分组成: 检查控制器提交的ViewDataDictionary(通过ViewData属性访问),另一部分是将其内容转换为HTML格式 从ASP.NET MVC 3开始,视图数据可以通过ViewBag属性访问,该属性是动态的,语法简单,可以访问通过ViewData属性访问的相同数据.封装了ViewData,因此可以用类似访问属性的语法来检索

Razor表达式

Controller: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace _04_RazorExpression.Controllers { public class HomeController : Controller { public ActionResult Index() { ViewBag.Messag

webapi-.NET MVC4.0如何从后台POST提交数据给WEBapi,不用AJAX 形式 post 提交?

问题描述 .NET MVC4.0如何从后台POST提交数据给WEBapi,不用AJAX 形式 post 提交? .NET MVC4.0如何从后台POST提交数据给WEBapi,不用AJAX 形式 post 提交? 解决方案 http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client 微软给的例子 解决方案二: 后台用httpwebrequest对象,前台才是ajax,这个要分清出来

浏览器-mvc4中ajax请求重定向问题

问题描述 mvc4中ajax请求重定向问题 在mvc4中我有一个过滤器 在每一个action前都会先调用一次,里面的方法是用来判断用户是否登录如果是程序发出的请求还好可以重定向到登录页面 但ajax 的请求就无法重定向,我现在有一个解决方法但是 还是不完美 这是我的过滤器,如果是ajax的请求就在浏览器头部设置一个标记 protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (Use

Struts2、Spring MVC4 框架下的ajax统一异常处理

本文算是struts2 异常处理3板斧.spring mvc4:异常处理 后续篇章,普通页面出错后可以跳到统一的错误处理页面,但是ajax就不行了,ajax的本意就是不让当前页面发生跳转,仅局部刷新,从而改善用户体验,基本思路是:把异常转换成json数据返回,这样ajax的回调函数,就能解析出错误原因.   一.如何区分ajax请求与普通请求 打开firefox的调试工具观察一下: 普通的页面请求 jquery发起的ajax请求 对比一下,可以发现jquery发生的ajax请求,Request

MVC4, Area中Ajax.ActionLink访问[HttpPost]属性的Action无效

问题描述 请问一个问题,我的一个MVC4项目,其中有几个Area,某个Area的View中,使用Ajax.ActionLink调用对应Controller中的某个[HttpPost]属性的Action,但是报错,提示页面找不到,似乎还是以[HttpGet]访问的Action.好奇怪,如果不放在Area中就不会出现这个问题,一切正常,哪位能帮忙解决一下,困扰好几天了 解决方案 解决方案二:@Ajax.ActionLink("首页","Index","Home

MVC4,手机读取不到ajax获取的数据

问题描述 MVC4,手机读取不到ajax获取的数据 解决方案 解决方案二: 解决方案三:无代码saypp解决方案四:请多给一些线索.解决方案五:<!DOCTYPEhtml><html><head><metacharset="utf-8"/><metaname="description"content=""/><metaname="viewport"id=&quo

跟我一起学习ASP.NET 4.5 MVC4.0(一)

原文 : http://www.cnblogs.com/xdotnet/archive/2012/03/05/aspnet_mvc40_preview.html   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最近想给团队成员做一个系统的解说,让大家都可以学习一 下ASP.NET MVC3.0.但是由于前两天安装了Windows8和VS11,所以写些关于ASP.NET 4.5和MVC4.0的一些东东,顺