ruby 中的大多数会话固定主题大多与 Rails 相关。sinatra 中是否存在会话修复漏洞?在 Rails 中,我们主要建议在分配会话之前执行 reset_session。我们如何防止 sinatra 中的会话固定?
1 回答
Sinatra 默认使用 Rack::Protection gem 来防止很多常见的漏洞。您可能对它的会话劫持保护特别感兴趣。这些是 Rack::Protection gem 可以防止的一些事情:
跨站请求伪造
真实性令牌:如果给定的访问令牌与会话中包含的令牌匹配,则仅接受不安全的 HTTP 请求。表单令牌:仅当给定的访问令牌与会话中包含的令牌匹配时才接受提交的表单。不期望来自 Ajax 请求的此类令牌。远程令牌:仅当给定的访问令牌与会话中包含的令牌匹配或请求来自同一来源时,才接受不安全的 HTTP 请求。JSON CSRF: JSON GET API 很容易被嵌入为 JavaScript,而 Array 原型已被修补以跟踪数据。如果内容类型是 JSON,即使在 GET 请求上也会检查引荐来源网址。远程推荐人:如果 Referer [sic] 标头设置为不同的主机,则不接受不安全的 HTTP 请求。
跨站脚本
XSS Header:设置 X-XSS-Protection 标头来告诉浏览器阻止攻击。点击劫持。转义参数:自动转义 Rack::Request#params 以便它们可以嵌入到 HTML 或 JavaScript 中,而不会出现任何进一步的问题。如果定义了转义字符串,则调用 html_safe,以避免在 Rails 中双重转义。
点击劫持
框架选项:设置 X-Frame-Options 标头以告诉浏览器避免将页面嵌入框架中。
目录遍历
取消转义 '/' 和 '.',扩展 path_info。因此 GET /foo/%2e%2e%2fbar 变为 GET /bar。
会话劫持
跟踪会话中的用户代理等请求属性,并在这些属性更改时清空会话。这基本上可以防止来自 Firesheep 的攻击。由于考虑到的所有标头也可能被欺骗,因此这不会阻止所有劫持尝试。
IP 欺骗
检测(某些)IP 欺骗攻击。
与大多数与安全相关的问题一样,了解 Web 安全的一般知识是个好主意。不幸的是,没有很多专门针对 Sinatra 安全性的好的教程。