随着我继续构建越来越多的网站和Web应用程序,我经常被要求以一种方式存储用户的密码,如果/当用户遇到问题时可以检索它们(要么通过电子邮件发送忘记的密码链接,请通过当我能够对抗这种做法时,我会做很多"额外"编程,以便在不存储实际密码的情况下进行密码重置和管理协助.
当我无法抗争(或无法获胜)时,我总是以某种方式对密码进行编码,以至于它至少不会以明文形式存储在数据库中 - 尽管我知道如果我的数据库被黑客攻击破坏密码的罪魁祸首并不需要太多,所以这让我感到不舒服.
在一个完美的世界里,人们经常更新密码,而不是在许多不同的网站上复制密码 - 不幸的是,我知道许多人拥有相同的工作/家庭/电子邮件/银行密码,甚至在需要帮助时自由地给我.如果我的数据库安全程序由于某种原因失败,我不想成为他们的财务终结负责人.
在道德和道德上,我觉得有责任保护一些用户的生活,即使他们以较少的尊重对待他们.我确信有许多途径可以用来腌制哈希和不同的编码选项,但是当你必须存储它们时,是否有一个"最佳实践"?在几乎所有情况下,我都使用PHP和MySQL,如果这对我应该处理细节的方式有任何不同.
附加信息Bounty
我想澄清一点,我知道这不是你想要做的事情,在大多数情况下拒绝这样做是最好的.但是,我并不是在寻找关于采取这种方法的优点的演讲我正在寻找采取这种方法时采取的最佳步骤.
在下面的一个注释中,我指出,当人们被要求执行安全的密码恢复程序时,主要针对老年人,智障人士或非常年轻人的网站可能会让人感到困惑.虽然在这些情况下我们可能会发现它简单而平凡,但有些用户需要额外的帮助,要么让服务技术人员帮助他们进入系统,要么将其直接通过电子邮件发送/显示给他们.
在这样的系统中,如果用户没有获得这种级别的访问协助,那么来自这些人口统计数据的流失率可能会阻碍应用程序,因此请记住这样的设置.
谢谢大家
这是一个有趣的问题,有很多争论,我很喜欢它.最后,我选择了一个保留密码安全性的答案(我不必保留纯文本或可恢复的密码),但也使我指定的用户群可以登录到系统而没有我从中找到的主要缺点正常的密码恢复.
由于不同的原因,我一直有大约5个答案,但我必须选择最好的答案 - 所有其他答案都是+1.感谢大家!
此外,感谢Stack社区中的每个人都投票赞成这个问题和/或将其标记为最喜欢的.我以100票赞成票作为赞美,并希望这次讨论能够帮助其他与我有同样关切的人.
这是一个两部分问题:
第1部分
首先,处理在PHP中计算密码的熵.我一直无法找到任何经验合理的代码示例,并且非常希望找到一种帮助来找到计算最终数字的"正确"方法.网上的很多人都有他们自己的家庭烘焙加权算法,但我真的在寻找科学的答案.
我将使用密码熵作为更大安全系统的一部分,并根据用户密码被泄露时可访问的信息以及蛮力破解密码的方式来分析我们的整体数据安全性.
第2部分
这个问题的第二部分是:这个数字真的有用吗?我的最终目标是为系统中的每个密码生成一个"分数",我们可以将其用作监视作为动态实体的整体系统安全性.我可能不得不使用另一种算法或两种算法进行字典攻击,更换密码等等 - 但我确实认为熵会在这种"整体"系统评级中发挥重要作用.我欢迎其他方法的建议.
我知道的
我已经看到一些提到用于计算所述熵的对数方程,但我还没有看到一个好的例子,它实际上并没有写成数学方程式.我真的可以使用代码示例(即使严格来说不是PHP)来让我继续.
延期
在发表评论时,我意识到我可以更好地解释这种计算的有用性.当我处理用户密码极弱的遗留系统时,我必须先得到一些具体的证据证明这个弱点,然后才能强制所有用户将密码更改为新的(强制执行的)强密码.通过在系统中存储每个用户帐户的密码强度分数,我可以构建几个不同的度量标准来显示整体系统的弱点,并为更强的密码设置一个案例.
TIA
试图在这里一次学习太多新东西(Laravel,PHPUnit等),所以这可能只是一个疲惫的大脑问题,仍然会欣赏一些帮助.
我有一个非常基本的'博客'项目,使用Laravel作为API层,AngularJS作为前端.我想对API端点进行单元测试,但是在我的测试函数中我无法弄清楚如何处理JSON.
当我尝试运行testGetBlogPosts()时,我看到我的CLI中的JSON输出看起来像什么,但我无法json_decode()并检查对象的某些部分是否符合我的预期结果.在这里,我只想确保结果数组中第一个对象的ID是ID"1".
我从测试中得到的结果是:1)ExampleTest :: testGetBlogPosts ErrorException:试图获取非对象的属性
任何帮助或建议非常感谢!
TL; DR:测试用例未正确处理来自API端点的JSON响应
调节器
class HomeController extends BaseController {
/*
|--------------------------------------------------------------------------
| Default Home Controller
|--------------------------------------------------------------------------
|
| You may wish to use controllers instead of, or in addition to, Closure
| based routes. That's great! Here is an example controller method to
| get you started. To route to this controller, just add the route:
|
| Route::get('/', 'HomeController@showWelcome');
|
*/
public function showWelcome()
{
return View::make('hello');
}
public function getBlogPosts()
{ …Run Code Online (Sandbox Code Playgroud) 我正在开发一个包含众多活动的应用程序 我想创建一个持久性通知(或多或少)说"AppName - 返回AppName",每当我的后台服务运行时它都会出现. 创建和处理通知没有问题.
现在,用户可以在多个屏幕/活动中的任何一个,离开应用程序,然后想要通过通知重新进入应用程序. 问题是,通知必须具有意图,该意图启动预定的活动.我希望通知重新进入应用程序,无论Activity在历史堆栈的顶部.
我第一次尝试一个丑陋的解决方法是进行一项活动(让我们称之为"returnFromNotify"),其唯一的工作就是"完成"自己的"onCreate".通知将在应用程序历史记录的范围内打开"returnFromNotify",然后立即将其自身删除,将用户发送回应用程序堆栈中的先前历史记录状态.这似乎有效...除非用户使用"后退"完全退出应用程序.然后,当他们点击通知时,"returnFromNotify"加载,然后完成,将它们发送回主屏幕(因为应用程序的历史堆栈中没有活动).
我考虑过在"returnFromNotify"之前尝试检测历史堆栈中是否有任何内容,如果没有,则启动我的主Activity.我似乎无法找到办法做到这一点.
对Java/Android新手的任何输入或建议?仅供参考,我的主要历史是使用基于脚本的语言.
在与一组开发人员合作时,我个人非常喜欢遵循内部编码标准.我觉得它为代码带来了连续性,让人们可以更轻松地扩展代码库,关闭工作,并在困难的任务中互相帮助.另一方面,我知道有很多人相信只要编码按时完成并且它起作用,我们应该接受个别编码器风格的差异.
看到硬币的两面,我发现很难确定是否有点扼杀程序员风格是否值得通过拥有一个相当标准的代码库获得(有时是边缘的,有时是大的)好处.特别是在速度很重要的敏捷开发框架内工作时,我认为这是一个更重要的问题.
为了加剧这种情况,我是一名PHP程序员,所以你很少会遇到两个同样风格的程序员,因为它主要是一门自学成才的学科.
最好是将一套松散的标准作为建议,只强制要求非常重要的项目(比如用变量名来限制匈牙利表示法),或者最好是铁拳并且要求缩进是制表符而不是空格而且括号总是打开他们自己的一条线.
编辑:
应该在问题中看到我的错误 - 我想我对标准应该有多严格感兴趣 - 他们应该有很大的自由度还是应该把它锁定?
我希望有人可以帮我解决这个问题.我最近在我的一些服务器上运行APC,这些服务器只托管一个应用程序,并且它运行良好.不幸的是,我今晚在我的主力网络服务器上运行它,一旦我打开它,我开始从我的wordpress博客"混合".第一个加载的博客会缓存数据库信息,然后加载的每个博客都会收到数据库错误.
我想知道的是,是否有办法以某种方式为缓存添加前缀,以便我可以避免这个问题.我假设缓存会尊重文件之间绝对路径的差异,而不是在多个站点上使用相同的缓存副本... FAIL
提前致谢!
更新
这里要求的是我在/etc/php.d/中使用的apc.ini文件的副本来覆盖默认设置:
/etc/php.d/apc.ini
extension=apc.so
apc.shm_size = 64M
apc.max_file_size = 8M
apc.include_once_override = 1
apc.stat_ctime = 1
Run Code Online (Sandbox Code Playgroud) 我希望那里的某个人可以告诉我,如果我想要做什么,甚至可以使用FLOT Javascript库.我试图用双轴和三个数据集显示图表(下图).一个数据集位于左侧轴上,两个数据集位于右侧轴上.我真正希望能够做的是将两个数据集堆叠在右轴上,因为它们应该累积显示.到目前为止,我一直无法得到这个图表来响应堆栈:真正的设置.
如果有人能帮助我,我会非常感激.我的代码和当前图表的快照.我正在尝试堆叠对应于右轴(y2)的蓝色和绿色区域.

$(function () {
var previousPoint;
var completes = [[1346954400000, 5], [1346997600000, 5], [1347040800000, 7], [1347084000000, 9], [1347127200000, 12], [1347170400000, 15], [1347213600000, 16], [1347256800000, 20], [1347300000000, 20], [1347343200000, 20], [1347386400000, 25]];
var holds = [[1346954400000, 2], [1346997600000, 2], [1347040800000, 6], [1347084000000, 12], [1347127200000, 12], [1347170400000, 15], [1347213600000, 24], [1347256800000, 24], [1347300000000, 24], [1347343200000, 24], [1347386400000, 25]];
var screeners = [[1346954400000, 10298], [1346997600000, 7624], [1347040800000, 5499], [1347084000000, 2100], [1347127200000, 8075], [1347170400000, 4298], [1347213600000, 1134], [1347256800000, 507], [1347300000000, 0], [1347343200000, …Run Code Online (Sandbox Code Playgroud) 我正在开发一个系统,我想在其中嵌套两个ng-repeat语句,以便我可以通过2D数组工作.我可以使用版本1.1.1成功完成任务,如下所示:
但是,当我使用完全相同的代码集并将Angular的版本更改为1.2.1时,代码将不再起作用并抛出错误:
错误:
Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: x in value, Duplicate key: number:0
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何使用较新版本的Angular完成1.1.1版中显示的任务?