如何防止任何人向我的网络服务发送请求

时间:2010-07-27 11:35:28

标签: c# xml web-services httpwebrequest

我在C#中有一个应用程序,它将对象序列化为xml到我的服务器的http流中。服务器有一些php在mysql中运行存储过程,xml数据作为唯一参数。

问题在于,有人可以很容易地发送一个相同格式的xml,其中包含大量的垃圾邮件,这会破坏数据库中的垃圾数据。有什么方法可以防止这种情况发生?

我对网络请求很陌生,所以我甚至不知道从哪里开始。

4 个答案:

答案 0 :(得分:2)

我们要求将所有输入参数列表提供的用户名和密码在处理请求之前通过我们的后端用户登录系统进行验证。低技术,但适合我们。

答案 1 :(得分:1)

您应该使用某种形式的身份验证和授权。在基于SOAP的服务中,有WS-Security扩展名。这是另一个article on MSDN,它解释了这是如何工作的。但是我不知道PHP方面对这些标准的支持是什么。如果您使用的是某些自定义协议,则只需要将用户名/密码与请求一起发送,并在服务器端进行验证。

答案 2 :(得分:1)

您是否打算在互联网上公开使用此客户?如果是这样,可能无法阻止人们使用不同的软件,因为他们总是可以对应用程序进行逆向工程以找出您正在使用的安全机制。因此,您唯一的防御就是在服务器上彻底验证数据。

您可以通过修改客户端以要求使用HTTPS将数据发送到您的服务器的用户名和密码来解决这个问题,至少您知道谁造成了损害。但是,如果您拥有更多封闭的受众,则可以使用某种客户端证书系统或IP过滤。

答案 3 :(得分:0)

我们的解决方案(我们在这方面绝对天真)是我们以非统一的方式在服务器上为每个会话生成一个唯一密钥(即很难预测“下一个”值是什么),并将其作为其登录过程的一部分提供给客户端代码。然后,需要将该值作为第一个参数传递给每个请求。

这可以确保:

  • 注销使身份验证密钥无效
  • 用户名和密码不会以明文形式发送给Web服务请求

这不能确保:

  • 只有我们的应用程序代码可以与服务器通信(用户可以拦截请求,复制密钥,并生成他自己的请求,只要该密钥仍被视为有效。)

您要发现的是,只要用户计算机上的代码与您的服务器通信,您就无法控制该计算机上的代码,只能控制该服务器上的代码。因此,如果用户计算机向您发送来自不同程序的请求,这看起来就像他们愿意并且如果您的代码生成它们,那么您将很难确定这是发生了什么。