2011-03-01 190 views
1

我有兴趣确定验证服务器端验证是否按预期执行的方法,但需要绕过客户端验证正在使用ASP.NET验证控件完成。为了测试这一点,我尝试过使用Firefox的表单Poster插件,它允许我获取/修改页面内容并发布它,但.NET框架将提交解释为有害并且抛出了应用程序错误(“潜在的危险的Request.Form值从客户端检测到“)。如何绕过ASP.NET客户端验证来验证服务器端验证

我创建了一个包含WebBrowser控件的WinForm,我可以操作网页的内容并调用按钮单击,但我有兴趣了解如何允许使用无效输入值进行回发。我不想假设服务器端验证工作正常(即使我在服务器上检查是否在回发页面上检查Page.IsValid)。任何建议,将不胜感激。

这在提交的WebBrowseer控制Web表单和预期的客户端验证火灾: extendedWebBrowser1.Document.GetElementById(formButtonName).InvokeMember("click");

这是我是如何操作的一些页面内容(这只是阻止提交): mshtml.IHTMLDocument2 doc = extendedWebBrowser1.Document.DomDocument as mshtml.IHTMLDocument2; string html = doc.body.innerHTML; html.Replace("Page_ValidationActive = false", "Page_ValidationActive = true"); doc.body.innerHTML = html.ToString(); extendedWebBrowser1.Document.GetElementById(formButtonName).InvokeMember("click");

回答

0

设置

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Services.aspx.cs" Inherits="SomeClass" 
    MasterPageFile="~/Master/Main.Master" Title="Title" ViewStateMode="Disabled" EnableEventValidation="false" %> 

EnableEventValidation = “假” < - 这就是你需要

+0

您确定'EnableEventValidation'效果表单字段验证吗?技术文档如此解释这个属性:“当EnableEventValidation属性设置为true时,ASP.NET验证控件事件源于该控件呈现的用户界面。控件在渲染过程中注册其事件,然后验证事件在回发或回调处理期间“。 – 2011-03-01 21:54:37

1

只需在您选择的浏览器中关闭Javascript。这将强制调用服务器端验证。

+0

如果您使用Firefox作为您选择的浏览器,关闭JavaScript最容易使用免费的NoScript扩展完成:http://noscript.net/ – 2011-03-01 21:52:17

1

所有验证Web控件都有EnableClientScript property。默认设置为True,但如果将其设置为False,则验证控件将而不是发出客户端验证脚本。

另一个选项是将PageClientTarget property设置为“低级”。这将强制页面呈现,就好像它正在被低级浏览器访问一样。在这种情况下,验证控件将为而不是呈现用于客户端验证的JavaScript。

正如Sean Hunter所指出的,另一种选择是在浏览器中简单地禁用JavaScript。如果你走这条路线,我推荐使用Firefox的免费NoScript extension,因为它可以很容易地为特定站点打开(或关闭)脚本。