Questions tagged «security»

与应用程序安全性和对软件的攻击有关的主题。请不要单独使用此标签,否则会造成歧义。如果您的问题与特定的编程问题无关,请考虑改为在Information Security SE上提问:https://security.stackexchange.com

6
流浪者默认情况下不安全?
编辑2:TL; DR:答案是在2013年是,但此缺陷已得到修复 按照vagrantup.com上的《入门指南》,我似乎最终得到了一个虚拟机,该虚拟机在端口2222上接受SSH连接,以便任何人都可以使用默认凭据(用户名)对我的VM进行root访问,并读取我的主机工作目录。 = password = vagrant或vagrant_insecure_private_key)。 这是真的?如果是,为什么不将其视为巨大的安全漏洞?如果我已将敏感数据复制到虚拟机怎么办? 编辑:对于那些认为互联网上的任何人都可以读取您的源代码并在您的VM上执行任意代码的人来说,还不错,我建议阅读此博客文章http://blog.ontoilologic中的“突破”部分。 com / blog / 2012/10/31 / in-of-and-of-vagrant / 简而言之:“按预期”运行Vagrant也可以使任何人闯入您的主机/开发计算机(例如,通过使用恶意的git post-commit钩子)。
71 security  vagrant 

6
如何通过SQL Server中的SQL注入来克服单引号引起的卫生问题?
首先,我很清楚参数化查询是最好的选择,但是我在问什么使下面介绍的策略易受攻击。人们坚持认为以下解决方案无效,因此我在寻找一个示例说明为何不可行。 如果动态SQL在发送到SQL Server之前使用以下转义代码内置在代码中,则哪种注入方式可以克服这种情况? string userInput= "N'" + userInput.Replace("'", "''") + "'" 这里回答了类似的问题,但我认为任何答案都不适用于这里。 在SQL Server中,不能用“ \”转义单引号。 我相信使用Unicode的SQL走私(在此处概述)会因生成的字符串被单引号前面的N标记为Unicode而受到阻碍。据我所知,SQL Server不会自动将其他字符集转换为单引号。没有单引号的转义,我认为注入是不可能的。 我也不认为String Truncation是可行的方法。根据Microsoft的说法, SQL Server肯定不会进行截断,因为一个的最大大小为nvarchar2GB 。2 GB的字符串在大多数情况下是不可行的,在我的情况下是不可能的。 二阶注入是可能的,但在下列情况下是可能的: 使用上述方法对进入数据库的所有数据进行清理 数据库中的值永远不会附加到动态SQL中(为什么只要可以在任何动态SQL字符串的静态部分中引用表值,您仍然会这样做吗?)。 我并不是说这比使用参数化查询更好或替代,但是我想知道我概述的内容是多么容易受到攻击。有任何想法吗?

7
Windows相当于OS X钥匙串?
Windows中是否有等效的OS X钥匙串用于存储用户密码?我将使用它来保存我的(桌面)软件使用的Web服务的用户密码。 从这个相关问题的答案(在桌面应用程序中保护用户密码(Rev 2))和众多可用的第三方密码存储工具中,我认为这种情况不存在-我是否坚持要求每次访问Web服务或只是对其进行混淆存储时都输入密码?

4
CORS和CSP有什么区别?
在我看来,称为跨域资源共享(CORS)和内容安全策略(CSP)的技术在目的和实施方面似乎非常相似。 两者似乎都允许您通过HTTP响应标头将网页的原始版本所合并的资源的来源列入白名单。我可以看到的唯一区别是,CSP在HTTP响应中可以批准的内容上似乎更细粒度。

