ASP.NET MVC 3里面客户端输入验证的改动
2010-11-17 17:10
471 查看
最近在用ASP.NET MVC 3,在通过TinyMCE HTML编辑器,向服务器端输入HTML代码时,收到了下面这个错误信息: 异常详细信息: System.Web.HttpRequestValidationException: 从客户端(test="<a>adfasdf</a>")中检测到有潜在危险的 Request.Form 值。
很明显,这是ASP.NET为了阻止跨站脚本攻击所实现的防御措施,然而在我的情况下,我的确需要ASP.NET临时关闭这个检查机制,因为这个时候我需要保存原始的HTML文本。在网上搜了一下,发现很多人的解决方案有点粗暴,要么是直接将整个站点的HTML跨站攻击检测机制禁止掉:
将web.config文件里,添加上<httpRuntime requestValidationMode="2.0" />。
然后再<pages>节设置validateRequest="false" 禁用请求验证。
安全一点的,也是把整个页面的检测机制禁止掉—即通过在webform页面的Page指令禁用请求验证,或在MVC的Controller上加上[ValidateInput(false)]属性。下面这个razor语法的页面就可以让你重现这个问题:
代码@{
var text = Request.Unvalidated().Form["test"];
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample Page</title>
<script src="/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript" src="/Scripts/tinymce/tiny_mce.js"></script>
<script type="text/javascript" src="/Scripts/tinymce/jquery.tinymce.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$('#test').tinymce({
mode: "textareas",
theme: "simple"
});
});
</script>
</head>
<body>
<form method="post" action="">
<label for="test">测试</label>
<textarea name="test" id="test">
</textarea>
<br />
<input type="submit" value="提交" />
</form>
<br />
@if ( IsPost ) {
var wrapper = new HtmlString(text);
<div>@wrapper</div>
}
</body>
</html>
很明显,这是ASP.NET为了阻止跨站脚本攻击所实现的防御措施,然而在我的情况下,我的确需要ASP.NET临时关闭这个检查机制,因为这个时候我需要保存原始的HTML文本。在网上搜了一下,发现很多人的解决方案有点粗暴,要么是直接将整个站点的HTML跨站攻击检测机制禁止掉:
将web.config文件里,添加上<httpRuntime requestValidationMode="2.0" />。
然后再<pages>节设置validateRequest="false" 禁用请求验证。
安全一点的,也是把整个页面的检测机制禁止掉—即通过在webform页面的Page指令禁用请求验证,或在MVC的Controller上加上[ValidateInput(false)]属性。下面这个razor语法的页面就可以让你重现这个问题:
代码@{
var text = Request.Unvalidated().Form["test"];
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample Page</title>
<script src="/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript" src="/Scripts/tinymce/tiny_mce.js"></script>
<script type="text/javascript" src="/Scripts/tinymce/jquery.tinymce.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$('#test').tinymce({
mode: "textareas",
theme: "simple"
});
});
</script>
</head>
<body>
<form method="post" action="">
<label for="test">测试</label>
<textarea name="test" id="test">
</textarea>
<br />
<input type="submit" value="提交" />
</form>
<br />
@if ( IsPost ) {
var wrapper = new HtmlString(text);
<div>@wrapper</div>
}
</body>
</html>
相关文章推荐
- ASP.NET MVC 3里面客户端输入验证的改动 (转)
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
- asp.net mvc FluentValidation客户端验证失效
- Asp.net MVC中不使用IFrame 引起的客户端 验证失败的解决办法
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC 扩展之自定义模型验证,客户端 + 服务器端
- ASP.NET MVC系列之 如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现
- [翻译]ASP.NET MVC 3 开发的20个秘诀(三)[20 Recipes for Programming MVC 3]:验证用户输入
- 使用 ExtJS 实现 ASP.NET MVC 2 客户端验证
- ASP.NET的客户端验证控件居然在Firefox里面无效
- 利用反射实现ASP.NET控件和数据实体之间的双向绑定,并且在客户端自动验证输入的内容是否合法
- ASP.NET MVC的客户端验证:jQuery的验证
- ASP.NET MVC验证 - 使用哪种方式实现客户端服务端双重异步验证
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- Asp.net Mvc自定义客户端验证(CheckBox列表的验证)
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
- ASP.NET MVC的客户端验证:jQuery的验证
- Asp.net Mvc自定义客户端验证(CheckBox列表的验证)