针对页面修改黑客的 Rails 集成测试?

2023-12-24

我正在使用 Capybara 1.1.2、Rails 3.1.3、rspec-rails 2.9.0 和 Ruby 1.9.3p0。

假设一个应用程序具有标准用户和 account_admin 用户。标准用户可以创建另一个标准用户,但标准用户不能创建 account_admin 用户。

当然,用户界面并没有为标准用户提供创建帐户管理员的选项。但使用 Firebug 需要 30 秒,用户可以重写 HTML,以便提交 POST 请求来创建 account_admin。

如何测试我的应用程序是否可以防止这种简单的黑客攻击?

正常的标准用户测试如下所示:

context "when standard user is signed in" do

  before do
    login_as standard_user
    visit users_path       # go to index
    click_link('Add user') # click link like user would
  end

  describe "when fields are filled in" do

    let(:new_email) { "[email protected] /cdn-cgi/l/email-protection" }

    before do
      fill_in "Email", with: new_email
      fill_in "Password", with: "password"
      fill_in "Password confirmation", with: "password"
      choose "Standard user" # radio button for Role
    end

    it "should create a user" do
      expect { click_button submit }.to change(User, :count).by(1)
    end

  end

end

有没有办法“欺骗”测试,使其采用表单上不允许的值?我尝试将单选按钮视为文本字段,但 Capybara 将其视为不存在的字段而拒绝:

fill_in "Role", with: "account_admin" # doesn't work

直接修改 params hash 也不起作用:

params[:role] = "account_admin" # doesn't work

我是否必须将其写得更像控制器测试,直接调用post :create?


水豚作者 jnicklas 证实here https://groups.google.com/d/msg/ruby-capybara/aMnVRN9ooZc/9f4lUASeoaYJCapybara 无法让应用程序执行 UI 中无法执行的操作。他建议控制器进行授权测试。

但是请求用 RSpec 编写的规格without使用 Capybara 语法允许直接使用 HTML 动词(以及一些附加帮助器),如RSpec https://www.relishapp.com/rspec/rspec-rails/v/2-9/docs/request-specs/request-spec and Rails http://guides.rubyonrails.org/testing.html#integration-testing文档。所以而不是水豚的fill_in and click_link指令和page对象,您可以使用属性哈希,动词如get, post, post_via_redirect,以及response.body目的。它类似于控制器测试,但您使用 Rails 的路由根据提供的路径选择适当的控制器操作。这是后一种技术的示例:

describe "when standard user attempts to create account_admin user" do

  let(:standard_user) { FactoryGirl.create(:standard_user) }

  let(:attr) { { email: "[email protected] /cdn-cgi/l/email-protection",
                 password: "password",
                 password_confirmation: "password",
                 role: "account_admin" }
              }

  before do
    login_as standard_user
    get new_user_path
  end

  it "should not create a account_admin user" do
    lambda do
      post users_path, user: attr
    end.should_not change(User, :count)
  end

  describe "after user posts invalid create" do
    before { post_via_redirect users_path, user: attr }

    # redirect to user's profile page
    it { response.body.should have_selector('title', text: 'User Profile') }
    it { response.body.should have_selector('div.alert.alert-error', text: 'not authorized') }
  end

end  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

