我有一个移动应用程序(目前是IOS,很快就是Android),它与Web服务进行通信.没有登录,数据不是私有的.基本上,应用程序POST一个标记(lon,lat)并获取最近的25个标记以显示在地图上.
这是一个非常简单的应用程序,我无法想象有人在努力滥用Web服务.但是,我可以看到有人在发布许多标记时很有趣.最让我担心的是有人运行一个脚本来推送许多请求(使用昂贵的带宽并使我的应用数据无意义).
我慢慢得出结论,这是不安全的.最好的答案是"不要这样做".不提供身份验证的Web服务.没有多少服务如此开放.Google的You Tube API已经开放,但大部分都没有.不幸的是,我别无选择.所以经过几天看这里是我的想法.请注意,我离安全专家很远,我相信我的方法可以改进.但它可能会指出你正确的方向.希望更有经验的人可以加入并纠正/改进.我发现这篇文章和评论特别有帮助.
消息级安全性
我将使用哈希加密来保护msgs.客户端和Web服务都保留共享密钥的副本,该密钥用作salt以从URL和所有POST参数创建哈希.散列作为附加参数传递,并且重建散列并在另一端进行比较(使用共享密钥作为salt).这一点非常好,直到您了解任何移动客户端代码可以在几分钟内进行逆向工程.在这一点上,这条防线毫无用处.
客户措施
客户端包括消息的速率限制,作为限制诚实用户发送的消息数量的措施.然而,对于越狱移动设备的攻击者来说,这是无用的.
服务器端安全性
因此,服务器端必须具有尽可能多的额外安全措施,并且假设您的客户端(和共享密钥)受到损害.这是我有的:
一个msg arg是UTC时间,用于限制重放攻击.这应该可以防止攻击者反复在服务器上触发相同的消息.
服务器通过IP执行速率限制.是的,IP很容易被欺骗,代理切换是孩子们的游戏,但是当你这么少时,一切都会有所帮助.
当然,服务器严格验证所有参数,使用参数化查询并且不返回异常.
运输级安全
不幸的是,我相信在没有注册过程的情况下无法发布个人客户端SSL证书.因为我正在使用msg哈希检查(并且我的数据不是私有的),我不完全确定SSL给表带来了什么.但是,我可能会使用SSL(具有一个应用程序范围的证书),因为它增加了另一个安全级别,可以轻松且廉价地部署(尽管每个消息的额外连接时间都要花费).
在我的方法中的Gaping伟大的大洞
我被警告说,如果应用程序变得流行,有人会破坏客户端的共享秘密.只是因为他们可以,他们可能会在互联网上发布它.所以这一切都归结为服务器端.不幸的是,我无法识别并阻止攻击者.我非常喜欢这个.
最后的辩护
经过几天的研究,这就是我的全部.但我想要更多.我特别感谢任何加强服务器端的想法.所以,我把所有的SO点都作为赏金.是的先生,全部97分!
这是我第一次看地理位置.请原谅我的长话题.我希望很清楚.
我有一个数据库,用lat&lng保存记录.我正在尝试编写一个PHP类,它定义了四个十进制坐标,形成一个边界框(然后检索框内的所有记录).
我只需要知道哪些位置在用户位置的n km 范围内.我不需要从用户到位置的距离.
我正在建立这个答案的第一部分.
以上答案的核心是:
直线10公里是:
Run Code Online (Sandbox Code Playgroud)on the latitude is equal to ~1'(minute) on the longitude is equal to ~6'(minutes)
以此为基础,进行一些快速数学运算,并在查询中添加WHERE子句,删除通过添加缓冲区创建的"框"之外的任何位置,假设为1'lat和6'long.
嗯,"做一些快速数学"帕特里克说.几天后我没能正确地完成数学计算.
我的班级挂在那里,似乎工作了10公里.但是,我没有让它与任何其他距离一起工作.
首先我移动到秒,所以10km是:
on the latitude is equal to 60 seconds
on the longitude is equal to 360 seconds
Run Code Online (Sandbox Code Playgroud)
这很好.
但是,我接着尝试了5km是:
on the latitude is equal to 30 seconds
on the longitude is equal to 180 seconds
Run Code Online (Sandbox Code Playgroud)
这没用.
你能解释为什么这种方法不适用于5km(以及我尝试的其他距离)吗?
下面是我的班级代码.显然这个开关是垃圾.任何帮助赞赏.
class coords
{
/*
Calculate a bounding box from a decimal coordinate and distance. …
Run Code Online (Sandbox Code Playgroud) 我有一个客户端从服务器获取JSON响应.我想计算有多少请求/响应将消耗我从网络托管公司分配的转移限额(例如每月100GB).
我该如何衡量/计算?
我假设我只需要测量一次因为msgs具有一致的长度和格式.
我控制客户端/服务器/网络.所有人都可以独特地完成任务.客户端是IOS应用程序,服务器是PHP REST Web服务(在Windows上).在我的局域网上.
我对此一无所知,到目前为止只使用了JSON的大小strlen()
.这是否正朝着正确的方向前进?
我是兼职记事本网站编码器,采取步骤进入IOS应用程序.我上周得到了我的第一台mac,并拼凑了一个半工作的应用程序.现在,通过这个SO答案,我正在重新开始尝试学习MVC.我的学习曲线非常陡峭所以请耐心等待.
我已经读过MVC,分层,三个盒子和一些箭头,我明白了.然而,将理论转化为现实世界令人沮丧.我看过的大多数示例应用程序似乎都没有使用MVC.甚至来自Apple的这个LazyTableImages示例似乎也使用app delegate
了让我困惑的模型.我建立在这个非常简单的MVC示例上.
我的应用从网络服务中检索位置标记.我有一个使用ARC的标签应用程序.一个选项卡有一个Mapkit地图来显示标记.
一个简单的类来保存标记记录:
@interface MarkerRecord : NSObject
@property (strong, nonatomic) NSDecimalNumber *lat;
@property (strong, nonatomic) NSDecimalNumber *lon;
@property (strong, nonatomic) NSString *des;
Run Code Online (Sandbox Code Playgroud)
一个Model类,包含一组Marker类,用于提供两个视图.这是我的Model类.h:
@interface MarkersModel : NSObject
- (void)getMarkers; // Send HTTP GET to web service to retrieve JSON markers
- (void)postMarker; // Send HTTP POST to web service to INSERT new marker record
Run Code Online (Sandbox Code Playgroud)
并实施:
@interface MarkersModel ()
@property (strong, nonatomic) NSArray *data;
@end
@implementation MarkersModel
@synthesize data;
- (void)getMarkers …
Run Code Online (Sandbox Code Playgroud) ios ×2
php ×2
geolocation ×1
gis ×1
networking ×1
objective-c ×1
security ×1
web-services ×1
xcode ×1