【问题标题】:What could/should I do to care about security in my case?我可以/应该做些什么来关心我的案件的安全性?
【发布时间】:2012-01-12 00:23:16
【问题描述】:

我正在使用 Ruby on Rails 3.1.0,我想专注于安全性,将 I18n gem 用于国际化目的。

此时我有:

# in .yml file
key_1_html: "%{var_1} is just a test"

# in view, controller and model files
I18n.t('key_1_html', :var_1 => 'Test variable')

Test variable 是/代表用户的输入,因此我应该将其视为潜在的黑客攻击。

我可以/应该做些什么来关心我的案件的安全性?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 security internationalization


    【解决方案1】:

    在正常的 Rails (3.x) 使用下,您无需执行任何操作。

    即使某些 HTML 代码或 javascript 进入从 i18n 返回的字符串,如果您以普通方式输出从 i18n 返回的字符串,其中的任何 HTML(无论是来自模板还是来自变量)都将被转义并显示为网页中的文字来源。

    您必须手动将 i18n 返回的字符串标记为 .html_safe 才能将其作为 html 源代码提供。

    所以不要那样做。

    你自己试试,看看。

    I18n.t('key_1_html', :var_1 => '/<script>danger!</script>')
    

    现在在 ERB 模板中输出,看看会发生什么。

    如果除了通过典型的 Rails 模板将 i18n 输出到浏览器之外,您还对 i18n 做了一些奇怪的事情,那么您需要说明什么以及您关心的是什么。

    我想也许这份指南正是您想要的,它是关于 Rails 安全问题的概述:

    http://guides.rubyonrails.org/security.html

    请参阅第 8 节“注入”。

    【讨论】:

    • 顺便说一句:Ruby on Rails 3.x 在什么情况下不处理转义?有吗?如果是这样,什么/什么时候?
    • 好吧,Rails 3.x 确实可以处理 .erb 模板中的任何内容的转义,使用 输出,除非该字符串已被标记为 .htmlsafe。如果您正确使用 ActiveRecord,Rails 还将处理对 SQL 注入的保护。然而,有无数种情况下rails不能处理转义,因为你可以用rails做无数的事情,你可以用它做任何你想做的事情,包括不做任何事情的事情感觉或以前没有人做过。在某些情况下,Rails 不会处理转义。
    • 你能给我两个极端情况的例子,Ruby on Rails 处理不处理转义吗?
    • 这是为了考试还是什么?
    猜你喜欢
    • 2021-10-13
    • 1970-01-01
    • 2017-08-10
    • 2012-10-11
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多