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

时间:2009-05-07 11:15:22

标签: c# asp.net web-services

我正在使用脚本管理器在客户端调用Web方法但是您知道Web方法无法通过用户控件工作,因此您必须创建一个Web服务来执行此操作。

这对我很好,但我有以下问题

  • 如果您在ASPX页面中使用Web方法,则代码对用户是不可见的,因此如何防止用户浏览我的服务并查看我的代码,只让页面或用户控件调用Web服务。
  • 无论如何,用户可以使用这种方法来填充我的代码,例如Cross Site Scripting,Pinging等等。
  • 使用这种方法客户端可以看到什么,我用来调用服务的java脚本代码块还是一切?
  • 任何额外的建议都将完全受到赞赏。

2 个答案:

答案 0 :(得分:1)

所有的javascript都会显示,但这不是真正的问题。

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

答案 1 :(得分:1)

不进入.NET指定,因为那不是我的字段:

在客户端上运行的任何内容(例如JavaScript)对于可以在系统范围内根据需要进行修改的用户都可以看到。

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

对于用户能够单击按钮并在服务器上运行代码,浏览器必须向服务器发送HTTP请求。简单的方法是使用表格。这提供了standard means to structure data

更复杂的方法涉及使用JavaScript明确构建请求(而不是让浏览器处理它)。这使得数据可以使用除“访问新页面”之外的其他方法提交,这提供了Ajax所需的灵活性。

使用任何方法,您基本上都可以定义可通过HTTP访问的公共API。

您需要防范两大类攻击(如果涉及或不涉及Ajax,它仍然是相同类型的API)。

  1. 直接攻击 - 完整性检查您的数据,不要让用户在未经身份验证的情况下编辑内容。
  2. 间接攻击 - 第三方欺骗用户输入错误数据(例如,通过另一个网站上的链接,要求他们的浏览器向您的网站发出HTTP请求)。防御包括要求客户端在他们可以提交数据之前请求一次性令牌(例如,在提供表单时生成隐藏输入以阻止第三方使用他们自己的表单和恶意数据并通过提交用户到您的站点时JS)。
  3. 简而言之:如果没有涉及JS,请使用相同的防御措施。