ASP.NET应用程序通过防火墙表现出奇怪的行为

ASP.NET应用程序通过防火墙表现出奇怪的行为,asp.net,security,postback,firewall,Asp.net,Security,Postback,Firewall,由于您的建议,此问题已得到解决。有关详细信息,请参阅底部。非常感谢你的帮助 我们的ASP.NET网站可从几个特定且高度安全的国际地点访问。它一直运行良好,但我们添加了另一个客户端位置,该位置显示出非常奇怪的行为 特别是,当用户输入搜索条件并单击搜索按钮时,结果列表返回空。它甚至不显示“0 results returned”文本,因此就好像Repeater控件根本没有绑定一样。类似的行为出现在网站的某些部分,但不是全部。用户可以很好地登录到站点,并显示其个人资料信息 我已经使用与他们完全相同的凭据

由于您的建议,此问题已得到解决。有关详细信息,请参阅底部。非常感谢你的帮助

我们的ASP.NET网站可从几个特定且高度安全的国际地点访问。它一直运行良好,但我们添加了另一个客户端位置,该位置显示出非常奇怪的行为

特别是,当用户输入搜索条件并单击搜索按钮时,结果列表返回空。它甚至不显示“0 results returned”文本,因此就好像Repeater控件根本没有绑定一样。类似的行为出现在网站的某些部分,但不是全部。用户可以很好地登录到站点,并显示其个人资料信息

我已经使用与他们完全相同的凭据在本地登录到该站点,并且该站点从此处运行良好。我们已经仔细地完成了这些步骤,所以我相信这不是用户的问题

第一次加载搜索结果页面时,我将搜索结果绑定到搜索结果页面的页面加载中(条件在查询字符串中)。i、 e

通过注释掉BindResults()方法调用,我可以在本地复制完全相同的行为

有人知道iPostBack的值是如何计算的吗?他们的高度安全防火墙设置是否可能导致iPostBack始终返回true,即使它是来自另一个页面的重定向?这可能是一个转移注意力的问题,因为问题可能在其他地方。但它确实复制了结果

我无法访问该站点,因此故障排除仅限于向他们提供说明并要求他们告诉我结果

谢谢你的时间

附加信息:客户端位于运行默认规则的Microsoft ISA 2006防火墙后面。该网站已被添加到InternetExplorer受信任网站列表中,并在FireFox和GoogleChrome中进行了尝试,结果都是一样的

解决方案:我的获胜者是建议使用Fiddler。这是一个多么优秀的工具,任何web开发人员都不应该缺少它。使用这个工具,我可以从请求中删除各种标题,直到我重现了这个问题。事实上,有两个因素导致了这个bug,这是如此常见的问题

因素一——在可能的情况下,web应用程序使用所有主要浏览器支持的GZIP压缩。防火墙正在剥离指定GZIP解压支持的头(接受编码:GZIP,deflate)


第二个因素——我的代码中有一个bug,这意味着在未压缩发送内容时忽略了一些处理。这个问题以前没有被注意到,因为应用程序被有限的用户使用,所有用户都支持GZIP解压缩。

客户端是否可能禁用了Javascript并且没有拾取_EVENTTARGET表单值?

它可能是某种代理,从给定的POST请求中创建GET请求


我不确定IsPostBack是如何计算的,但我猜它会检查HTTP请求,看看它是POST还是GET…

哦,是的。这绝对不是“事件目标”顺便说一句


我知道这一点,因为它不会将任何参数传递给服务器,它们(Ra ajax请求)将作为IsPostBack请求处理…

如果它们精通技术,我会让它们下载Fiddler或类似的东西,捕获整个HTTP会话,然后将保存的会话发送给您。也许里面有什么东西会突出


同时,看看你是否可以安装ISA Server(如果必须的话,可以进行评估安装,如果你有或认识任何人有sub,可以从MSDN进行评估安装),看看你是否可以在本地复制它。

你能创建一个测试帖子页面,通过与搜索页面相同的内容吗,在页面加载中,写回所有帖子,确保它们通过,尤其是查看状态

foreach (string key in Request.Form)
{
    Response.Write("<br>" + key + "=" + Request.Form[key]);
}
foreach(Request.Form中的字符串键)
{
Response.Write(“
”+key+“=”+Request.Form[key]); }
然后让其中一个用户将他们在测试页面上看到的内容转发回去


编辑:有文档表明,某些防火墙可能会破坏VIEWSTATE以及一些绕过它的方法:

位置,位置,位置。检查用户的区域性。通常这会导致问题。

检查IIS日志,查看请求是否发送到服务器。ISA安装程序可能正在缓存初始请求,并在后续请求中提供该请求。

谢谢您的建议。我尝试过在关闭Javascript的情况下使用该站点,它工作正常(至少该站点的这一部分是正常的)。此外,他们还将该域添加到他们的Internet Explorer受信任站点列表中,并尝试使用Firefox和Chrome,因此Javascript应该已启用。可能会设置一个测试页面,回显所有表单变量,并确保正在传播_VIEWSTATE。对于Request.Form Response.Write(key&“=”+Request.Form(key))中的字符串形式的每个键,下一步
foreach (string key in Request.Form)
{
    Response.Write("<br>" + key + "=" + Request.Form[key]);
}