看过本文之后,你应该熟悉下面的内容:
所有显著的对策。
rails中session的概念,其中存放的内容,常见的攻击手段。
rails中大量的分配问题。
在提供管理接口的时候,你不得不关注的一些事情。
如何管理用户:登陆,退出,在各个层面的攻击方法。
常见的注入攻击方法。
1.简介
web框架帮助开发者构建web应用。它们中的一些还可以帮助你构建安全的web应用。事实上一个框架并不比两一个框架安全,如果你正确的使用,你可以用很多框架构建安全的web应用。rails包含一些聪明的帮助工具,例如防止注入攻击的工具,因此这几乎不是什么问题。高兴的是,我审计过的很多rails应用都有一个很好的安全级别。
通常来说,没有即插即用的安全。安全依赖于使用框架的人,有时候是开发的方法。它依赖于web应用环境的所有层:后端存储,web服务器,web应用本身(甚至可能是其它层或者其他应用)。
Gartner Group估计大约75%的攻击发生在web应用层,发现在审计的300个站点中,97%是容易受到攻击的。这是因为相对来说,web应用更容易攻击,因为它们容易理解和操作,设置非专业人士都可以理解和操作。
web应用的威胁包括用户账户劫持,绕开访问控制,读写敏感数据,显示欺骗信息。甚至一个攻击者还可能会安装木马程序,或者是一个主动的电子邮件发送软件,目标是金融数据,或者是通过修改公司的资源来破坏品牌。为了阻止攻击,最小化攻击的影响,移除攻击点,首先要做的是,你需要完全理解攻击的方法,才可以找到正确的对策。这就是本文的目的。
为了开发安全的web应用,你不得不保持各层的更新,并且了解你的敌人。订阅安全邮件列表,保持最新的信息,阅读安全类的博客。我是通过手动完成的,因为那就是你如何发现下流的逻辑安全问题。
2.sessions
开始了解安全的一个好地方就是session,很容易受到特殊攻击的地方。
2.1.什么是session
http是一个无状态的协议,session使得它有了状态。
大多数应用需要跟踪特定用户的状态。这可能是购物车中的内容,或者是一个登陆用户的userid。如果没有session,用户需要在每次请求进行识别和验证。在新用户访问应用的时候,rails会自定创建新的session。如果用户已经使用了应用,会加载一个已经存在的session。
session由一个哈希值和一个sessionid组成,sessionid通常是一个32个字符的哈希字符串。每个发送到客户端浏览器的cookie都包含sessionid。浏览器在客户端的每个请求中会将sessionid发送回来。在rails中你可以通过下面的代码保存和获取session值。
session[:user_id] = @current_user.id User.find(session[:user_id])
2.2.session id
sessionid是一个32字节的md5哈希值。
sessionid由随机字符串的哈希值组成。随机字符串包括当前时间,0-1之间的随机数,ruby解释器的进程id(也是一个随机数字),一个常量字符串。当目前为止,暴利攻击rails的sessionid是不可行的。MD5是不可逆的,但是可以碰撞,因此创建一个相同哈希值的字符串只是存在理论的可能性。
2.3session劫持
偷了一个用户的sessionid之后,一个攻击者就可以用受害者的名义访问web应用。
很多web应用都有验证系统:用户提供登陆账号和登录密码,web应用验证这些信息,验证通过之后,将用户的id保存到session中。在这之后,这个session就是有效的了。每次请求都会加载用户,通过session中的用户id识别用户,不需要再次验证。在cookie的sessionid用来识别session。
因此,cookie为web应用提供了临时的验证功能。每个从某个人哪里获取cookie的用户,可以以那个人的名义使用web应用,可能会产生严重的后果。下面是一些劫持session的方法,已经相应的对策。
在不安全的网络中嗅探cookie。无线局域网就是这样一个网络环境。在一个非加密的无线局域网,尤其容易监听所有连接客户端的通信。这就是为什么不要再咖啡店工作的原因。web应用的构建者应该通过SSL来提供一个安全的连接。在Rails3.1以及后续版本,可以在配置文件中进行配置,来强迫在应用中使用SSL连接。
config.force_ssl = true
大多数的人在公共终端工作之后,没有清除cookie。如果刚才的用户没有退出web应用,你就可以以刚才那个用户的身份使用web应用。在web应用中给用户提供一个log-out按钮,并且放在显著的位置。
很多跨站点攻击脚本cross-site scripting(XSS)的目标就是获取用户的cookie。
不是偷一个对攻击者来说未知的cookie,而是将用户的session的身份(在cookie中)修改为他可以认识的。在后面会讲到这个所谓的session固定。
大多数攻击者的主要目的是获取金钱。偷一个银行账号的私下价格是10-1000美元,获取信用卡号是0.4-20美元,拍卖网站的账户是1-8美元,电子邮件密码是4-30美元。
2.4.session指南
下面是一些常用的session指南
不要再session中存储大对象。将内容存储到数据库,在session中只保存数据的id。这可以消除同步这个令人头痛的问题,还不会占满session的存储空间(这依赖于你选择存储session的类型)。服务端的session存储空间你可以清除session,但是很难减轻客户端的存储空间压力。
关键的数据不应该存储在session中。如果用户清除了他的cookie,或者是关闭了浏览器,这些信息就会消失。在客户端的session存储,用户可以读取数据。
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索应用
, session
, 哈希
, 用户
, 攻击
, 一个
, 10语音识别框架
, session安全
, 获取session值
哈希表碰撞攻击
rails api开发、rails 微信开发、rails开发工具、rails为什么开发快、rails 可视化开发,以便于您获取更多的相关知识。