针对页面修改黑客的 Rails 集成测试? 的相关文章

  • Capybara 无法从 Stripe 中找到表单字段?

    我正在学习 Ruby on Rails 并且正在开发一个使用 stripe 创建高级帐户的应用程序 另外 我正在使用 Rspec 和 Capybara 进行集成测试 require spec helper feature user upgr
  • Rails 没有选择 en.yml 中的自定义日期和时间格式

    我对 Rails 中的 I18N 不太熟悉 所以请耐心等待 尝试设置自定义日期和时间格式 config locales en yml en date formats long dateweek A B d Y time formats ve
  • 如何在 Rails 模型中获取 request.uri?

    request request 当我在控制器中写这个时 它就会起作用 但是如果我在模型或应用程序控制器中需要这个变量 我该怎么办 模型存在于 Web 请求的上下文之外 您可以在 irb 中实例化它们 可以在延迟作业或脚本等中实例化它们 如果
  • Rails、Facebook API、Koala gem — 获取“喜欢”某个页面的用户的所有个人资料

    使用 Rails3 和 koala gem 如何检索 喜欢 FB 页面的用户的所有个人资料 例如 http facebook com DAKINE 有可能吗 作为最终结果 我需要获取一堆存储在数据库中的用户配置文件 Thanks 在 Fac
  • 如何在 Ruby on Rails 中访问控制器中的隐藏字段

    问题 如何访问隐藏字段值post id从文件view comments comment html erb并用在controllers dashboards controller rb 有 2 个控制器 仪表板和评论 并使用gem act a
  • 设计对多个并发会话的支持

    我使用 Rails 3 2 11 和 Devise 2 2 3 作为订阅服务应用程序 我从另一位不再可用的开发人员那里继承了该应用程序 我是 Rails 和 Devise 的新手 我想要允许单个用户 电子邮件 拥有多个会话到同一个应用程序
  • “after_filter”如何/何时工作/运行?

    我正在使用 Ruby on Rails 3 1 我想知道 对于表现原因 无论是否after filter渲染视图文件后运行 也就是说 当用户访问我的应用程序 URL 时 他 她应该显示的相关视图文件先于渲染after filter运行或af
  • Imperavi Redactor 内容未复制到隐藏文本区域

    我正在尝试使用因佩拉维编辑器 http imperavi com redactor 在这里控制我的富文本编辑 div class control group div class controls div div document ready
  • Rails 路由:仅具有自定义操作的资源

    我有一个NotificationsController 其中我只有动作clear 我想通过执行 POST notifications clear 来访问此操作 所以我在我的路由器中写了这个 resources notifications o
  • 为什么我不能让 rake db:migrate 为 ruby​​.railstutorial.org 工作

    我决定完成教程 创建新应用程序并添加新应用程序后user string email string然后执行rake db migrate在应用程序目录中 我得到以下输出 rake aborted undefined method task f
  • Rails 从视图中调用操作

    希望这里有一个简单的问题 但我似乎无法找到答案 刚刚开始使用 RoR 但之前来自 ASP MVC 我在渲染部分视图时遇到问题 其局部变量不一定与主视图的变量相关联 例如 对于一个博客 我试图渲染一个链接到存档的侧边栏 def sidebar
  • 资产管道中的路由助手

    使用 Rails 3 1 0 rc4 我尝试访问 javascript 文件中的路由助手 本例中为 event js erb 但似乎此时它们尚未加载 当请求合并的 assets application js 文件时 我得到 throw Er
  • Rails 3:实时服务器推送?

    我正在尝试编写一个 Rails 3 应用程序 其中服务器可以将数据实时推送到多个客户端 我听说过 Juggernaut 但我也听说它不能与 Rails 3 一起使用 我尝试过 APE AJAX 推送引擎 但我不太幸运 我对 Rails 很陌
  • Node.js 有水豚吗?

    有谁知道 Node js 是否有类似 capybara 的东西 怎么样Zombie http zombie labnotes org 僵尸 js 使用 Node js 进行极其快速的无头全栈测试 The Bite 如果你要编写一个速度极快的
  • 使用Rails UJS,如何从函数提交远程表单

    我正在使用Rails UJS 我有一个表单设置来进行远程提交 如下所示
  • Rails:关于产量

    我在a中看到了一些代码导轨 v2 3 app In layout car general html erb 这个视图是由 cars controller 中的方法调用的 我看到了代码 var some car new Object 有两个问
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • Rails 3 - “无法解析 Yaml”

    我不知道我做错了什么 我尝试运行 rails c 但它只是给了我一个错误 10 分钟前它还在工作 C Ruby192 lib ruby 1 9 1 psych rb 148 in parse couldn t parse YAML at l
  • 如何在 sunspot solr 中进行简单的布尔查询

    gt gt gt marketing User search do s gt gt gt s fulltext Marketing gt gt gt end gt gt gt marketing total 1448 gt gt gt sa
  • Rails 3 Mechanize - SocketError:getaddrinfo:主机或名称未知

    我正在使用 mechanize 但出现此错误 有人可以帮帮我吗 我已将元刷新设置为 true 错误日志 SocketError getaddrinfo Host or name not known form C Ruby192 lib ru

