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

时间:2008-12-02 00:39:49

标签: asp.net security postback firewall

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

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

特别是,当用户输入搜索条件并单击搜索按钮时,结果列表将返回空。它甚至没有显示'0结果返回'文本,因此就好像Repeater控件根本没有绑定。类似的行为出现在网站的其他部分,但不是全部。用户可以正常登录该站点并显示其配置文件信息。

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

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

if (!IsPostBack) {
  BindResults();
}

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

有人知道如何计算IsPostBack的值吗?是否有可能他们高度安全的防火墙设置会导致IsPostBack始终返回true,即使它是从另一个页面重定向?这可能是一个红鲱鱼,因为问题可能在其他地方。它确实复制了结​​果。

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

谢谢你的时间!

附加信息:客户端是运行默认规则的Microsoft ISA 2006防火墙的后面。该网站已添加到Internet Explorer受信任的网站列表中,并在FireFox和Google Chrome中试用,但结果相同。

解决方案:我的赢家是建议使用Fiddler。没有Web开发人员应该没有的优秀工具。使用这个我能够从请求中删除各种标题,直到我重现问题。实际上有两个因素导致了这个错误,因为这种混乱的问题经常发生。

因素1 - Web应用程序尽可能使用所有主流浏览器支持的GZIP压缩。防火墙正在剥离指定GZIP解压缩支持的头部(Accept-Encoding:gzip,deflate)。

因子2 - 我的代码中的错误意味着在未压缩发送内容时绕过了某些处理。之前没有注意到这个问题,因为应用程序被有限的受众使用,所有这些都支持GZIP解压缩。

7 个答案:

答案 0 :(得分:3)

如果他们完全熟悉技术,我会让他们下载Fiddler或类似的东西,捕获整个HTTP会话,然后发送保存的会话。也许那里的东西会突然出现。

与此同时,看看您是否可以安装ISA Server(如果必须,可以安装评估版,或者如果您拥有或知道任何有子版的人,则可以安装评估版),看看是否可以在本地复制它。

答案 1 :(得分:1)

客户端是否可以禁用Javascript并且它没有获取_EVENTTARGET表单值?

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

哦,是的。这绝对不是“_EVENTTARGET”BTW ......

我知道这一点,因为Ra-Ajax没有将任何这些参数传递给服务器,并且它们(Ra-ajax请求)被处理为IsPostBack请求......

答案 4 :(得分:1)

您是否可以创建一个测试帖子页面,该页面传递与搜索页面相同的内容,并在Page_Load中写回所有帖子以确保它们被传递,尤其是__VIEWSTATE。

foreach (string key in Request.Form)
{
    Response.Write("<br>" + key + "=" + Request.Form[key]);
}

然后让其中一个用户转发他们在该测试页面上看到的内容。

编辑:有文档证明某些防火墙可以破坏VIEWSTATE以及一些解决它的方法:View State Overview

答案 5 :(得分:1)

位置,位置,位置。检查用户的文化。通常会导致问题。

答案 6 :(得分:1)

检查IIS日志以查看请求是否已将其发送到您的服务器。 ISA设置可能正在缓存初始请求并在后续请求中提供该请求。