gpt4 book ai didi

ruby-on-rails - 显示从数据库中获取的数据时是否应该调用 escape_javascript

转载 作者:太空宇宙 更新时间:2023-11-03 17:28:27 25 4
gpt4 key购买 nike

我有一个字段是 xss_sanatised在模型级别保存在数据库中之前。当我想显示这个时,我应该再次 escape_javascript在 View 中渲染它之前?

我的查询应该像这样

User.all.pluck(:id, :name).map { id: id, name: escape_javascipt(name)}

代替

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

当我直接注入(inject)时<script>alert('hi')</script>在数据库中,它实际上是在 UI 中执行的。尽管如果不直接编写 SQL 查询,我将无法将该值写入数据库。

所以我应该使用 escape_javascript是否适用于所有领域?

编辑

这在 UI 中呈现为使用 select2 的下拉列表

<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 Queries”的方式,强制手动向数据库中输入不安全的内容,那么自然而然地,上述“输入是安全的”假设就失效了。但这是一个“不可能”的场景,所以我不会特别担心。

如果你真的想对此更加安全,那么你可以在渲染输入之前重新清理输入。但在我看来,这很可能是矫枉过正。 (无论哪种方式,您只需要对其进行一次 sanitizer !)


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

如果您需要在一个值上调用 escape_javascript,那就去做吧。但同样,由于您没有共享 View 渲染代码,我无法建议是否真的需要它。

关于ruby-on-rails - 显示从数据库中获取的数据时是否应该调用 escape_javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58536441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com