3
这个Rails JSON身份验证API(使用Devise)是否安全?
我的Rails应用程序使用Devise进行身份验证。它有一个姐妹iOS应用程序,用户可以使用与该Web应用程序相同的凭据登录到iOS应用程序。所以我需要某种API进行身份验证。 这里有许多类似的问题指向本教程,但它似乎token_authenticatable已过时,因为此模块已从Devise中删除,并且某些行会引发错误。(我使用的是Devise 3.2.2。)我曾尝试根据该教程(和本教程)来推出自己的教程,但我对此并不百分百自信-我觉得可能有些东西被误解或错过。 首先,按照这个要点的建议,我authentication_token在users表中添加了text属性,以下内容添加到user.rb: before_save :ensure_authentication_token def ensure_authentication_token if authentication_token.blank? self.authentication_token = generate_authentication_token end end private def generate_authentication_token loop do token = Devise.friendly_token break token unless User.find_by(authentication_token: token) end end 然后,我有以下控制器: api_controller.rb class ApiController < ApplicationController respond_to :json skip_before_filter :authenticate_user! protected def user_params params[:user].permit(:email, :password, :password_confirmation) end end (请注意,我application_controller有一行before_filter :authenticate_user!。) …


6
在.NET C#中存储加密密钥的最佳方法
在我们的应用程序中,我们有很多敏感的配置设置,我们将它们存储在再次加密的xml文件中。 必须在运行时解密此安全文件,并读取配置值。但是会出现一个问题,即密钥和初始化向量在代码中进行了硬编码,因此任何人都可以使用Reflector读取它。 在.NET中存储加密密钥的最佳方法是什么,这样没人可以使用Reflector读取它们?
70 c#  .net  security  encryption 

9
防止会话劫持
如何防止多个客户端使用相同的会话ID?我之所以这样询问,是因为我想增加一层安全保护,以防止网站上的会话劫持。如果黑客以某种方式找出另一个用户的会话ID并使用该SID发出请求,那么我如何检测到服务器上有不同的客户端共享一个SID,然后拒绝劫持尝试? 编辑 经过深思熟虑后,我接受了Gumbo的回答,因为我意识到由于无状态HTTP协议的限制,我所要求的是不可能的。我忘了HTTP的最基本原理是什么,现在我想到这个问题似乎有点琐碎。 让我详细说明一下: 用户A登录example.com后,为他提供了一些随机会话ID,为简单起见,将其设为“ abc123”。该会话ID在客户端存储为cookie,并通过服务器端会话进行验证,以确保登录的用户在从一个网页转到另一个网页时仍保持登录状态。如果HTTP不是无状态的,则该cookie当然不需要存在。因此,如果用户B窃取用户A的SID,并在其计算机上创建一个值为'abc123'的cookie,则他本可以成功劫持用户A的会话,但是服务器根本无法合法地识别出用户B的会话。该请求与用户A的请求有任何不同,因此服务器没有理由拒绝任何请求。即使我们要列出服务器上已经处于活动状态的会话,并尝试查看某人是否正在访问已处于活动状态的会话,我们如何才能确定是另一个用户在非法访问该会话而不是同一用户谁已经使用会话ID登录,但只是尝试使用它发出另一个请求(即导航到另一个网页)。我们不能。检查用户代理?可以被欺骗-但是作为深度防御措施还是不错的。IP地址?可以出于正当理由进行更改-但我建议不要检查IP地址的前两个八位位组,而不是根本不检查IP地址,因为即使是出于完全正当理由而不断更改IP的数据计划网络用户通常只具有其IP更改的最后两个八位位组。 最后,无状态HTTP谴责我们永远无法完全保护我们的网站免受会话劫持,但是良好的做法(如Gumbo提供的做法)将足以防止大多数会话攻击。因此,尝试通过拒绝同一SID的多个请求来保护会话免遭劫持,这简直是荒谬的,并且会破坏会话的整个目的。
70 php  security  session 



12
可利用的C#函数
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 这个问题类似于可利用的PHP函数。 受污染的数据来自用户,或更具体地说是攻击者。当受污染的变量到达接收器函数时,您将遇到漏洞。例如,执行sql查询的函数是一个接收器,而GET / POST变量是污点的来源。 C#中所有接收器功能是什么?我正在寻找引入漏洞或软件漏洞的功能。我对远程执行代码漏洞特别感兴趣。是否有整个类/库在功能上包含黑客想要影响的讨厌的东西?人们如何意外制作危险的C#代码?
69 c#  security 

