2014-08-27 246 views
1

我从aspx页面的脚本标签内部调用.asmx服务。当我查看页面源时,它显示我的web服务。如何在源代码中隐藏.asmx webservice API端点?

如何保护webservice免受暴露? 当有人查看页面源时,可以看到Web服务名称及其所有方法名称。

.aspx页面中:

<asp:PlaceHolder ID="divBody" runat="server"> 
     <div class="aa-dashboard-wrapper"> 
      <asp:Textbox id="textbox1" runat="server"></asp:Textbox> 
     </div> 
</asp:PlaceHolder> 

这里是我的脚本标签,被放置在我的aspx页面的底部。

$("#textbox1").autocomplete({ 
       source: function (request, response) { 
        $.ajax({ 
         url: '<%=ResolveUrl("~/WebService.asmx/webServiceMethod") %>', 
         data: "{ 'keyword': '" + request.term + "'}", 
         dataType: "json", 
         timeout: 20000, 
         type: "POST", 
         contentType: "application/json; charset=utf-8", 
         success: function (data) { 
         }, 
         error: function (response) { 

         }, 
         failure: function (response) { 

         } 
        }); 
       }, 
       select: function (e, i) { 

       }, 
       minLength: 2 
      }) 

</script> 
+0

Web服务正在从用户的浏览器调用ajax请求,如果它没有公开暴露,你期望它的工作? – 2014-08-27 09:29:35

+0

我可以编码它的名字吗? 由此他可能看不到asmx的服务名称? – 2014-08-27 10:13:14

+0

最终,用户的浏览器正在向您的Web服务发出http请求,即使您混淆了终点,用户所需做的只是启动浏览器开发工具或使用像fiddler这样的东西,并且他们可以看到请求。你想隐藏什么?为什么用户可以看到Web服务的端点很重要?如果用户构建他们自己的服务调用是一个问题,那么您的Web服务存在根本性的安全问题。 – 2014-08-27 10:18:45

回答

2

虽然你不能看见你的服务的URL阻止的用户,你可以阻止他们观看它的文档 - 只是把这个你web.config

<webServices> 
    <protocols> 
     <remove name="Documentation" /> 
    </protocols> 
</webServices> 

system.web标签内请参阅https://support.microsoft.com/en-us/kb/815149关于'删除文档协议'

1

最好的方法是有一个JS文件并将您的AJAX调用放在那里。即使在这种情况下,用户也可以浏览和查看JS,但机会少得可怜。

1

无法将您的API端点完全隐藏于想要找到它的人。即使你在某些JavaScript构造中以某种方式混淆了它的调用,它仍然可以在Chrome网页检查器中看到。而在最基本的层面上,当我拦截与数据包嗅探器的通信时,我仍然可以看到它。