使浏览器无法访问 Web 服务?
Posted
技术标签:
【中文标题】使浏览器无法访问 Web 服务?【英文标题】:Make web service not accessible by browser? 【发布时间】:2018-04-01 19:46:19 【问题描述】:我编写了一个 Web 服务,因为我希望我的 javascript 使用 ajax 访问整个网站中的方法。我是新手。但是我刚刚意识到 asmx 可以通过浏览器访问,它显示了一个测试页面和方法数据的 xml 输出。有没有办法为 Web 服务禁用此 UI?我只希望它在调用 javascript 方法时返回数据。
【问题讨论】:
没有。如果您通过 URL 公开服务,则 Internet 上的任何客户端都可以访问它。您无法永远确定 HTTP 请求的另一端是什么。如果您需要安全服务,请使用某种经过身份验证的会话机制对其进行保护。 你说的“测试”页面很正常。 Web 服务通过 WSDL(Web 服务描述语言)文档公开,这就是您所看到的文档。它告诉客户什么是可用的以及如何调用这些方法。 你可以发送标头并在服务器上检查它们,但任何人都可以欺骗标头 @ZillyFlix 你的问题解决了吗?如果其中一个对您有帮助,您能接受答案吗 【参考方案1】:我不确定您使用的是哪个版本的 .NET Web 服务,但您可以禁用 Web 服务帮助页面,该页面通常只能在本地使用。它也可能禁用 WSDL 生成。见https://msdn.microsoft.com/en-us/library/2tyf2t8t(v=vs.100).aspx或https://www.thecodingforums.com/threads/how-to-disable-modify-the-default-test-pages-for-asmx-web-services.786001/
如果您还想阻止其他人访问您的 Web 服务,那么您也必须了解身份验证技术。
【讨论】:
谢谢。目前我只公开了无论如何都是公开的数据。我为每个用户生成 GUID 并仅为这些用户提供数据。所以我想这很好,因为我将 GUID 保存在服务器上并且从不暴露给前端。【参考方案2】:您的 javascript 访问您的网络服务的方式与您使用浏览器的方式相同。从您的浏览器关闭您的服务,您为您的 javascript 关闭它。
基本上,您是说您在房子里做了一扇门,因为您希望能够进入(完全有道理!)但现在您很担心,因为每个人都可以看到门(您可以早点想到 htat! ) 并使用它(这是你真正的问题!)。 所以你会怎么做?你把门锁上了。
这不会使门隐形,但它可以阻止错误的人进入。
您希望对您的网络服务做同样的事情:实施身份验证/授权。
附带说明:现在是 2017 年。我什至不知道人们还在使用 .asmx。看看 WCF,它或多或少在 2010 年左右取代了旧的 asmx Web 服务......
【讨论】:
我最近在一家公司实习时学习了 .NET,该公司使用 Web 表单构建的遗留系统。所以我学会了旧方法,现在我明白我继续使用旧技术。必须学习 WCF 并继续前进。谢谢【参考方案3】:据我所知没有。您的 asmx 不应显示任何敏感数据。如果是这样,您就有设计问题。
您可能看到的 XML 数据是 WSDL。这不是一件坏事,事实上它让消费者知道你的 WebService 是如何构建的。有关这方面的更多信息,您可以查看this apge
【讨论】:
以上是关于使浏览器无法访问 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章