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

简介: ClojureWest大会结束了,Aaron Bedra发表了题为 Clojure.web/with-security的演说。如果你用Clojure开发web应用程序,你必须看这个视频。现在就看。这篇博客综合了Aaron的讲话笔记和一些我自己的想法。

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

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

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


有多差?

“Clojure web应用程序是我曾经见过的、在安全方面做得最差的。”

“……像PHP级别……没有框架级别,安全。”

—Aaron Bedra

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


密码管理

password/crypt相关操作的前三名类库(crypto-password, friendlib-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 IssuesOWASP Testing Guide)的Clojure web应用程序是几乎不可能的,当你决定这样做的时候,是很痛苦的。

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


相关文章
|
26天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
46 1
|
29天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
71 4
|
28天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
58 2
|
1月前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
71 3
|
1月前
|
SQL 安全 Go
PHP在Web开发中的安全实践与防范措施###
【10月更文挑战第22天】 本文深入探讨了PHP在Web开发中面临的主要安全挑战,包括SQL注入、XSS攻击、CSRF攻击及文件包含漏洞等,并详细阐述了针对这些风险的有效防范策略。通过具体案例分析,揭示了安全编码的重要性,以及如何结合PHP特性与最佳实践来加固Web应用的安全性。全文旨在为开发者提供实用的安全指南,帮助构建更加安全可靠的PHP Web应用。 ###
36 1
|
2月前
|
Kubernetes 安全 应用服务中间件
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
50 3
|
2月前
|
缓存 安全 JavaScript
掌握JAMstack:构建更快、更安全的Web应用
JAMstack 是一种现代 Web 开发架构,结合 JavaScript、APIs 和 Markup,创建更快、更安全的 Web 应用。其核心优势包括高性能、安全性、可扩展性和易维护性。JAMstack 通过预构建静态页面和 API 实现高效渲染,利用静态站点生成器如 Gatsby 和 Next.js,并借助 CDN 和缓存策略提升全球访问速度。尽管面临复杂交互、SEO 和数据更新等挑战,但通过 Serverless Functions、预渲染和实时 API 更新等方案,这些挑战正逐步得到解决。
|
3月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
135 5
|
3月前
|
JSON 安全 JavaScript
Web安全-JQuery框架XSS漏洞浅析
Web安全-JQuery框架XSS漏洞浅析
467 2
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
72 5