假设我需要从iPhone应用程序访问Web服务.此Web服务要求客户端对HTTP请求进行数字签名,以证明应用程序"知道"共享密钥; 客户端密钥.请求签名存储在HTTP头中,请求只是通过HTTP(而不是HTTPS)发送.
这个密钥必须始终保密,但需要iPhone应用程序使用.
那么,鉴于您始终被告知永远不会在客户端存储任何敏感内容,您将如何安全地存储此密钥?
普通用户(99%的用户)很乐意使用该应用程序.会有某个人(一个敌人?)想要这个秘密客户密钥,以便通过冒充来对服务或客户密钥所有者造成伤害.这样的人可能越狱他们的手机,访问二进制文件,运行"字符串"或十六进制编辑器并四处寻找.因此,仅将密钥存储在源代码中是一个糟糕的主意.
另一个想法是将密钥存储在代码中而不是字符串文字中,而是存储在从字节文字创建的NSMutableArray中.
可以使用钥匙串,但由于iPhone应用程序永远不必提供密码来存储钥匙串中的东西,我担心有权访问应用程序沙箱的人可以并且能够简单地查看或轻松解码其中的项目.
编辑 - 所以我读到了关于钥匙串的信息:"在iPhone OS中,应用程序总是可以访问自己的钥匙串项目,并且无法访问任何其他应用程序的项目.系统会为钥匙串生成自己的密码,并存储密钥在设备上以任何应用程序都无法访问它."
所以也许这是存放密钥的最佳位置....如果是这样,我如何使用预先输入到应用程序钥匙串中的密钥?那可能吗?否则,如果没有密钥在源代码中,你怎么能在第一次启动时添加密钥?嗯..
编辑 - 提交的错误报告#6584858在http://bugreport.apple.com
谢谢.
Web Socket检测是否存在代理服务器,并自动设置隧道以通过代理.通过向代理服务器发出HTTP CONNECT语句来建立隧道,代理服务器请求代理服务器打开到特定主机和端口的TCP/IP连接.一旦建立了隧道,通信就可以畅通无阻地通过代理.由于HTTP/S以类似的方式工作,因此SSL上的安全Web套接字可以利用相同的HTTP CONNECT技术.[1]
好的,听起来很有用!但是,在我到目前为止看到的客户端实现中(Go [2],Java [3])我没有看到任何与代理检测有关的内容.
我错过了什么或这些实施只是年轻?我知道WebSockets是非常新的,客户端实现可能同样年轻和不成熟.我只是想知道我是否遗漏了代理检测和处理方面的问题.
[1] http://www.kaazing.org/confluence/display/KAAZING/What+is+an+HTML+5+WebSocket
[2] http://golang.org/src/pkg/websocket/client.go
[3] http://github.com/adamac/Java-WebSocket-client/raw/master/src/com/sixfire/websocket/WebSocket.java
当然可以运行单个节点集群,但我想要一定程度的容错能力.
目前我可以租用两台服务器(8GB RAM,私有VLAN @ 1GigE)而不是3台服务器.
我的理解是,3个节点是Cassandra集群所需的最小节点,因为2个节点之间不可能存在大多数节点,并且解决版本控制冲突需要大多数节点.哦等等,我想到"矢量时钟"和Riak?确认!Cassandra使用时间戳来解决冲突.
对于2个节点,建议的读/写策略是什么?我通常应该写入所有(两个)节点并从ONE读取(N = 2; W = N/2 + 1; W = 2/2 + 1 = 2)?像往常一样,Cassandra会使用暗示切换,即使是2个节点,是吗?
这两台服务器位于同一数据中心FWIW中.
谢谢!
考虑一个稀疏文件,其中1s写入文件的一部分.
我想回收磁盘上这些1的实际空间,因为我不再需要稀疏文件的那部分.包含这些1的文件部分应该成为一个"洞",就像1s自己写的那样.
为此,我将该区域清除为0.这并没有收回磁盘上的块.
我如何实际制作稀疏文件,再次稀疏?
这个问题与此类似,但该问题没有被接受的答案.
考虑在库存Linux服务器上运行的以下事件序列:
$ cat /tmp/test.c
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
int main(int argc, char **argv) {
int fd;
char c[1024];
memset(c,argc==1,1024);
fd = open("test",O_CREAT|O_WRONLY,0777);
lseek(fd,10000,SEEK_SET);
write(fd,c,1024);
close(fd);
return 0;
}
$ gcc -o /tmp/test /tmp/test.c
$ /tmp/test
$ hexdump -C ./test
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00002710 01 01 01 01 01 01 01 01 …Run Code Online (Sandbox Code Playgroud) 我正在学习Apache Cassandra数据库[原文如此].
有没有人将Cassandra部署到像Linode或Slicehost的产品那样的专用硬件上有任何好/坏经验?
我认为Cassandra是一种很容易扩展Web服务以满足读/写/请求加载的好方法...只需将另一个运行Cassandra节点的Linode添加到现有集群中.是的,这意味着在同一个VPS上运行公共Web服务和Cassandra节点(许多人可以采取例外).
Cassandra的Linode式部署的优点:
缺点:
编辑:发现这有点帮助:http://wiki.apache.org/cassandra/CassandraHardware
我看到1GB是最低的,但这是推荐吗?例如,我可以使用Linode 720进行部署(比如说Cassandra可以使用500 MB)吗?见http://www.linode.com/
我正在尝试学习如何在我的应用程序中映射实体/演员/对象/事物以便在Cassandra中存储.Redis有一个很棒的教程,用于建模Twitter数据和称为Retwis的典型访问模式[1].我找到了几个Cassandra的例子.
你是如何开始为Cassandra的数据模型获得直觉的?
我最近创建了一个基于回合制的游戏服务器,可以接受数以万计的同时客户端连接(Linux上的长篇短篇小说).通信基于简单的,定制的,基于行的协议.该服务器允许客户端连接,在游戏比赛中寻找其他玩家,玩游戏(发送动作,聊天消息等),并在游戏结束时得到通知.
我现在要做的是通过模拟客户端连接来测试服务器.我希望能够支持成千上万的同时连接,所以这个测试对我来说非常重要.你们有什么用于自己的测试?
我正在研究的一些事情是:pexpect(python期望用于功能测试的lib)和用于负载测试的tsung.
我希望能够从我的笔记本电脑进行测试,因为我没有可连接的客户端机器集群.也许我需要使用ip别名或类似的东西来生成数以千计的出站套接字(每个接口AFAIK限制为65K).
无论如何,在我看来,我需要一些相当习惯的东西,但我想在我走这条路之前我会问.
谢谢!
我正在寻找像ABPeoplePickerNavigationController这样的现有视图控制器,而不是显示来自地址簿的联系人显示用户的Facebook好友.
我之前创建了一个自定义选择器,但在看到Words with Friends做了类似人员选择器的事情之后,它似乎是一个更好的解决方案...但我不知道他们是否从头开始创建他们的选择器也无法找到任何东西.
我正在使用python 2.6.1在Mac OS X 10.5盒子上测试cogen.我有一个简单的echo服务器和客户端泵,可以创建10,000个客户端连接作为测试.1000,5000等都工作得很好.但是,在大约10,000个连接处,服务器开始丢弃随机客户端 - 客户端看到"通过对等方重置连接".
我在这里缺少一些基本的网络背景知识吗?
请注意,我的系统配置为处理打开的文件(launchctl limit,sysctl(maxfiles等),ulimit -n都是有效的;在那里,完成了).此外,我已经证实cogen正在选择使用kqueue.
如果我给client-connect()调用添加一点延迟,一切都很好.因此,我的问题是,当短时间内连接频率很高时,为什么服务器会在压力下降其他客户端?有没有人遇到过这个?
为了完整起见,这是我的代码.
这是服务器:
# echoserver.py
from cogen.core import sockets, schedulers, proactors
from cogen.core.coroutines import coroutine
import sys, socket
port = 1200
@coroutine
def server():
srv = sockets.Socket()
srv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr = ('0.0.0.0', port)
srv.bind(addr)
srv.listen(64)
print "Listening on", addr
while 1:
conn, addr = yield srv.accept()
m.add(handler, args=(conn, addr))
client_count = 0
@coroutine
def handler(sock, addr):
global client_count
client_count += 1
print "SERVER: [connect] clients=%d" % …Run Code Online (Sandbox Code Playgroud) 我正在创建一项服务,可以“走向国际”到非英语市场。我不想将用户名限制为 ASCII 字符范围,但希望允许用户指定他们的“自然”用户名。好的,使用 UNICODE(并说 UTF-8 作为我的用户名文本编码)。
但!我不希望用户创建包含“符号”代码点的“非名称”用户名。例如,我不想允许像 ??????øøøøø 这样的用户名。
是否有 UNICODE 的“符号”代码点列表,我可以检查(可能使用正则表达式)以接受/拒绝给定的用户名?
谢谢!
cassandra ×3
nosql ×3
database ×2
networking ×2
codepoint ×1
cryptography ×1
epoll ×1
events ×1
facebook ×1
file ×1
filesystems ×1
ios ×1
iphone ×1
linode ×1
linux ×1
performance ×1
python ×1
security ×1
sockets ×1
sparse-file ×1
system ×1
tcl ×1
tcp ×1
testing ×1
unicode ×1
validation ×1
vps ×1
websocket ×1