C# URL安全性-什么是安全的不可用URL?

C# URL安全性-什么是安全的不可用URL?,c#,security,url,picasa,C#,Security,Url,Picasa,我只是在想我当前网络项目的URL。用户可以访问不同的资源,例如使用网站访问图像。URL看起来像这样 现在,我真的需要高性能,一种方法是省去额外的数据库验证往返,而仅仅依靠URL是不可用的 谷歌这样做,你可以使专辑私人或未上市。这会保护相册,但不会保护照片本身。拍摄这张斯卡根(丹麦)的照片,它实际上在一本私人相册中,但你们都能看到 那么你对此有何看法?64个字符长的随机字符串是否足够“安全”?还有其他方法吗 假设我选择对资源的每个请求进行身份验证。用户已经登录到somedomain.com上的站

我只是在想我当前网络项目的URL。用户可以访问不同的资源,例如使用网站访问图像。URL看起来像这样

现在,我真的需要高性能,一种方法是省去额外的数据库验证往返,而仅仅依靠URL是不可用的

谷歌这样做,你可以使专辑私人或未上市。这会保护相册,但不会保护照片本身。拍摄这张斯卡根(丹麦)的照片,它实际上在一本私人相册中,但你们都能看到

那么你对此有何看法?64个字符长的随机字符串是否足够“安全”?还有其他方法吗


假设我选择对资源的每个请求进行身份验证。用户已经登录到somedomain.com上的站点,在那里他们可以访问自己的相册。删除cookie以维护其身份验证

现在,实际的照片通过某种形式的CDN或存储服务在一个完全不同的URL上提供


如何跨多个域维护身份验证?假设两个相册的内容可以从服务器传送到不同的服务器。

仅使用“不可用”URL肯定存在风险。这真的取决于你想要得到什么样的东西。以picasa为例,它们是被保护的照片,而不是银行记录,因此一个随机查询字符串就可以了。另外,你的网站越大,你打开的攻击面就越大。如果只有一个页面,这是一回事,可能需要相当多的扫描来尝试找出哪个URL正在使用。但是,如果你有成千上万这样的页面,那么攻击者就更有可能“猜测”正确的页面

所以,我没有一个真正的答案给你,只是一些关于“不可用”url方法的建议:不要这样做。它不安全


干杯,算算吧。从62个可能值(26+26+10:大写/小写/数字)的字母表中随机选择64个字符(不是rand()!)将产生5.16e+114个可能值(62^64)。每秒尝试一百万个组合,需要1.63e+101年(比一个傻瓜还要痛苦)才能猜出密码。可能已经够好了。短一点的可能也不错。

没有不可用的URL,即使您第一次通过非SSL连接使用它,任何人都可以通过ISP、代理、缓存等看到它。您真的希望您的用户/客户相信他们的私人照片是“不可用的”吗


使URL不可用不是一个很好的安全方法,除非您的唯一URL对其可用性有时间限制(例如,它们是短期URL)

64个字符*每个6位熵(Base-64编码,对吧?)是384位密钥。如果钥匙可以离线测试,按照今天的标准,这将被认为是相当薄弱的。只要密钥只能使用您的实时系统进行测试,它可能会非常有效,您还可以添加主动对策来阻止尝试许多坏密钥的客户端


通过服务器日志、浏览器日志、引用者标题、透明代理等,密钥公开的风险可能更高。

这是我的2美分。我也有类似的问题。我们最初的方法是使用随机但唯一的名称重命名文件,并使用该名称的复杂密钥进行双向加密。但事情最终归结为这样一个事实:一旦URL在某人手中,你就不能保证这些东西的隐私。我们最终采用了基于DB的身份验证路由。看

编辑#1:
关于CDN问题,我不确定解决方案是什么。但即使所说的是正确的。CDN的目的之一是减少主服务器的负载,为每个资源ping回服务器可能不是一个好主意

正如Stefan H在回答中指出的。。。各自为政。URL本身是不可用的。但它是一个URL,显示在浏览器的地址栏中,保存在其历史记录中,等等。因此,它实际上取决于您尝试执行的操作。384位在涉及密钥(本质上是)时并不“非常弱”。相反地。它比你所需要的更强壮。384位RSA密钥非常弱,但这不是384位的纯随机性。。。远非如此。其他一切你都是对的。@martona:是的,我想你是对的。即使是硬件加速器集群也可能无法每秒处理2^60个组合(如果有离线测试,也不应该有)。猜测并不是一种需要担心的攻击。下面的评论是通过Martona发表的:如果存储服务可以与执行身份验证的web服务器可以对话的同一个数据库服务器对话,那么就很简单了。一种方法是在auth之后在Web服务器上生成一次性令牌(比如64个字符:),并将其放入数据库。然后,通过重定向将用户发送到存储服务器,其中URL包含您的令牌。存储服务器在数据库中查找它,如果它签出,则会在浏览器上删除自己的会话cookie。存储服务器可以通过web服务器公开的web服务访问数据库。不需要直接连接。