如何绕过ASP.NET客户端验证来验证服务器端验证

时间:2011-03-01 21:43:05

标签: asp.net

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

我已经创建了一个包含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");

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

另一种选择是将Page的{​​{3}}设置为“下层”。这将强制页面呈现,就好像它被下层浏览器访问一样。在这种情况下,验证控件将呈现JavaScript以进行客户端验证。

正如肖恩·亨特所指出的,另一个选择就是在浏览器中禁用JavaScript。如果你走这条路线我建议使用Firefox的免费ClientTarget property,因为这样可以轻松打开(或关闭)特定网站的脚本。

答案 2 :(得分:0)

设置

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

EnableEventValidation =“false”&lt; - 这就是你需要的