Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AJAX安全性最佳实践的Web服务_C#_Asp.net_Web Services - Fatal编程技术网

C# 使用AJAX安全性最佳实践的Web服务

C# 使用AJAX安全性最佳实践的Web服务,c#,asp.net,web-services,C#,Asp.net,Web Services,我正在使用脚本管理器在客户端调用web方法,但正如您所知,web方法无法从用户控制中工作,所以您必须创建一个web服务来实现这一点 这对我来说很好,但我有以下顾虑 如果在ASPX页面中使用web方法,则代码对用户不可见,因此如何防止用户浏览我的服务并查看我的代码,而只允许页面或用户控件调用web服务 是否有任何用户可以像跨站点脚本编写、ping等那样高举我的代码。。。用这种方法 使用这种方法,客户机可以看到什么,我用来调用服务的java脚本代码块或所有东西 如有任何额外建议,将不胜感激 所有j

我正在使用脚本管理器在客户端调用web方法,但正如您所知,web方法无法从用户控制中工作,所以您必须创建一个web服务来实现这一点

这对我来说很好,但我有以下顾虑

  • 如果在ASPX页面中使用web方法,则代码对用户不可见,因此如何防止用户浏览我的服务并查看我的代码,而只允许页面或用户控件调用web服务
  • 是否有任何用户可以像跨站点脚本编写、ping等那样高举我的代码。。。用这种方法
  • 使用这种方法,客户机可以看到什么,我用来调用服务的java脚本代码块或所有东西
  • 如有任何额外建议,将不胜感激

所有javascript都将可见,但这不是真正的问题


将属性EnableSession添加到您的webmethod将允许您使用与页面中相同的安全代码。

无需进入.NET即可指定,因为这不是我的字段:

客户机上运行的任何内容(如JavaScript)都是用户可见的,用户可以在其系统范围内任意修改它

用户看不到服务器上运行的任何内容

为了让用户能够单击按钮并在服务器上运行代码,浏览器必须向服务器发送HTTP请求。简单的方法是使用表单。这提供了一个新的解决方案

更复杂的方法是使用JavaScript显式地构造请求(而不仅仅是让浏览器来处理)。这允许使用“访问新页面”以外的其他方法提交数据,这为Ajax提供了所需的灵活性

对于任何一种方法,本质上都定义了一个可以通过HTTP访问的公共API

您需要防御两大类攻击(不管是否涉及Ajax,它仍然是相同类型的API)

  • 直接攻击-检查您的数据是否正常,不允许用户在没有身份验证的情况下编辑内容
  • 间接攻击-第三方欺骗用户输入错误数据(例如,通过另一个站点上的链接,要求其浏览器向您的站点发出HTTP请求)。防御措施包括要求客户端在提交数据之前请求一次性令牌(例如,在提供表单时生成隐藏输入,以阻止第三方使用自己的表单和恶意数据,并使用JS将用户提交到您的站点)

  • 简而言之:使用与JS无关时相同的防御措施。

    谢谢,伙计,但正如我在scutt博客ASP.NET中所读到的,AjAX阻止了这一点,还是我错了?还有一件事是我如何阻止用户访问www.mysite/myservice.asmx我想隐藏它使其不可见和不可访问。你能给我一些关于这两种危险攻击的文章的web链接,或者他们的官方名称,以便我搜索他们。如果浏览器必须向myservice.asmx发出请求,那么它就不可能是看不见的或不可接近的。当然,其中的任何服务器端代码对客户端都不可用,但是它公开的HTTP API必须让客户端通过HTTP与之交互。哦,现在很清楚了,所以只有HTTP API。我在web配置中使用过它,它可以阻止任何对web服务的直接访问,从客户端从页面调用它仍然可以,让我烦恼的是检查代码时fiddler中的403。谢谢,如果JavaScript代码很清楚,这并不是你说的问题,但我不希望我的服务类和函数的逻辑显示在浏览器中。因此,通过EnableSession,我的web服务将完全像一个网页?基本上,是的。web服务实现由服务器端代码编译而成。EnableSession更多的是关于数据的,它可以让你获得登录到网页的用户的详细信息,这样你就不会公开任何私人数据,如果您知道如何防止用户访问www.mysite/myservice.asmx,请告诉我,我想隐藏它,使其不可见且不可访问这几乎是默认行为-除了从本地计算机调用外,它不显示任何UI,请求是post而不是get,如果用户没有正确地进行身份验证,或者页面设置的会话变量丢失,则可以让代码抛出异常。