许多用户 - 包括我自己 - 希望将他们在Web服务上所做的一切加密的安全性.也就是说,他们不会在网络服务中任何人能够查看他们的帖子,信息,任务等......
在讨论其他很酷的服务时,这也是一个主要的抱怨:http://news.ycombinator.com/item?id = 1549115
由于此数据需要可恢复,因此需要某种双向加密.但除非您在每个请求中提示用户输入加密密钥,否则此密钥将需要存储在服务器上,并且加密数据的点基本上会丢失.
什么是在不降低用户体验的情况下安全加密用户数据的方法(在每个请求中要求一些密钥)?
- 更新 -
从@ Borealid的回答中,我专注于两种可能性:挑战 - 响应协议,其中没有数据(包括密码)在"清除"中发送,而非挑战 - 响应协议,其中数据(包括密码)在"清除"(尽管通过HTTPS).
挑战 - 响应协议(特别是SRP:http://srp.stanford.edu/)
它的实现似乎需要依赖于完全AJAX站点或使用Web存储.这样浏览器可以在加密期间保持质询 - 响应数据,并且还可以在不同"页面"之间保持加密密钥.(我假设在完成身份验证后,我会将它们发送回加密的加密密钥,他们会在客户端解密以获取真正的加密密钥.)
问题是我要么:
此外,由于SRP需要多个请求(http://srp.stanford.edu/design.html),因此需要在服务器端存在一些持久性.这只是另一个难题.
传统
如果我可以清楚地传输密码和数据(虽然通过HTTPS),那么上面的客户端问题就不存在了.
在注册时,我将为用户生成一个随机的唯一加密密钥,并使用他们的密码和随机盐对其进行加密.
在数据库中,我将存储用户的密码哈希和salt(通过bcrypt),加密的加密密钥,加密密钥盐和加密iv.
在身份验证之后,我还需要使用他们的密码来解密加密密钥,以便他们可以查看和输入新数据.我只暂时存储此加密密钥,并在明确"注销"时将其删除.
这种方法存在的问题是(就像@Borealid指出的那样)邪恶的系统管理员在您登录时仍然可以查看您的数据.
用户登录时我也不确定如何存储加密密钥.如果他们在同一个数据存储中,被盗数据库会显示盗窃时登录的所有数据.
是否有更好的内存数据存储来存储这些加密密钥(并在SRP身份验证期间挑战数据)?这是Redis会有用的东西吗?
我对JavaScript有多深入了解,我发现自己要求那么多.例如,我们有window.onresize事件处理程序,如果我说:
window.onresize = resize;
function resize()
{
console.log("resize event detected!");
}
Run Code Online (Sandbox Code Playgroud)
这不会杀死连接到同一事件的所有其他功能,只是在控制台中记录我的消息吗?
如果是这样,我认为应该有另一个通知器告诉我关于窗口调整大小事件 - 或者可能是一种解决方法 - 而不会覆盖绑定到同一事件的其他函数.
或者我完全被它的用法搞糊涂了?
我想知道这是否可行.大多数情况下,我想了解GNOME究竟做了什么?鉴于GTK +的可用性,当然还有X11,难道不能只运行应用程序吗?当然,我不确定(这就是为什么我会问这个问题),但我认为GNOME只是"组织"GUI以使其更像桌面,并提供一些工具和实用程序等.这是正确的还是还有更多的东西?
谢谢!
简要:
我在我的框架中有一个子类的AuthorizeAttribute,我正在进行自定义授权.
我正在通过jQuery从正常的asp.net mvc视图渲染切换到Ajax渲染.因此,应用程序中的每个链接都执行ajax调用以获取数据.
为了满足这个需求,我将大部分页面转换为部分视图,以便每个ajax请求只获取需要在页面上更新的部分.
在正常视图呈现期间,当请求未经授权时,它将被重定向到web.config中描述的登录页面.转换为Ajax后,事情有点不同,因为我不想在ajax请求中使用登录页面的标记,但想要在其中进行结构化响应,以便我可以在ajax调用中相应地执行操作.
为了做到这一点,我相信我必须覆盖子类的AuthorizeAttribute类中的HandleUnauthorizedRequest方法,并将filterContext.Result设置为json结果.但在这样做的过程中,我如何区分未经授权的请求和成功的请求,因为从ajax调用的角度来看,两者都是成功的响应; 因此将在成功处理程序中处理.
处理这个问题的正确方法是什么?
我的应用程序的根视图控制器支持任何方向,但用户可以导航到另一个仅支持横向方向的视图控制器.
基本问题是,无论设备的实际物理方向如何,当用户弹回根视图控制器时,导航栏的高度都适合横向模式.我想弄清楚如何让导航栏出现高度为44(纵向高度)而不是32(横向高度).
虽然导航栏未设置为正确的高度,但根视图控制器的UITableView正确偏移(距离屏幕顶部44个像素).
在第二个视图控制器的-viewWillAppear内:我执行标准的旋转变换:
if (deviceOrientation == UIDeviceOrientationPortrait)
{
UIScreen *screen = [UIScreen mainScreen];
CGFloat screenWidth = screen.bounds.size.width;
CGFloat screenHeight = screen.bounds.size.height;
UIView *navView = [[self navigationController] view];
navView.bounds = CGRectMake(0, 0, screenHeight, screenWidth);
navView.transform = CGAffineTransformIdentity;
navView.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
navView.center = CGPointMake(screenWidth/2.0, screenHeight/2.0);
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
}
Run Code Online (Sandbox Code Playgroud)
因为这个辅助视图控制器允许导航到从属视图控制器(以及弹出回到根视图控制器),我已将以下内容添加到-viewWillDisappear:
if (deviceOrientation == UIDeviceOrientationPortrait)
{
UIScreen *screen = [UIScreen mainScreen];
CGFloat screenWidth = screen.bounds.size.width;
CGFloat screenHeight = screen.bounds.size.height;
UIView *navView = [[self navigationController] view];
navView.bounds = CGRectMake(0, 0, screenWidth, screenHeight);
navView.transform …Run Code Online (Sandbox Code Playgroud) 我有一个表书籍,我存储书籍数据(ISBN,标题,作者等).为了说明哪些书是彼此的版本,我有一个字段Edition_Group_ISBN,这是该组中的任意ISBN.
我无法获得此查询,该查询应该为Book数据和基于ISBN的其他版本的数量提供工作:
SELECT *, Editions_Count
FROM Books
LEFT JOIN ((SELECT Edition_Group_ISBN, COUNT(*) AS Editions_Count
FROM Books
WHERE Edition_Group_ISBN IN (SELECT Edition_Group_ISBN
FROM Books)
GROUP BY Edition_Group_ISBN) AS b
) ON (Books.Edition_Group_ISBN = b.Edition_Group_ISBN
AND Books.Edition_Group_ISBN != NULL)
WHERE ISBN = 9780140447897
Run Code Online (Sandbox Code Playgroud)
该查询给出了9780140447897的书籍数据,但它给出了Editions_Count AS NULL,表明LEFT JOIN不起作用.
我们的https://data.stackexchange.com遇到了一些间歇性的Windows Azure问题
基本上这就是发生的事情:
我该如何解决这个问题的根本原因?
的Cache-ControlHTTP/1.1头部可以指定最大年龄以及所述高速缓存的内容是否可以是公共或私有的,指示中间高速缓存是否能够高速缓存的内容.
例如,Ruby on Rails expires_in()默认使用Cache-Control: private
将其公开的风险是什么?如果它是公共的,哪些额外的地方可以缓存内容 - 例如它是代理服务器吗?
如果网站像Amazon.com,但用户是匿名的,那么可能没有太多的隐私问题怎么办?如果用户登录,可能会出现隐私问题,因为数据通过位置并且数据可见.如果那个位置想要"坏",那么Cache-Control: private无论如何它真的不需要关心.
如果它是一个用户可以登录的网站,但网站只搜索鱼油和维生素等健康产品,等等.在这种情况下,涉及的隐私更少,因为它与Amazon.com不同,在那里有更多种类的产品,例如用户可以真正关心隐私问题的书籍.
话虽如此,有什么额外的优势Cache-Control: public?
我想在我的Android应用程序中存储一些小而重要的信息,例如AES密钥.建议的方法是什么?我不想将密钥硬编码作为我的应用程序的一部分.
我看看KeyStore,但它并没有真正解决我的问题.它可以存储我的密钥,因为我可以提供密码.然后我需要找到一个安全的地方来存储这个密码,这与我原来的问题相同.
是否有内置的Android类来执行此任务?或者我应该寻找第三方图书馆?使用NDK对我来说也是可以接受的.
更新:
我希望找到一个用于存储的Android API,以确保只有存储某些信息的应用程序才能检索回来.Android OS可以基于签署应用程序的签名来强制执行此操作.这样,我的应用程序可以在第一次运行时生成随机密钥,并将其存储在安全存储中以供以后使用.这有什么API吗?
我有一个可以生成SecretKeys的应用程序,每个客户端一个。这些需要保留在我们的数据库中。我真的不熟悉常见的安全模式或实现,因此正在寻求建议。
KeyStore类似乎已被广泛使用,尤其是用于保护SecretKeys。但是,我几乎没有提及将KeyStore与数据库一起使用,并且我试图弄清这是因为它是基本用法(因此未提及),还是因为这是一种不良或多余的方法,我应该使用另一种技术。
基本设计是每个用户都有自己的密钥库,可以通过转换为字节(我想使用load()和store())将其保存到数据库中或从数据库中加载。
到目前为止,这种设计有什么问题吗?我也想知道应该如何处理KeyStore的密码。我们正在考虑仅对所有密钥库使用一个密码,但是如何在没有密钥库的情况下安全地存储此密码呢?
这是打算在后端应用程序中使用的,客户端将永远不会将密码传送给我们,服务器端也不会有人工操作员来提供密码。
android ×1
azure ×1
cryptography ×1
database ×1
encryption ×1
gnome ×1
gtk ×1
http-headers ×1
iphone ×1
java ×1
javascript ×1
join ×1
jquery ×1
keystore ×1
left-join ×1
linux ×1
monitoring ×1
mysql ×1
orientation ×1
rotation ×1
rsa ×1
security ×1
server-side ×1
transform ×1
x11 ×1