我不确定我应该为我的webservice使用什么身份验证方法。我搜索了SO,发现没有任何帮助我。
我正在构建一个应用程序,将数据从本地数据库上传到服务器(运行我的web服务),其中所有记录都合并并存储在中央数据库中。我目前正在二进制序列化DataTable
,它包含本地数据库的一小部分,其中所有不感兴趣的内容已被过滤掉。然后将byte[]
(序列化的DataTable)以及用户ID和用户密码的哈希值通过SOAP上载到Web服务。该应用程序与Web服务一起完全按照预期工作。
我正在考虑的问题是:如果有人只是嗅探网络流量,那么“窃取”用户ID和密码哈希以发送自己的SOAP消息,修改后的数据会破坏我的数据库?
小更新:不要被误解:我不担心语法/验证问题。到达Web服务的所有数据当然都经过验证,我对其进行了密集测试。我的意思是'攻击者可以语义破坏数据库':例如用户只能编辑他提交的记录。攻击者可以利用这一事实,并将自己伪装成某个用户并编辑他上传的数据。
我只是不希望具有一些技术理解的人可以使用另一个用户名中的垃圾转储数据库。
我已经想到解决这个问题的方法是:
byte[]
:
那么,您认为在满足以下要求方面最好的方法是什么?
您如何看待我的首选解决方案,即上面列表中的最后一个解决方案?
我没有提到任何替代解决方案,那会更合适吗?
我什么都不担心?仅发送每个SOAP消息的用户id和密码哈希就足够了吗?
您不必详细回答每个问题。只是把我推向正确的方向。我非常感谢每一个有充分根据的意见。
提前致谢!
答案 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注入从数据库获取另一个用户密码哈希之后减慢攻击者的速度,如果您使用消息摘要进行身份验证,那么攻击者将不必破坏哈希。就像您以明文形式存储密码一样。