资讯专栏INFORMATION COLUMN

clojure的web安全比你想象的还要差

opengps / 1294人阅读

摘要:的安全比你想象的还要差大会结束了,发表了题为的演说。宣称,根据可供选择的类库来倒腾你自己的栈,这种思想方法导致了系统级的安全问题。对于而言,安全的会话管理只有非常少量的被证明过的最佳实践。安全头在应用程序,没有集中的类库来居中管理安全头。

Clojure的web安全比你想象的还要差

ClojureWest大会结束了,Aaron Bedra发表了题为 Clojure.web/with-security的演说。如果你用Clojure开发web应用程序,你必须看这个视频。现在就看。

这篇博客综合了Aaron的讲话笔记和一些我自己的想法。

有多差?
  

“Clojure web应用程序是我曾经见过的、在安全方面做得最差的。”
“……像PHP级别……没有框架级别,安全。”
—Aaron Bedra

Aaron宣称,根据可供选择的类库来倒腾你自己的(web)栈,这种Clojure思想方法导致了系统级的安全问题。我们有碎片,但是没有把它们组合成一个强健的、可靠的框架。相反,开发者挑选不同的类库,不是所有的类库都提供了完整的覆盖或健全的安全默认项。

密码管理

password/crypt相关操作的前三名类库(crypto-password, friend 和 lib-noir)不支持HMAC,不需要逐个更新就可以实现从一个模式迁移(MD5到SHA1到……),通常具备有限的选项。

Aaron推荐的不是要有多个选项可供选择,而是Clojure社区致力于一个(他推荐crypto-password),让friend和lib-noir依赖它。我认为这是明智的想法。

会话管理

Clojure web应用程序通常依赖Ring处理会话管理。Ring不能提供持久会话管理(基于数据库,保存/验证合法的会话cookie)来阻止重放攻击(replay attack),会话cookie不能默认成http only标识(允许XSS攻击盗取cookie)。

对于Ring而言,安全的会话管理只有非常少量的、被证明过的最佳实践。

身份验证

friend类库就是基于Ring的web应用程序在身份验证管理上的、事实上的类库,它基本满足了。不幸的是,friend不支持更加复杂的身份验证策略,在基于Ring之外的情况下就表现不好了。

我们不要用你自己的独立身份验证类库来填补这个空白,而应该反馈给friend。这里我被人提醒了Ruby的omniauth。

XSS

数量庞大的Clojure HTML模板类库提高了持续防护XSS攻击的难度(转义HTML标签,控制标签被转义或不被转义)。

最终有太多的可供选择的模板类库。开发组应该挑选一个并坚持用下去。在选择一个模板类库时,要把XSS控制的支持做为一个考虑因素。

安全头

在Clojure web应用程序,没有集中的类库来居中管理安全头。安全头可以在Ring里手动设置,但是你不得不知道配置的正确位置。Aaron指出,Ruby的secureheaders gem就是Clojure所需的一个例子。

更新:Dhruv Chandna已经为其Ring中间件类库推出了一个更新,增加了安全头:ring-secure-headers。做得不错!随后我会详细研究的。

总结

我的结论:开发安全性高(参考OWASP Top Ten List of Security Issues和 OWASP Testing Guide)的Clojure web应用程序是几乎不可能的,当你决定这样做的时候,是很痛苦的。

建立安全的Clojure web应用程序需要更加容易点儿、需要集成了安全的框架,而不是孤立的类库!我们已经有了一些标准部件(crypto-password,friend),但是更大的开发和集成仍然是有必要的。


原文 Clojure web security is worse than you think

翻译 腊八粥

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11123.html

相关文章

  • JVM 平台上各种语言开发指南[z]

    摘要:我们的目标是建立对每一种语言的认识,它们是如何进化的,未来将走向何方。有点的味道是坚持使用动态类型,但唯一还收到合理拥泵的编程语言,然而一些在企业的大型团队中工作的开发者择认为这会是的一个缺陷。 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目。尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的JVM语言么? 如今借助来自...

    phodal 评论0 收藏0
  • [译]如何成为一个优秀前端工程师

    摘要:但是,在这篇文章中,我要说的是如何从一个不错的工程师成为一个优秀的工程师。大部分我认为的这个领域中优秀的工程师都是这些优秀的第三方库的维护者。 来自Google的前端工程师-Philip Walton 分享了自己关于如何成为优秀的工程师的一些观点。个人感觉很有价值,所以翻译成中文,方便大家阅读。水平有限,如翻译不妥之处请在评论中指出。 原文地址:http://philipwalton....

    missonce 评论0 收藏0
  • [译]如何成为一个优秀前端工程师

    摘要:但是,在这篇文章中,我要说的是如何从一个不错的工程师成为一个优秀的工程师。大部分我认为的这个领域中优秀的工程师都是这些优秀的第三方库的维护者。 来自Google的前端工程师-Philip Walton 分享了自己关于如何成为优秀的工程师的一些观点。个人感觉很有价值,所以翻译成中文,方便大家阅读。水平有限,如翻译不妥之处请在评论中指出。 原文地址:http://philipwalton....

    _ipo 评论0 收藏0
  • [译]如何成为一个优秀前端工程师

    摘要:但是,在这篇文章中,我要说的是如何从一个不错的工程师成为一个优秀的工程师。大部分我认为的这个领域中优秀的工程师都是这些优秀的第三方库的维护者。 来自Google的前端工程师-Philip Walton 分享了自己关于如何成为优秀的工程师的一些观点。个人感觉很有价值,所以翻译成中文,方便大家阅读。水平有限,如翻译不妥之处请在评论中指出。 原文地址:http://philipwalton....

    Near_Li 评论0 收藏0
  • 关于单页面应用一些随想

    摘要:前面不短时间持续投入了时间在做应用架构方面的考量一个是冒险进行了一次应用架构的调整另一个是跟进了的进展当然实际上是同一个事情也许错过的比收获的还多一些不过能走到现在也算幸运了毕竟单页面应用还面临很多不成熟之处国庆长假过去不少现在的想法估计会 前面不短时间持续投入了时间在做 React 应用架构方面的考量一个是冒险进行了一次应用架构的调整, 另一个是跟进了 Redux 的进展当然, 实际...

    AaronYuan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<