我从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>
答案 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网络检查器中看到。在最基本的层面上,当我拦截与数据包嗅探器的通信时,我仍然可以看到它。