我可能不会以最好的方式解决这个问题,但作为一个学校项目,我正处于一个小组,我们正在开发一个系统来处理入住和退房以及处理任何可能的费用。由于房间内物品的损坏而产生。我们正在将项目数字化并投入网络并编写本机iPhone应用程序(作业的一部分,我宁愿把它变成一个通用的网络应用程序,但是哦)。对于iPhone应用程序,我们正在组建一个Web API,但我对我们保持API安全的尝试有一些疑问。
我们现在的流程是调用API以使用用户名和密码哈希登录,如果登录成功,则生成身份验证令牌并以XML形式返回到iPhone以及其他各种数据。每个后续请求都需要此AuthToken。用户可以退出,或者如果20分钟不活动,则AuthToken将被破坏服务器端。但这使得API打开“Pass The Hash”攻击,任何收听请求的人都可以从查询字符串中获取密码哈希值。任何拥有Wireshark和简单过滤器的人都可以等待某人登录,这时每个人都会进入宿舍并能够操纵任何东西。
每一个请求都容易受到Pass The Hash攻击。登录时,可以稍后重复用户名和密码以获得不同的AuthToken。不仅如此,可以使用任何已经生成的AuthTokens,并且在没有真实用户知道的情况下扩展会话。
我已经考虑过将AuthToken绑定到IP地址并拒绝使用来自备用IP地址的有效AuthToken的请求的想法,这是可靠的还是iPhone会在单元网络上跳过IP地址而不是Wifi ?我想给任何恶意用户带来困难,但显然不是合法用户。
该项目仍处于早期阶段,所以现在是时候对这样的API做出重大改变了。有关保护Web API的任何提示都很棒。
答案 0 :(得分:1)
您最好的选择是通过SSL发送所有内容。这将阻止任何人收听电报并嗅探密码哈希或身份验证令牌。
您还应该考虑向客户端发送一个随机密码以及密码,以防止重放攻击。
在每个请求上更改身份验证令牌也非常容易。这可以防止重放和会话固定。只需确保令牌是好的随机数。
答案 1 :(得分:0)
您需要使用HTTPS。
如果你包含使用Wireshark的人,那么HTTP上的大多数内容都会受到影响。 HTTPS加密客户端和服务器之间的所有流量,并防止大多数数据包嗅探攻击。