如何在源代码中隐藏.asmx Web服务API端点?

时间:2014-08-27 09:23:01

标签: c# asp.net web-services asp.net-ajax

我从aspx页面的脚本标签内部调用.asmx服务。当我查看页面来源时,它会显示我的网络服务。

如何保护网络服务免受暴露? 因为当某人查看页面源时,他可以看到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>

3 个答案:

答案 0 :(得分:2)

虽然您无法阻止用户查看您的服务网址,但您可以阻止他们查看该文档的文档 - 只需将其放在system.web

web.config标记内即可
<webServices>
    <protocols>
        <remove name="Documentation" />
    </protocols>
</webServices>

请参阅“删除文档协议”中的https://support.microsoft.com/en-us/kb/815149

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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