随机推荐

  • 如何使用ConfigurationManager解析app.config?

    我正在使用某种方法来解析我的 app config 文件 然后我被告知使用 ConfigurationManager 更好 更简单 但问题是我不知道如何使用 ConfigurationManager 来做到这一点 我原来的代码是这样的 Xm
  • Angular 2 - 所有组件的全局变量

    我的 angular2 应用程序在许多不同的组件中使用我的后端 Laravel API 我一直在想 将来我需要更改 API URL 这意味着我必须在我对 API 使用 http get post 方法的所有地方 在所有组件中 更改我的 AP
  • SSL - 如何以及何时使用它

    我有一个客户需要 SSL 来保护在线捐赠 但我对于如何 何时使用 SSL 的经验有限 据我所知 在购买证书时 我将该证书分配给整个域 实际上是 IP 地址 有没有办法将加密隔离到网站的单个页面 或者我应该继续保护整个网站 即使只有一个页面需
  • 如何正确使用 scikit-learn 的高斯过程进行 2D 输入、1D 输出回归?

    在发帖之前我做了很多搜索并发现这个问题 https stackoverflow com questions 21320964 how to make a 2d gaussian process using gpml matlab for r
  • OpenCV 后台描述文件无效

    当我尝试使用此命令时 opencv createsamples img image jpg bg bg txt info info info lst pngoutput info num 2600它告诉我 无效的背景描述文件 我现在尝试 n
  • Android Webrtc 将流更改为 STREAM_MUSIC

    我已经创建了从一台设备到另一台设备的 WebRTC 会话 该设备应该能够控制音乐流的音量 但 WebRTC 最初设计用于传输 voice call 因此使用 voice call 通道并使用通话音量控制对于非通话应用程序 我尝试在 WebR
  • 设置seaborn图的x轴间隔

    我有一组子图要绘制 这里 我们如何设置第二行子图中x轴的间隔 即ax4 to ax6 目前 从 1 到 100 的所有值都会打印出来 如图所示 我试过ax4 set xticks range 1 100 5 但在那里 显示的范围是 1 到
  • 将控制台应用程序转换为 Windows 服务

    我正在尝试将生成 pdf 报告的控制台应用程序转换为 Windows 服务 我的代码如下 我的方向正确吗 我安装了此服务并且启动 停止工作正常 但没有生成报告 控制台应用程序本身就可以很好地生成 Output pdf 我的目标是在服务启动时
  • Java 11 应用程序作为轻量级 docker 镜像

    受到提问的启发为什么 Java 11 基础 Docker 镜像如此大 openjdk 11 jre slim https stackoverflow com questions 53375613 我发现这个话题在Java世界里还没有定论 A
  • C# 中的 Oracle、绑定变量和 ID IN (1, 2, 3) 等查询

    我正在寻找以下 Java 技术的 C ODAC 改编 其中代码能够将数字数组 数组大小可以变化 绑定到非 PL SQL 中SELECT语句 然后在 a 中使用结果数组WHERE ID IN 风格检查 http rafudb blogspot
  • 我应该从源代码编译一个库吗?

    我正在开发一个将在定制的 基于 debian 的 Linux 系统上运行的应用程序 我们有一个工具链 以便我们可以为目标系统交叉编译应用程序 这样我们就不必依赖于我们进行编译的主机操作系统 而不是目标操作系统 但是 我不确定我们是否应该从源
  • 具有多种 monad 类型的 Haskell do 子句

    我正在 Haskell 中使用一个名为的图形库三便士 GUI http hackage haskell org package threepenny gui 在这个库中 主函数返回一个UI http hackage haskell org
  • 取np.average而忽略NaN?

    我有一个形状为 64 17 的矩阵 对应于时间和纬度 我想取加权纬度平均值 我知道 np average 可以做到这一点 因为与我用来平均经度的 np nanmean 不同 可以在参数中使用权重 但是 np average 不会像 np n
  • 将包含 NSString 的 NSArray 转换为 NSString

    所以 我有一个包含 NSString 的 NSArray 如何将 NSArray 转换为 NSString 用换行符分隔它们 Use 通过字符串连接的组件 https developer apple com library mac docu
  • 使用 R 进行多线程?

    正在阅读R 项目 http www r project org 网站上 有一些 不清楚的 关于 R 多线程的参考 但尚不清楚基础产品和CRAN http cran cnr berkeley edu 库已编译 革命分析 http www re
  • Bootstrap:如何在一行上创建一系列 div 隐藏溢出的 div

    我有一个使用 bootstrap 构建的网站 我想使用 jquery dragscroll 插件创建一个带有可滑动标题的表格 但保留内置的流体网格 bootstrap 所以我想创建表的标题 并且我使用以下 HTML div class ro
  • 发送ajax请求而不等待应答

    我想发出一个ajax请求来发送一些信息 并在发送后立即 如果我收到错误 成功并不重要 进行重定向 无需等待服务器响应 我想知道我是否做类似的事情 ajax url myurl timeout 500 success function doc
  • 未找到名称为“ARTShape”的视图的组件

    只是试图生成一个在 React Native 中使用 ART 对象的 hello world 我得到了上述异常 就好像库的一部分没有链接一样 我刚刚添加了以下代码 import AppRegistry StyleSheet Text Vie
  • 为 QHeaderView 提供的类实现paintSection

    protected virtual void paintSection QPainter painter const QRect rect int logicalIndex const QHeaderView paintSection pa
  • 针对页面修改黑客的 Rails 集成测试?

    我正在使用 Capybara 1 1 2 Rails 3 1 3 rspec rails 2 9 0 和 Ruby 1 9 3p0 假设一个应用程序具有标准用户和 account admin 用户 标准用户可以创建另一个标准用户 但标准用户