Questions tagged «security»

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

4
在ASP.NET MVC中重写授权属性
我有一个MVC控制器基类,在该基类上应用了Authorize属性,因为我希望几乎所有的控制器(以及它们的动作)都得到授权。 但是我需要一个控制器和另一个控制器的操作未经授权。我希望能够使用[Authorize(false)]或来装饰它们,但这不可用。 有任何想法吗?

4
生成加密安全令牌
为了生成一个32个字符的令牌来访问我们的API,我们目前使用: $token = md5(uniqid(mt_rand(), true)); 我已经读到,这种方法不是基于密码的安全性,因为它基于系统时钟,这openssl_random_pseudo_bytes将是一个更好的解决方案,因为它很难预测。 如果是这种情况,等效代码将是什么样? 我猜是这样的,但我不知道这是否对... $token = md5(openssl_random_pseudo_bytes(32)); 我应该传递给函数的长度是多少?
83 php  security  openssl  token 


7
如何实施密码重置?
我正在开发ASP.NET中的应用程序,并且特别想知道Password Reset如果我想自己动手实现该功能。 具体来说,我有以下问题: 生成难以破解的唯一ID的好方法是什么? 应该附有计时器吗?如果是这样,应该持续多久? 我应该记录IP地址吗?有关系吗 在“密码重置”屏幕下,我需要什么信息?只是电子邮件地址?还是电子邮件地址以及他们“知道”的一些信息?(最喜欢的团队,小狗的名字等) 我还有其他需要注意的事项吗? 注意:其他问题完全掩盖了技术实施。实际上,公认的答案掩盖了血腥的细节。我希望这个问题和随后的答案会深入到细节中,我希望通过更狭义地表述这个问题,使答案不再那么“蓬松”,而更多的是“刺痛”。 编辑:答案也将进入如何在SQL Server或任何答案的ASP.NET MVC链接中建模和处理这种表的方式。

4
在生产环境中部署调试符号(pdb文件)有什么风险?
我有一个记录异常跟踪记录的应用程序,我希望这些堆栈跟踪在生产环境中部署时包括文件名和行号。我想出了如何通过程序集部署调试符号,但是在研究这个问题的过程中,我遇到了这个问题,这意味着在生产环境中包括pdb文件不是一个好主意。对已接受答案的评论说:“ ...调试信息可以泄露敏感数据并成为攻击媒介。这取决于您的应用程序是什么。” 那么什么样的敏感数据可能会被暴露呢?调试符号如何用于危害应用程序?我对技术细节感到很好奇,但是我真正想要的是一种评估任何给定应用程序和生产环境中包括调试符号的风险的实用方法。或换一种说法:可能发生的最坏情况是什么? 编辑:后续问题/澄清 因此,根据到目前为止的每个人的答案,.NET应用程序似乎可以简化此问题。约翰·罗宾斯(John Robbins)博客中的这一点链接到迈克尔·马多克斯(Michael Maddox)的答案中,使我大跌眼镜: .NET PDB仅包含两条信息,即源文件名及其行以及本地变量名。所有其他信息已经在.NET元数据中,因此无需在PDB文件中重复相同的信息。 对我来说,这重申了其他人对Reflector的看法,这意味着真正的问题是对程序集的访问。一旦确定了这一点,关于PDB的唯一决定就是您是否关心公开文件名,行号和本地变量名(假设您最初并未向最终用户显示堆栈跟踪)。还是我简化得太多了?

4
Node.js应用程序的授权方法和设计模式
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我正在为内部企业软件平台构建多页管理界面。考虑将各种API,数据库查询和Shell脚本捆绑在一起的大量粘合逻辑。 我们将使用node.js,express框架(包括jade模板)和LDAP进行身份验证。 我正在努力寻找有关节点应用程序中授权的设计模式和最佳实践的信息。最好是,我希望使用基于角色的模型,因为我的用户熟悉该方法及其护理和提供方法。 我是node.js的新手,所以请不要以为我已经看过模块或热门博客文章。可能有很多信息,我根本不知道在哪里看。 预先感谢您能够提供的任何信息!