4
IE 11第一方会话Cookie在iframe中丢失
我们有一个网站(www.example.com),该网站将用户带到一系列第三方页面以验证付款详细信息,这在iframe中进行。最初,来自www.example.com的本地页面被加载到iframe中,并且用户被重定向到第三方URL。用户完成第三方步骤后,会将它们重定向302到iframe中我们网站(www.example.com)上的页面。 此功能适用于我们测试过的所有浏览器,但IE 11似乎已丢失,但IE 11除外。我们已经在Windows 7和8.1的台式机和“ Metro”模式下检查了此问题,并且所有版本均存在此问题。 当用户浏览我们的网站时,我们会设置一个会话cookie,该会话cookie会正确发送到最初加载到iframe中的第一方页面。但是,一旦用户浏览了该iframe中的某些第三方页面,会话cookie就不会与下一个请求一起发送。 如果我们将IE 11的隐私设置设为最低值,则此问题将消失,并且一切正常。 到目前为止,我发现的所有潜在解决方案都与P3P标头相关。我们已经建立了有效且正确的P3P标头和XML策略文件,并且此问题仅在IE 11中出现。 更新:我们还有其他一些使用JS设置的cookie。这些都按预期持续存在。不同之处在于有效期(对于JS cookie来说是1年,对于会话cookie来说是1个月),域(对于JS cookie来说是“ example.com”,对于会话cookie来说是空)以及它们是否是“仅HTTP”(对于JS是false) cookie,适用于会话cookie)。 我已经尝试根据会话cookie的JS cookie设置所有这些选项,但是没有区别。 更新2:经过更多测试后,我无法创建一个重现此问题的测试用例。我尝试在实时代码中测试的任何其他cookie都似乎已损坏,即使它们设置的代码与可以正常工作的JS cookie完全相同。简而言之; 我还没有找到有效和无效的Cookie模式。 需要注意的一件事可能是,cookie并没有被删除,只是没有被发送到最终请求。如果加载了另一个页面,则cookie会神奇地重新出现并发送;这使我相信这是围绕iframe和P3P的错误。 更新3(第3天): IE 11对cookie的处理继续让我感到困惑。我越深入迷宫,迷失在不断变化的墙壁中的人就越多。而且这里有鬼。半梦半醒的安全政策的片段编织成某种空灵的生物,每走一步都会跟踪并嘲弄我。刚开始时,我以一种难以捉摸的形式被冻僵,恐惧,震惊,只是在视线之外飞了起来,但是每过一个小时,我就从其邻近性的知识中获得更多的安慰。这可能是我被派到这里面对的那只野兽吗?在这样的时候我怎么能杀死我唯一的同伴?


