Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 当显示从数据库获取的数据时,我应该调用escape_javascript吗_Ruby On Rails_Ruby_Security_Ruby On Rails 4_Xss - Fatal编程技术网

Ruby on rails 当显示从数据库获取的数据时,我应该调用escape_javascript吗

Ruby on rails 当显示从数据库获取的数据时,我应该调用escape_javascript吗,ruby-on-rails,ruby,security,ruby-on-rails-4,xss,Ruby On Rails,Ruby,Security,Ruby On Rails 4,Xss,我有一个字段,在保存到数据库之前,它在模型级别被xss_sanatized。当我想显示它时,我应该在视图中呈现它之前再次转义它吗 我的问题应该是什么样的 User.all.pluck:id,:name.map{id:id,name:escape\u javasciptname} 而不是 User.all.pluck:id,:name.map{id:id,name:name} 当我直接在数据库中注入alert'hi'时,它实际上是在UI中执行的。 尽管我无法在不直接编写SQL查询的情况下将该值写入

我有一个字段,在保存到数据库之前,它在模型级别被xss_sanatized。当我想显示它时,我应该在视图中呈现它之前再次转义它吗

我的问题应该是什么样的

User.all.pluck:id,:name.map{id:id,name:escape\u javasciptname}

而不是

User.all.pluck:id,:name.map{id:id,name:name}

当我直接在数据库中注入alert'hi'时,它实际上是在UI中执行的。 尽管我无法在不直接编写SQL查询的情况下将该值写入数据库

那么我是否应该对所有字段使用escape\u javascript呢

编辑

使用select2在UI中将其呈现为下拉列表

<div input="hidden" id="input"></div>
jQuery('#input').select2({
    multiple: false,
    data: <%=tech.to_json.html_safe%>,
    initSelection : function (element, callback) {
        callback(<%= esc.to_json.html_safe %>);
    }
});

我认为您在这里会感到困惑,这仅仅是因为您绕过了自己的应用程序的清除规则—直接写入数据库

默认情况下,您永远不应该信任用户输入。应始终将其视为具有潜在恶意

您选择信任它的一个原因是,它是否由内部用户提供,例如您自己

或者,您可能选择信任它的另一个原因是,如果您在保留它之前已对其进行了清理-即,您已明确阻止了任何潜在的恶意输入

假设您的xss_sanatised输入是安全的(我无法确认),因为您没有共享代码,那么您可以信任用户输入是安全的。因此,可以直接在浏览器中显示

但是,如果通过直接编写SQL查询手动将不安全的输入强制到数据库中,那么上述输入是安全的假设自然会失效。但这是一个不可能的场景,所以我不会特别担心

如果您真的想在这方面更加安全,那么您可以在呈现输入之前重新清理输入。但在我看来,这很可能是矫枉过正。不管怎样,你只需要消毒一次就可以了

是一个单独的方法,与用户输入的清除无关。这与您描述的问题无关


如果需要对某个值调用escape_javascript,那么就使用它。但是,由于您没有共享视图渲染代码,因此我无法建议是否确实需要它。

我认为您在这里会感到困惑,因为您绕过了自己的应用程序的清理规则-直接写入数据库

默认情况下,您永远不应该信任用户输入。应始终将其视为具有潜在恶意

您选择信任它的一个原因是,它是否由内部用户提供,例如您自己

或者,您可能选择信任它的另一个原因是,如果您在保留它之前已对其进行了清理-即,您已明确阻止了任何潜在的恶意输入

假设您的xss_sanatised输入是安全的(我无法确认),因为您没有共享代码,那么您可以信任用户输入是安全的。因此,可以直接在浏览器中显示

但是,如果通过直接编写SQL查询手动将不安全的输入强制到数据库中,那么上述输入是安全的假设自然会失效。但这是一个不可能的场景,所以我不会特别担心

如果您真的想在这方面更加安全,那么您可以在呈现输入之前重新清理输入。但在我看来,这很可能是矫枉过正。不管怎样,你只需要消毒一次就可以了

是一个单独的方法,与用户输入的清除无关。这与您描述的问题无关


如果需要对某个值调用escape_javascript,那么就使用它。但是,由于您没有共享视图渲染代码,因此我无法建议是否确实需要它。

如何显示它?要逐字插入内容,请使用原始帮助程序而不是调用html\u safe,或者等效地使用“如何显示”?要逐字插入内容,请使用原始帮助程序而不是调用html\u safe,或者等效地,使用