Tag: 安全

为忘记密码生成随机令牌的最佳实践

我想为忘记密码生成标识符。 我读过,我可以通过使用mt_rand()的时间戳来做到这一点,但有些人说,时间戳可能不是唯一的每一次。 所以我有点困惑。 我可以用这个时间戳吗? 题 生成自定义长度的随机/唯一标记的最佳做法是什么? 我知道这里有很多问题,但是在阅读了不同的人的不同意见后,我越来越困惑。

保护网站pipe理部分的最佳做法是什么?

我想知道人们认为保护网站pipe理部分的最佳做法,特别是从authentication/访问的angular度来看。 当然有很明显的事情,例如使用SSL和logging所有访问,但是我想知道以上这些基本步骤的人们认为设置栏。 例如: 你只是依靠你用于普通用户的authentication机制吗? 如果不是,什么? 你是否在同一个“应用程序域”中运行pipe理部分? 您采取了哪些步骤来使pipe理部分未被发现? (或者你拒绝整个“默默无闻”的东西) 到目前为止,来自回答者的build议包括: 在每个pipe理员密码检查中引入仿真的服务器端暂停,以防止暴力攻击[开发人员艺术] 使用单独的login页面为用户和pipe理员使用相同的数据库表(阻止XSRF和会话窃取授予访问pipe理区) [大师] 考虑也添加web服务器本地身份validation到pipe理区(例如通过.htaccess) [大师] 考虑一些失败的pipe理员login尝试后阻止用户的IP [大师] 失败的pipe理员login尝试后添加validation码[贼大师] 为用户和pipe理员提供同样强大的机制(使用上述技术)(例如,不要专门对待pipe理员) [Lo'oris] 考虑二级authentication(例如客户端证书,智能卡,纸牌空间等) [JoeGeeky] 只允许从受信任的IP /域访问,如果可能的话,将检查添加到基本的HTTPpipe道(通过例如HttpModules)。 [JoeGeeky] [ASP.NET]lockingIPrincipal&Principal(使它们不可变且不可枚举) [JoeGeeky] 联合权限提升 – 例如在任何pipe理员权限升级时向其他pipe理员发送电子邮件。 [JoeGeeky] 考虑pipe理员的细粒度权限 – 例如,而不是基于angular色的权限,为每个pipe理员的个别行为定义权限[JoeGeeky] 限制创buildpipe理员 – 例如pipe理员不能更改或创build其他pipe理员帐户。 使用locking的“superadmin”客户端。 [JoeGeeky] 考虑客户端SSL证书或RSAtypes密钥(电子令牌) [Daniel Papasian] 如果使用Cookie进行身份validation,则对pipe理员和常规页面使用单独的Cookie,例如,将pipe理员部分放在不同的域上。 [Daniel Papasian] 如果可行,请考虑将pipe理站点保留在私有子网上,不要使用公共互联网。 [John Hartsock] 当在网站的pipe理员/正常使用情况之间移动时重新发放authentication/会话票证[Richard JP Le Guen]

保护REST API而不重新发明轮子

在deviseREST API时,通常先validation用户身份? 我正在寻找的典型用例是: 用户想要获取数据。 当然很酷,我们喜欢分享! 获取一个公共API密钥并阅读! 用户想要存储/更新数据…哇等等! 你是谁,你能做到吗? 我想build立一次,并允许说一个networking应用程序,一个Android应用程序或iPhone应用程序来使用它。 REST API似乎是这样的需求的合理select 为了说明我的问题,我将使用一个简单的例子。 我有一个数据库中的项目,它有一个评级属性(整数1到5)。 如果我正确理解REST,我将使用我select的语言来实现GET请求,该语言返回如下所示的csv,xml或json: http://example.com/product/getrating/{id}/ 说我们select我们返回的JSON: { "id": "1", "name": "widget1", "attributes": { "rating": {"type":"int", "value":4} } } 这对于面向公众的API来说很好。 我得到那部分。 我有很多问题是如何将这与安全模型相结合? 我习惯了networking应用程序的安全性,我有一个会话状态在任何时候都可以识别我的用户,所以我可以控制他们可以做什么,不pipe他们决定发送给我什么。 据我所知,这不是RESTful,所以在这种情况下将是一个不好的解决scheme。 我会尝试使用相同的项目/评级的另一个例子。 如果用户“JOE”想要添加评级到一个项目 这可以使用: http://example.com/product/addrating/{id}/{givenRating}/ 在这一点上,我想存储的数据说,“JOE”给了产品{id}评级{givenRating}。 问:我怎么知道请求来自“JOE”而不是“BOB”。 此外,如果是用户的电话号码更合理的数据呢? 我到目前为止是: 1)使用HTTP的内置function在每个请求进行身份validation,无论是纯HTTP还是HTTPS。 这意味着每个请求现在都采取以下forms: https://joe:joepassword@example.com/product/addrating/{id}/{givenRating}/ 2)像私人和公共密钥一样使用Amazon S3的方法: http : //www.thebuzzmedia.com/designing-a-secure-rest-api-without-oauth-authentication/ 3)无论如何都要使用cookie,并打破REST的无状态部分。 第二种方法对我来说似乎比较好,但是我还想知道我是否真的必须重新发明这整个事情呢? 散列,存储,生成密钥等都由我自己? 这听起来很像在典型的Web应用程序中使用会话,并自己重写整个堆栈,通常我的意思是“你做错了”,特别是在处理安全性时。 编辑:我想我应该提到OAuth以及。

隐藏C ++敏感string的技巧

我需要在我的C ++应用程序中存储敏感信息(我想保密的对称encryption密钥)。 简单的方法是做到这一点: std::string myKey = "mysupersupersecretpasswordthatyouwillneverguess"; 但是,通过strings进程(或从二进制应用程序提取string的任何其他应用程序)运行应用程序将显示上述string。 应该使用什么技术来掩盖这种敏感数据? 编辑: 好吧,几乎所有人都说“你的可执行文件可以被反向devise” – 当然! 这是我的宠物,所以我要在这里咆哮一下: 为什么99%(好吧,也许我夸大了一点)这个网站上的所有与安全相关的问题都是用“没有办法创build一个完全安全的程序”的洪stream来回答的 – 这不是一个有用的回答! 安全性是一种完美的可用性和无安全性之间的滑动规模,完美的安全性,但另一方面没有可用性。 重点在于你根据自己想要做的事情以及软件运行的环境来select你的职位。 我不是在写军事装置的应用程序,而是在为家用电脑编写应用程序 。 我需要使用预先已知的encryption密钥对不可信networking上的数据进行encryption。 在这些情况下,“通过默默无闻的安全”可能已经足够了! 当然,有足够的时间,精力和技能的人可以对二进制文件进行逆向工程并find密码,但猜猜看是什么? 我不在乎: 实施一stream的安全系统需要花费的时间比由于破解版本造成的销售损失要贵(不是说我实际上是在出售这个,但是你明白了我的观点)。 这个蓝天“让绝对的最好的方式可能”在新程序员的编程趋势是愚蠢的,至less可以说。 感谢您花时间回答这个问题 – 他们是最有帮助的。 不幸的是,我只能接受一个答案,但我已经投了所有有用的答案。

如何使用blowfish散列长密码(> 72个字符)

上周我读了很多关于密码哈希的文章,Blowfish似乎是现在最好的哈希algorithm之一 – 但这不是这个问题的主题! 72个字符的限制 河豚只考虑input密码中的前72个字符: <?php $password = "Wow. This is a super secret and super, super long password. Let's add some special ch4r4ct3rs a#d everything is fine :)"; $hash = password_hash($password, PASSWORD_BCRYPT); var_dump($password); $input = substr($password, 0, 72); var_dump($input); var_dump(password_verify($input, $hash)); ?> 输出是: string(119) "Wow. This is a super secret and super, super long […]

JAAS为人类

我很难理解JAAS。 这似乎比它应该更复杂(尤其是太阳教程)。 我需要一个简单的教程或例子来说明如何在基于Struts + Spring + Hibernate的java应用程序中使用自定义用户资源库来实现安全性(authentication+授权)。 可以用ACEGI来实现。

没有HTTPS的login,如何保护?

对于Web应用程序,当HTTPS不可用作安全措施时,是否仍然可以使login有点安全? 例如: Tokenizelogin,使重复攻击困难? 以某种方式encryption从HTML密码字段发送的密码? 特别是我使用CakePHP和AJAX POST调用触发身份validation(包括提供的用户名和密码)。 问题更新: HTTPS不可用。 期。 如果你不喜欢这种情况,那么把它看作一个理论问题。 没有明确的要求,你有任何HTTP,PHP和浏览器(cookies,JavaScript等)在现实生活中提供(没有神奇的RSA二进制文件,PGP插件)。 问题是,什么是最好的,你可以做出这种情况,这比发送密码明文更好。 了解每个这样的解决scheme的缺点是一个加号。 欢迎任何比普通密码更好的改进。 我们不瞄准100%l33tG0Dhx0r-proff解决scheme。 难以破解比复杂的破解更好,这比揭示密码的琐事更好。

authentication和授权有区别吗?

我看到这两个术语有点相似(特别是在基于networking的场景中,但我想它不仅限于此),我想知道是否有区别。 在我看来,他们都意味着你可以做你正在做的事情。 那么这只是一个命名的东西,还是在意义上有一个基本的区别?

Docker和保护密码

我最近一直在尝试与Docker一起构build一些服务来玩玩,而一件让我烦恼的事情是把密码放在一个Dockerfile中。 我是一名开发人员,因此在源代码中存储密码就像是一个重大的冲击。 如果这甚至是一个问题? 有没有什么好的约定如何处理Dockerfiles中的密码?

为什么标准会话有效期为24分钟(1440秒)?

我一直在做一些关于PHP会话处理的研究,并且遇到了1440秒的session.gc_maxlifetime值。 我一直在想,为什么标准值是1440,它是如何计算的? 这个计算的基础是什么? 保持会议有多长时间? session.gc_maxlifetime的最小值/最大值是否会推荐? 值越高,Web应用程序对于会话劫持就越容易受到攻击。