gpt4 book ai didi

javascript - 在 Rails 的 escape_javascript() 输出中防止 XSS

转载 作者:行者123 更新时间:2023-11-29 15:48:02 24 4
gpt4 key购买 nike

在我正在处理的应用程序中,客户端 View 是根据数据库中的某些记录生成的。我首先生成记录的 JSON,将其保存在我页面的一个变量中,然后使用 JS 构建界面。

问题是记录包含用户生成的字段,因此应用程序容易受到 XSS 攻击。如果您让 JSON 通过 escape_html(通过不对其调用 html_safe),它会搞砸引号。

获取代码。在我的模型中:

Class Foo
# ...
def describe_for_view
[{:title => "hello", :content => "<script>I.Am.Evil()</script>"}]
end
end

在我看来的某个地方:

<script>
var describedForView = $.parseJSON("<%= escape_javascript(@foo.describe_for_view.to_json).html_safe %>");
</script>

然后在我的 javascript 中:

$("body").append("title: " + describedForView[0].title + ", content: " + describedForView[0].content);

我目前正在做的是通过调用 $.sanitize 来包装对用户生成字段的访问,定义如下:

$.sanitize = function(str) {
return $("<div/>").text(str).html();
};

事情是这样运作的,但我认为它不干净。

有什么建议吗?

最佳答案

Rails 3 有一个内置的 SanitizeHelper采用白名单方法。我会在将用户数据保存到数据库之前调用它,或者在您的 escape_javascript 调用中调用它:

escape_javascript(sanitize(some_stuff.to_json))

关于javascript - 在 Rails 的 escape_javascript() 输出中防止 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777497/

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