2
如何成为SAML服务提供商
我公司目前正在开发Java Web应用程序。我们的几个客户拥有内部SAML服务器(身份提供程序?),并要求我们与它们集成。所以最近我一直在阅读它,并使用OpenAM。经过大约三天的时间,我对它有了一个大致的了解,但是我的知识仍然存在一些不足。我希望有人可以帮我解决这个问题。 因此,这就是我如何想象用户登录的工作流程。 让我们将客户SAML服务器定义为https://their.samlserver.com。因此,用户访问我们的Web应用程序以获取受保护的资源。假设URL是http://my.app.com/something。 因此,如果我是对的,那么SAML将my.app.com定义为Service Provider。我们的应用程序意识到该用户需要登录。然后,我们向用户显示一个类似的页面... <script>JQuery Script to auto submit this form on ready</script> <form method="post" action="https://their.samlserver.com/Post/Servlet"> <input type="hidden" name="SAMLRequest" value="someBase64Data" /> <input type="submit" value="Submit" /> </form> 那someBase64Data应该是base64这个的编码版本... <samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="identifier_1" Version="2.0" IssueInstant="2004-12-05T09:21:59Z" AssertionConsumerServiceIndex="0"> <saml:Issuer>http://my.app.com</saml:Issuer> <samlp:NameIDPolicy AllowCreate="true" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/> </samlp:AuthnRequest> 所以我的前几个问题。 什么是ID假设是价值? 为什么我要宣布自己为发行人? 身份提供者知道我吗?也许这就是我在OpenAM上看到的信任圈。如果它确实了解我,它怎么知道我以及它需要知道什么? 因此,在将用户转发到该页面之后,会将他们转到IDP https://their.samlserver.com提供的页面。他们在该页面上进行身份验证,而IDP确实可以验证身份并查找用户。身份验证成功后,IDP将发回这里的<samlp:Response>定义。 还有几个问题。 首先,如何<samlp:Response>返回到我的Web应用程序以便我可以检查它? 我应该在该响应中寻找什么以验证它是否成功?失败是什么样的? …

5
JSON Web服务是否容易受到CSRF攻击?
我正在构建一个仅将JSON用于其请求和响应内容的Web服务(即,没有表单编码的有效负载)。 如果满足以下条件,Web服务是否容易受到CSRF攻击? POST没有顶级JSON对象(例如)的任何请求{"foo":"bar"}都将被400拒绝。例如,POST带有内容的请求42将因此被拒绝。 POST内容类型以外的任何请求application/json都将被400拒绝。例如,POST内容类型的请求application/x-www-form-urlencoded将因此被拒绝。 所有GET请求都是Safe,因此不会修改任何服务器端数据。 客户端通过会话cookie进行身份验证,在客户端通过POST使用JSON数据(例如)提供正确的用户名/密码对后,Web服务会为客户端提供会话cookie {"username":"user@example.com", "password":"my password"}。 补充问题:是PUT和DELETE要求日益容易受到CSRF?我问是因为大多数(全部?)浏览器似乎都不允许以HTML形式使用这些方法。 编辑:添加了项目#4。 编辑:到目前为止,很多好评论和答案,但是没有人提供此Web服务容易受到的特定CSRF攻击。
80 http  security  csrf 

9
在客户端清理/重写HTML
我需要显示通过跨域请求加载的外部资源,并确保仅显示“安全”内容。 可以使用Prototype的String#stripScripts删除脚本块。但是诸如onclick或的处理程序onerror仍然存在。 是否有任何图书馆至少可以 删除脚本块, 杀死DOM处理程序, 删除列入黑名单的标签(例如:embed或object)。 那么,那里有JavaScript相关的链接和示例吗?

7
为什么strlcpy和strlcat不安全?
据我所知,strlcpy和strlcat被设计为安全的替代品strncpy和strncat。但是,有些人仍然认为他们没有安全感,只会引起另一种类型的问题。 有人可以举一个使用strlcpy或strlcat(即始终为null的函数终止其字符串)如何导致安全问题的示例吗? 乌尔里希·德雷珀(Ulrich Drepper)和詹姆斯·安提尔(James Antill)指出,这是事实,但从未提供示例或阐明这一点。
80 c  security  strncpy  strlcpy 

4
Node.js + Express.js用户权限安全模型
我们有一个具有两种类型的用户的应用程序。根据用户的登录方式,我们希望他们可以访问应用程序的不同部分。 我们如何实现一种安全模型以防止用户看到他们无法访问的内容? 我们是否将安全性纳入每条路线的实施中?问题在于我们在请求之间会有一些重复的逻辑。我们可以将其移到辅助函数中,但是仍然需要记住调用它。 我们是否将安全性作为全局app.all()路由处理程序的一部分?问题是我们必须检查每条路线,并根据众多规则执行不同的逻辑。至少所有代码都放在一个地方,但是……所有代码都放在一个地方。

