我似乎无法理解这个小问题:
<ul ng-repeat="parent in parents">
<li>Mother: <i>{{parent.mother}}</i></li>
<li>Father: <i>{{parent.father}}</i></li>
<a href="#" ng-click="showKids()">Show Kids</a>
<ul ng-repeat="kid in parent.kids" ng-show="active">
<li>{{kid.name}}</li>
</ul>
</ul>
Run Code Online (Sandbox Code Playgroud)
当我点击"显示孩子"时,我只想展示我点击的父母的孩子,而不是另一个.所以我需要某种索引,我在ng-show中使用的模型只针对特定元素.
由于$ scope.parents来自后端服务器并且使用ng-init加载,我不知道如何在控制器写入列表之前访问它以添加"活动"元素.
使用JWT编写带有Pyramid/Cornice的REST API进行身份验证,我将不得不实施一些CSRF保护.彻底阅读了这个主题我理解了这个问题,但我对实现它的最佳方法感到困惑,考虑到所有可能的攻击向量,这有点棘手.
由于此API可以访问敏感数据并将作为开源软件发布,因此需要一个独立的保护.它将用于具有不受信任的子域的环境中,我不能依赖用户遵循安全准则.
对于我的无状态服务,我可以使用" Double Submit Cookies "或" Encrypted Token Pattern "方法.
为了防止"cookie抛出",Double Submit方法中的令牌需要是可验证的.MiTM攻击是一种额外的威胁,我希望通过仅强制使用HTTPS-cookies来充分缓解这种威胁.
为了获得一个不易被攻击者猜测和复制的可验证令牌,我想像这样的散列令牌应该有效:
pbkdf2_sha256.encrypt($userid + $expire + $mycsrfsecret, salt=$salt)
Run Code Online (Sandbox Code Playgroud)
"exp"是JWT的到期值.JWT将与CSRF-cookie一起发布,服务器可以读取"exp",这会增加一些额外的保护,因为它的变量和攻击者不知道它(可能是多余的?).
根据请求,我可以轻松地比较我收到的两个令牌,并用pbkdf2_sha256.verify($tokenfromrequest, $userid + $exp + $mycsrfsecret)它来与JWT-token('Verifiablity')中的值进行比较.
这种方法会遵循建议的做法吗?
我选择了pbkdf2 over bcrypt,因为它的验证方法明显更快.
到期时间设置为7天,之后JWT和CSRF令牌将通过新登录续订(它们也将在中间重新登录时续订).
另一种方法是向客户端发送一个字符串,包括userid,expiry和nonce,用服务器端密码加密.在请求时,此字符串将一起发送,服务器可以对其进行解密并验证用户ID和到期日期.
这似乎是更简单的方法,但我不确定如何实现它,我不打算滚动我自己的加密,我没有找到好的例子: