ruby中的大多数会话固定主题主要与rails相关。 sinatra中是否存在任何会话固定漏洞?在rails中,我们主要建议在分配会话之前执行reset_session。我们如何在sinatra中防止会话固定?
答案 0 :(得分:4)
默认情况下,Sinatra使用Rack :: Protection gem来防御许多常见漏洞。您可能对其会话劫持保护特别感兴趣。这些是Rack :: Protection gem防范的一些内容:
真实性令牌:如果给定的访问令牌与会话中包含的令牌匹配,则仅接受不安全的HTTP请求。 表单令牌:如果给定的访问令牌与会话中包含的令牌匹配,则仅接受提交的表单。不期望这样的令牌来自Ajax请求。 远程令牌:如果给定的访问令牌与会话中包含的令牌匹配或请求来自同一源,则仅接受不安全的HTTP请求。 JSON CSRF: JSON GET API很容易被嵌入为JavaScript,而Array原型已经过修补以跟踪数据。如果内容类型是JSON,则检查引用者甚至是GET请求。 远程引荐来源:如果Referer [sic]标头设置为其他主机,则不接受不安全的HTTP请求。
XSS标头:设置X-XSS-Protection标头,告诉浏览器阻止攻击。点击劫持。 Escaped Params:自动转义Rack :: Request#params,以便它们可以嵌入到HTML或JavaScript中而不会出现任何其他问题。如果已定义,则在转义字符串上调用html_safe,以避免在Rails中双重转义。
框架选项:设置X-Frame-Options标头,告诉浏览器避免在页面中嵌入页面。
Unescapes'/'和'。',展开path_info。因此GET / foo /%2e%2e%2fbar变为GET / bar。
跟踪会话中的用户代理等请求属性,如果这些属性发生更改,则会清空会话。这基本上可以防止来自Firesheep的攻击。由于所有考虑的标题也可能被欺骗,这不会阻止所有劫持尝试。
检测(某些)IP欺骗攻击。
与大多数安全相关的问题一样,最好具备网络安全的一般知识。不幸的是,没有很多优秀的教程专门针对Sinatra安全性。