小编Pol*_*lly的帖子

如何在不登录的情况下保护Web服务

我有一个移动应用程序(目前是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分!

security web-services ios

50
推荐指数
3
解决办法
9333
查看次数

无距离地理搜索

这是我第一次看地理位置.请原谅我的长话题.我希望很清楚.

我有一个数据库,用lat&lng保存记录.我正在尝试编写一个PHP类,它定义了四个十进制坐标,形成一个边界框(然后检索框内的所有记录).

我只需要知道哪些位置在用户位置的n km 范围内.我不需要从用户到位置的距离.

我正在建立这个答案的第一部分.

以上答案的核心是:

直线10公里是:

on the latitude is equal to ~1'(minute)
on the longitude is equal to ~6'(minutes)
Run Code Online (Sandbox Code Playgroud)

以此为基础,进行一些快速数学运算,并在查询中添加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)

php gis geolocation

9
推荐指数
1
解决办法
452
查看次数

如何衡量客户端和服务器之间使用的网络带宽?

我有一个客户端从服务器获取JSON响应.我想计算有多少请求/响应将消耗我从网络托管公司分配的转移限额(例如每月100GB).

我该如何衡量/计算?

我假设我只需要测量一次因为msgs具有一致的长度和格式.

我控制客户端/服务器/网络.所有人都可以独特地完成任务.客户端是IOS应用程序,服务器是PHP REST Web服务(在Windows上).在我的局域网上.

我对此一无所知,到目前为止只使用了JSON的大小strlen().这是否正朝着正确的方向前进?

php networking network-programming ios

7
推荐指数
1
解决办法
2492
查看次数

Xcode - 这是MVC吗?

我是兼职记事本网站编码器,采取步骤进入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)

model-view-controller xcode objective-c

5
推荐指数
1
解决办法
1972
查看次数