6
如何在RESTful应用程序中防止CSRF?
通常使用以下方法之一来防止跨站请求伪造(CSRF): 检查引荐来源-RESTful但不可靠 将令牌插入表单并将令牌存储在服务器会话中-并非真正的RESTful 神秘的一次URI-出于与令牌相同的原因而不是RESTful 手动发送此请求的密码(不是HTTP身份验证使用的缓存密码)-RESTful但不方便 我的想法是使用用户机密,一个隐秘但静态的表单ID和JavaScript来生成令牌。 <form method="POST" action="/someresource" id="7099879082361234103"> <input type="hidden" name="token" value="generateToken(...)"> ... </form> GET /usersecret/john_doe 由JavaScript从已验证的用户获取。 回应:OK 89070135420357234586534346这个秘密从概念上讲是静态的,但是每天/每小时都可以更改……以提高安全性。这是唯一的机密内容。 使用JavaScript读取神秘的(但对所有用户而言都是静态的!)表单ID,并与用户密码一起处理: generateToken(7099879082361234103, 89070135420357234586534346) 将表单以及生成的令牌发送到服务器。 由于服务器知道用户密码和表单ID,因此可以与客户端在发送并比较两个结果之前运行相同的generateToken函数。仅当两个值相等时,该操作才被授权。 尽管事实上如果没有JavaScript也无法使用,这种方法有什么问题吗? 附录: 无状态CSRF保护

5
处理源代码中用于身份验证的密码
假设我试图从使用基本身份验证/基本证书的RESTful API中提取信息,那么在程序中存储该用户名和密码的最佳方法是什么?现在,它只是以纯文本格式坐在那里。 UsernamePasswordCredentials creds = new UsernamePasswordCredentials("myName@myserver","myPassword1234"); 有某种更安全的方法吗? 谢谢

1
SSL证书服务器名称如何解析/是否可以使用keytool添加备用名称?
为了清楚起见,可以将这些问题表述为单独的问题,但是它们都与同一问题相关。 SSL证书服务器名称如何解析? 为什么浏览器似乎使用证书的CN字段,但是Java的机制似乎仅查看“主题备用名称”? 是否可以使用keytool将替代名称添加到SSL证书?如果不是,使用openSSL代替是一个不错的选择吗? 只是一点点背景:我需要获得一个主服务器,以便使用HTTPS与多个服务器进行通信。显然,我们不想为每台服务器购买SSL证书(可能有很多),所以我想使用自签名证书(我一直在使用keytool生成它们)。在操作系统中将证书添加为受信任的证书后,浏览器(IE和Chrome)欣然接受该连接为受信任的证书。但是,即使将证书添加到Java的cacerts中,Java仍然不会将连接接受为受信任的,并引发以下异常: 由以下原因引起:java.security.cert.CertificateException:sun.security.util.HostnameChecker.match(HostnameChecker.java:75)上的sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142)上没有使用者替代名称。在com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:250)处com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(X509T rustManagerImpl.java:264) sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Clien tHandshaker.java:1185)...还有14个 我发现我可以使Java信任实现我自己的HostNameVerifier的证书,该证书是我从此处复制的:com.sun.jbi.internal.security.https.DefaultHostnameVerifier只是为了进行测试(顺便说一下,主机名作为参数传递给了HostnameVerifier是正确的,因此我认为它应该已经被接受)。 我一直使用证书字段CN作为主机名(通常是IP地址)。 有人可以告诉我我做错了什么,并指出正确的方向吗?
78 java  security  ssl 

3
JSON安全最佳做法?
在研究JSON与XML的问题时,我遇到了这个问题。现在,首选JSON的原因之一是Javascript易于转换,即使用eval()。从安全角度来看,这立即使我感到潜在的问题。 因此,我开始对JSON的安全性方面进行研究,并在此博客文章中就JSON的安全性不如人们认为的那样进行了研究。这部分突出: 更新:如果您正确地执行JSON 100%,那么您只会在顶层拥有对象。数组,字符串,数字等都将被包装。然后,JSON对象将无法执行eval(),因为JavaScript解释器会认为它正在查看的是块而不是对象。这对于防止这些攻击有很长的路要走,但是仍然最好使用不可预测的URL保护您的安全数据。 好的,这是一个好的开始规则:顶级的JSON对象应该始终是对象,而不是数组,数字或字符串。听起来对我来说是个好规则。 关于JSON和AJAX相关的安全性,还有其他事情要做或避免吗? 以上引用的最后一部分提到了不可预测的URL。是否有人对此有更多信息,特别是您如何使用PHP?与Java相比,我在Java方面的经验要丰富得多,并且在Java中这很容易(因为您可以将整个URL映射到单个servlet),而我所做的所有PHP都将单个URL映射到了PHP脚本。 另外,您究竟如何使用不可预测的URL来提高安全性?

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.