我有一个应用程序(iOS),它将发布请求发送到服务器,在那里检查和存储数据。基本上我发送的是userid,纬度和经度值。在我的服务器上有一个简单的PHP脚本,它执行一些基本检查并将数据保存到数据库中。
这意味着如果我在手机上使用wifi并且有人进行数据包嗅探,他可能只是重复使用或更改这些值并使用错误的数据充斥我的服务器。有一些避免这种情况的好方法吗?我对这些安全问题并没有那么多,使用SSL似乎对我的目的来说有点过分。我正在考虑某种额外的帖子值,我在服务器上验证,然后决定请求是否有效,但我找不到任何简单的方法来完成这样的事情。
对此有何看法?
提前致谢
答案 0 :(得分:2)
OpenSSL绝对是一个完美的匹配,因为你不希望攻击者知道你的数据包写的是什么。 您还可以添加时间戳以避免TCP重放攻击,并添加登录/密码元组以确保发送这些信息的设备有权为特定用户执行此操作。
答案 1 :(得分:1)
实施基于会话的密码短语。无论您是唯一的用户还是多个用户之一,实施方式都会有很大差异。每次要向服务器提交新数据时,请从服务器请求PHRASE,这将是一个随机生成的字符串;如果多个用户然后绑定到该SESSION / USER,则必须将其存储在服务器上。您的应用必须从您那里获得某种形式的输入;比如PIN码或密码,它会被这个PHRASE腌制,然后散列。散列值将与您的其他值[Lat,Lng,...]一起发送,并且将在服务器上进行相同的比较,其将具有盐渍密码+短语[或多个密码将共存时的多个]如果匹配则允许提交数据,否则不允许。数据包嗅探器能够嗅探你的数据包,但除非随机生成的短语重复出现,否则他们的发现将完全无用,因为这会强制使用单一用途的令牌。这也可以防止TCP重放攻击,因为数据被认为是不正确的,因为第一次提交后令牌会不正确[这显然会重置存储在服务器上的短语/生成新的短语]
用于更改用短语加密的密码的转换/哈希必须是单向的,因此数据包嗅探器无法撤消它并获取您的PIN /密码。
编辑,或正如其他人所说的那样使用SSL;以上可能是与SSL一起使用的礼仪,但如果没有它,它将正常工作。 ++我知道Lat,Lng,...等仍然可以被嗅探,但考虑到他们是在同一个Wi-Fi上;我怀疑他们与攻击者有很大的不同。另外,它不是OP中的问题。