- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我通过 to_json
从 Controller 操作直接客户端发送集合时,如何转义集合?
当我说请求从 Controller 操作发送,然后直接发送到客户端(跳过预处理)时,它看起来像这样:
app/assets/javascripts/blogs.js
这与将请求发送到controller_action,然后发送到服务器端 View 进行预处理,然后将结果发送到请求者相反。看起来像这样:
app/views/blogs/index.js.erb
简短示例:
def some_action
@blogs = Blog.all
respond_to do |format|
format.json {render json: @blogs} # currently dangerous, @blogs is not sanitized.
end
end
举个例子:假设该集合中的 @blogs
记录之一包含来自黑客的以下数据输入:
@blogs.first.title
=> <script>alert('Site now hacked if this javascript runs!')</script>
当 @blogs
在浏览器中呈现时:我想转义 @blogs
内容,这样 JavaScript 就不会从该被黑的条目中触发。
更长的示例:
博主
。 博主
关联的所有博客
。 博客
的第二个选择框,该选择框现在会将属于所选的所有博客
列为选项>博主
。对于代码:上面的 Controller 操作代码完全相同。下面是客户端 JavaScript:
app/assets/javascripts/blogs.js
$("body").on('change', '[data-action="blogger_sel"]', function() {
var blogs_selection = $(this).closest('[data-parent-for="blogs_sel"]').find('[data-action="blogs_sel"]');
$.ajax({
url: "/blogs",
type: "GET",
data: {blogger_id: $(this).val()},
success: function (data) {
blogs_selection.children().remove();
$.each(data, function (index, item) {
blogs_selection.append('<option value=' + item.id + '>' + item.title + '</option>');
});
}
})
});
所以上面:我关心的部分是 value.id
和 value.title
。如果我不逃避的话,这些事情可能会很危险。我想确保它被转义,以便任何危险的输入都变得无害。
最佳答案
下面是一个解决方案。请记住,在将数据持久保存到数据库之前对数据进行清理通常是一个好主意。另外:最好在将响应发送给请求者之前清理服务器端:
app/assets/javascripts/blogs.js
$("body").on('change', '[data-action="blogger_sel"]', function() {
var blog_sel = $(this).closest('[data-parent-for="blog_sel"]').find('[data-action="blog_sel"]');
$.ajax({
url: "/blogs",
type: "GET",
data: {blogger_id: $(this).val()},
success: function (data) {
blog_sel.children().remove();
$.each(data, function (index, item) {
blog_sel.append($('<option>', {
value: item.id,
text : item.title
}));
});
}
})
});
不要按以下方式附加选项,因为它会执行危险的黑客攻击:
blogs_selection.append('<option value=' + value.id + '>' + value.title + '</option>');
关于javascript - rails : How to escape_javascript with client-side AJAX request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39024039/
我正在使用 Masonry 和 Rails 应用程序来渲染充满图像的屏幕。我的问题是在某个时刻我使用远程 AJAX 表单进行调用,该表单稍后会刷新 div。在那之后,调用 Masonry 将停止工作,
这将传递字符串 productID 而不是变量 which == 5。如何传递变量而不是字符串? $(document).ready(function(){ $(".test").click
我正在查看 this Railscast episode并想知道为什么这里需要调用 escape_javascript: $("#reviews").append(" @review)) %>");
这是我的代码 $(function(){ $('#new_post').bind('ajax:success', function() { $('.posts').append("'post'
我无法解决这个问题,我正在使用 simple_form 并且需要使用模型渲染表单,但问题是具有 escape_javascript 的 js 文件无法在每个文件中获取模型 new.html.erb:
我有一个字段是 xss_sanatised在模型级别保存在数据库中之前。当我想显示这个时,我应该再次 escape_javascript在 View 中渲染它之前? 我的查询应该像这样 User.al
我在使用不显眼的 javascript 时遇到了问题。在我的 TwitterAccountController 中,我有: def unshare @twitter_account = Twitt
当用 jquery 和 rails 替换 html 时(在 4.0.4 上测试),以下工作: replace.js.erb的内容 $('#my_div').html(""); _my_partial.
我需要将变量 js 作为参数传递给rails,但它不起作用。这是我的代码: #function js function load_custom_fields(){ var id = $("MY_S
我不确定我的问题是否与我的问题相关,因为语法着色在欺骗我 我想将 HTML 附加到元素。 link 假设它是调用助手 - getLink 的结果 所以当我这样做时 var newelem = ""
假设我在 JavaScript 函数中,我想访问 Rails 行中的数据,如下所示: var DATA_USED html = " 'change_date_range', :locals => {:
在我正在处理的应用程序中,客户端 View 是根据数据库中的某些记录生成的。我首先生成记录的 JSON,将其保存在我页面的一个变量中,然后使用 JS 构建界面。 问题是记录包含用户生成的字段,因此应用
render :partial 仅在 escape_javascript 上生成一次 例如 $(document).ready(function(){ $("#addPers
当我通过 to_json 从 Controller 操作直接客户端发送集合时,如何转义集合? 当我说请求从 Controller 操作发送,然后直接发送到客户端(跳过预处理)时,它看起来像这样: AJ
我一直在看这个Railscast ,特别是这些代码行。 // views/reviews/create.js.erb $("#new_review").before(''); $("#reviews_
*(请注意,一切都在 Ajax 之外完美运行。可提交类可在更改时提交表单) 所以在这里我设置了一个基本示例,由于某种原因我无法让 显示在表单提交上。为了更好地解释,我将仅显示我的相关代码。 inde
使用 Rails 3.0,如果想通过 javascript 呈现部分内容(例如在 AJAX 调用中),可以像这样转义内容 $('#some_id').html(''); 它会起作用,因为 escape
我正在使用 Rails 3.1 和 sprockets 的东西。 我想使用 ERB 预处理一个 js 文件,然后使用 javascript_include_tag 将其包含在内。它是从代码生成的,所以
我是一名优秀的程序员,十分优秀!