Rails教程:第12章练习2中CGI.escapeHTML的原因

时间:2016-06-17 01:38:07

标签: ruby-on-rails

对于Rails Tutorial,我知道解决方案是什么。 (它也是here。)我不明白为什么逃避HTML是必要的。我想我对它的作用感到困惑。具体来说,在本教程给出的user_profile_test.rb文件中,我们进行了以下测试:

test "profile display" do
  get user_path(@user)
  ...
  assert_select 'div.pagination'
  @user.microposts.paginate(page: 1).each do |micropost|
    assert_match micropost.content, response.body
  end
end

为什么在本次测试中不需要转义HTML,在第12章练习中是必要的?

1 个答案:

答案 0 :(得分:1)

您需要转义HTML,以便在数据到达数据库之前对其进行清理。

来自Ruby Docs:
    CGI::escapeHTML('Usage: foo "bar" <baz>')
    # => "Usage: foo &quot;bar&quot; &lt;baz&gt;"

如果您没有使用escapeHTML,有人可能会在其中放置<script>标记并可能会写一些有害代码。也许这是一个社交网站,人们在他们的评论中嵌入了一些恶意软件,然后每个访问页面的人都和你一样糟糕。

就测试而言,我认为这就是原因,因为你可以控制测试。但与此同时,我真的不明白为什么不会在测试中添加escapeHTML,但也许在学习的地方不需要它。