2010-06-03 33 views
1

我已经在ASP.NET 3.5和C#中开发了一个Web应用程序。当我部署应用程序时,人们可以看到我正在使用ASP.NET的警告标志。我该如何做到这一点,以便任何看到我的网站的人都看不到我在使用ASP.NET?隐藏我的网站建立在ASP.NET中的事实

+6

出于兴趣,你为什么要这么做? – 2010-06-03 13:27:16

+2

出于好奇 - 为什么要隐藏技术栈? – 2010-06-03 13:27:27

+0

我能想到的唯一理由就是通过默默无闻的理由来实现安全。即使所有标识已成功从响应头文件,文件扩展名和页面中删除,也可能通过测试其对各种请求的响应(例如,asp.net请求限制大小)来确定它是否为asp.net。 – 2010-06-03 13:33:13

回答

5

由于ASP.NET的本质,任何动态构建的控件都将显示为$Ctrl。如果您使用ViewState,则会显示。如果您使用ASP.NET事件验证,则会显示。如果你不想让它出现,你所能做的就是使用另一个框架(ASP.NET MVC),或者不使用ASP.NET的任何这些功能(如果你愿意的话,这会很愚蠢)使用ASP.NET)。

如果您的网页后缀为.aspx,那么每个人都会知道您正在使用ASP.NET。你在使用URL重写吗?

+0

似乎禁用视图状态将适用于我,在这种情况下,我错过了3.5中的asp.net 4.0,我相信我必须禁用整个页面的viewstate而不是特定的控件。 我正确吗? – Zerotoinfinity 2010-06-03 13:05:47

+0

是的;您必须禁用页面的视图状态。 http://www.ironspeed.com/articles/Disable%20View%20State%20for%20a%20Page/Article.aspx – 2010-06-03 13:12:02

1

我会建议:

  • 使用URL重写来改变或不使用视图状态删除的页面扩展
+0

您可能还建议从返回的HTTP头中删除IIS或.NET的任何指示。 – 2010-06-03 13:25:23

1

定义指示符号?不看源代码,唯一明显的方法就是.ASPX扩展。

查看源,你需要删除

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" ... 

    <script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['aspnetForm']; 
if (!theForm) { 
    theForm = document.aspnetForm; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 
  • 到WebResource.axd的或的ScriptResource.axd
  • ASP.NET控件名称(ctl00等)的任何引用
  • 响应头X-Powered-ByX-AspNet-Version

任何人都可以想到别人吗?

0

你唯一真正的选择是切换到ASP.NET MVC;否则,会告诉某个地方任何真正了解ASP.NET的人,或者您将限制您使用的功能,以至于在使用ASP.NET时没有任何好处。即使没有ViewState,如果控件嵌入在面板中,或者使用母版页,控件ID也是可以使用的。任何由控件或页面发出的特定于MS的JavaScript都将被放弃。每页一致地使用单个表单几乎是一种放弃。许多事情都表明ASP.NET。

为什么这很重要?

1

您可能还想要删除嵌入的资源。页面源代码中的.axd扩展是一个赠送。

编辑: 来到想起来,隐藏字段(前__EVENTVALIDATION)是赠送品太...