3
如何在服务器端使用Facebook用户访问令牌?
前言 我正在开发几个Web服务和少数客户端(Web应用程序,移动设备等),它们将通过HTTP与上述服务进行交互。我当前的工作项目是为产品设计身份验证和授权解决方案。我已决定利用外部身份提供者(例如Facebook,Google,Microsoft,Twitter等)进行身份验证。 我正在尝试解决以下问题:“当有请求发送到服务器时,我怎么知道用户是谁,如何确定?”。下面还有更多问题... 要求 依靠外部身份来表明我正在与谁打交道('userId'本质上就是我关心的全部)。 系统应使用基于令牌的身份验证(例如,相对于cookie或基本身份验证)。 我相信这是跨多个客户端和服务器扩展同时提供松散耦合的正确选择。 工作流程 根据我对基于令牌的身份验证的阅读和理解,以下是我对工作流程的想象。现在让我们通过网络浏览器关注Facebook。我的假设是,其他外部身份提供商应具有类似的功能,尽管我尚未确认。 请注意,在撰写本文时,我基于以下Facebook登录版本2.2 客户端:使用JavaScript SDK启动登录Facebook Facebook:用户验证并批准应用权限(例如,访问用户的公开资料) Facebook:将响应发送到客户端,其中包含用户的访问令牌,ID和已签名的请求 客户端:将用户访问令牌存储在浏览器会话中(由SDK方便地处理) 客户端:通过在授权标头+用户ID(可能在自定义标头中)中发送用户的访问令牌,向我的Web服务请求安全资源 服务器:从请求标头读取用户访问令牌,并通过向Facebook提供的debug_token图API发送请求来启动验证 Facebook:使用用户访问令牌信息来响应服务器(包含appId和userId) 服务器:通过将appId与期望值(自身已知)进行比较,并将userId与客户端请求中发送的内容进行比较,从而完成令牌的验证 服务器:使用请求的资源响应客户端(假设授权路径愉快) 我在想象对服务器的后续请求将重复执行步骤5-9(而用户的访问令牌有效–未过期,从FB端撤消,更改应用权限等) 这是一个有助于执行步骤的图表。请了解该系统不是单页应用程序(SPA)。提到的Web服务是从本质上将JSON数据返回给客户端的API端点。它们不提供HTML / JS / CSS(Web客户端服务器除外)。 问题 首先,基于我的序言和要求,上述方法是否存在明显的缺口/凹坑? 是否需要/建议向Facebook执行出站请求以验证每个客户请求的访问令牌(上述步骤6-8)? 我至少知道,我必须验证来自客户端请求的访问令牌。但是,对于第一次验证之后的后续验证,推荐的方法对我来说还是未知的。如果有典型的模式,我很想听听它们。我了解,根据我的要求,它们可能取决于应用程序;但是,我只是不知道要寻找什么。一旦有了基本思路,我将进行尽职调查。 例如,可能的想法: 第一次验证完成后,将访问令牌+用户ID对散列,并将其存储在分布式缓存(可由所有Web服务器访问)中,并且到期时间等于访问令牌。根据来自客户端的后续请求,对访问令牌+ userId对进行哈希处理,并检查其在缓存中的存在。如果存在,则请求被授权。否则,请联系Facebook图形API确认访问令牌。我假设如果使用HTTPS(将会),则该策略可能可行。但是,性能如何比较? 在这个StackOverflow问题中可接受的答案建议在对Facebook用户令牌的第一次验证完成后创建一个自定义访问令牌。然后,将自定义令牌发送到客户端以进行后续请求。我想知道这是否比上述解决方案更复杂。这将需要实现我自己的身份提供者(我想避免的事情,因为我想首先使用外部身份提供者……)。这个建议有什么好处吗? 上面的步骤3中的响应上是否存在signedRequest字段(在此处提到),是否等同于“游戏画布登录”流程中此处的signed请求参数? 似乎暗示它们是等效的,因为在文档中前者链接到后者。但是,令我感到惊讶的是,网络文档的“手动构建登录流程”页面中没有提到游戏页面上提到的验证策略。 如果对#3的回答为“是”,是否可以使用相同的身份确认策略对签名进行解码并与预期在服务器端使用的身份进行比较? 我想知道是否可以利用此方法来代替对debug_token图API的出站调用(上述步骤#6),以按照此处的建议确认访问令牌: 当然,为了在服务器端进行比较,需要将签名的请求部分与请求一起发送到服务器(上述步骤#5)。除了在不牺牲安全性的情况下的可行性之外,我想知道与拨打外拨电话相比,性能如何。 当我在使用它时,在什么情况下/出于什么目的,例如,您会将用户的访问令牌持久化到数据库吗?我看不到需要这样做的情况,但是,我可能会忽略某些事情。我很好奇某些常见情况可能会引发一些想法。 谢谢!

18
检测浏览器是否正在使用专用浏览模式
我正在为公司对安全性的偏执建立一个Extranet。他们希望确保(除其他事项外)用户在其Web浏览器中打开了“私人浏览”模式的情况下浏览该网站,以便不保留任何cookie或历史记录。 我只找到了这个 http://jeremiahgrossman.blogspot.com/2009/03/detecting-private-browsing-mode.html 和 /server/18966/force-safari-to-operate-in-私人模式并从网络服务器检测到该状态 理想的解决方案是不使用JavaScript或使用最少的javascript。尝试为所有浏览器和平台设置唯一的cookie是否可行?有人做过吗? 谢谢! 更新 http://crypto.stanford.edu/~collinj/research/incognito/使用其他张贴者提到的浏览器指纹识别器的CSS访问技术-感谢您的提示。 我喜欢它,因为它很小巧且优雅,但是仍然希望能够在不使用JavaScript的情况下做到这一点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.