用于上载数据的Web服务:安全注意事项

时间:2010-05-02 21:41:40

标签: c# .net security authentication web-services

我不确定我应该为我的webservice使用什么身份验证方法。我搜索了SO,发现没有任何帮助我。

初步

我正在构建一个应用程序,将数据从本地数据库上传到服务器(运行我的web服务),其中所有记录都合并并存储在中央数据库中。我目前正在二进制序列化DataTable,它包含本地数据库的一小部分,其中所有不感兴趣的内容已被过滤掉。然后将byte[](序列化的DataTable)以及用户ID和用户密码的哈希值通过SOAP上载到Web服务。该应用程序与Web服务一起完全按照预期工作。

问题

我正在考虑的问题是:如果有人只是嗅探网络流量,那么“窃取”用户ID和密码哈希以发送自己的SOAP消息,修改后的数据会破坏我的数据库?

小更新:不要被误解:我不担心语法/验证问题。到达Web服务的所有数据当然都经过验证,我对其进行了密集测试。我的意思是'攻击者可以语义破坏数据库':例如用户只能编辑他提交的记录。攻击者可以利用这一事实,并将自己伪装成某个用户并编辑他上传的数据。

我只是不希望具有一些技术理解的人可以使用另一个用户名中的垃圾转储数据库。

选项

我已经想到解决这个问题的方法是:

  • 使用ssl +证书建立连接:
    • 我真的不想使用ssl,我更喜欢更简单的解决方案。毕竟,以后可以在网站上看到转移到Web服务的所有信息。我想说的是:没有必须隐藏的秘密/财务/关键业务信息。我认为ssl对于这项任务来说有点过分了。
  • 加密 byte[]
    • 我认为这将是一个性能杀手,考虑到练习的目标只是为了验证用户。
  • 将用户密码与数据一起散列:
    • 我有点喜欢这样的想法:从数据创建校验和,将校验和与密码哈希连接起来并再次散列整个事物。这样可以确保数据是从这个特定用户发送的,数据没有被修改。

实际问题

那么,您认为在满足以下要求方面最好的方法是什么?

  • 相当简单的解决方案(因为它不一定非常安全;不会传输任何秘密/关键业务信息)
  • 回顾性地轻松实现(不想再写一遍:))
  • 对性能的影响不大

您如何看待我的首选解决方案,即上面列表中的最后一个解决方案?

我没有提到任何替代解决方案,那会更合适吗?

我什么都不担心?仅发送每个SOAP消息的用户id和密码哈希就足够了吗?

您不必详细回答每个问题。只是把我推向正确的方向。我非常感谢每一个有充分根据的意见。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您绝对必须使用HTTPS。 SSL是迄今为止您可以实施的最简单的安全系统,每年只需30美元。不要重新发明轮子!毕竟你的时间真的值多少钱?你不能只称呼“加密功能”。要正确实现此协议,您必须担心分组密码模式,初始化向量,string2key(s2k)函数,最后是一种验证服务器和/或客户端的方法(非对称cyrpto / PKI ..​​.)。简而言之,绝大多数程序员完全不知道如何创建真正安全的协议。

更多的是绝对不可能来创建没有SSL的安全会话和身份验证。这来自OWASP前10名A3:Broken Authentication and Session Management

  

将用户密码与数据一起隐藏

您在这里描述的是Hash Message Authentication Code或HMAC。如果您只是以明文形式在线路上发送用户名和密码,那么这样做是没有意义的。 hmac的重点在于您使用的是秘密,除非您使用SSL,否则密码不是秘密。

如果您通过电汇发送密码哈希进行身份验证,那么您真的搞砸了。哈希密码的全部要点是在他使用sql注入从数据库获取另一个用户密码哈希之后减慢攻击者的速度,如果您使用消息摘要进行身份验证,那么攻击者将不必破坏哈希。就像您以明文形式存储密码一样。