uilscaping javascript in rails .rb文件/在ruby方法中返回js

时间:2011-01-21 01:07:18

标签: javascript ruby-on-rails

我在我的一个插件的方法中返回了以下js(在字符串文字中)。因此,当我调用该方法时,它将此放在我的视图中。问题出现在网站上,所有<, ", ', >等都被转义为&lt;, &quot;等等。我怎样才能做到这一点?我尝试了各种方法但似乎没有工作:/我认为这个插件可能有点旧,所以这在早期版本的Rails中是可能的......

%Q{<script type="text/javascript">
    $(function() {
        $('#{table_dom_id}').dataTable({
          "oLanguage": {
            "sSearch": "#{search_label}",
            #{"'sZeroRecords': '#{no_records_message}'," if no_records_message}
            "sProcessing": '#{processing}'
          },
          "sPaginationType": "full_numbers",
          "iDisplayLength": #{per_page},
          "bProcessing": true,
          "bServerSide": #{server_side},
          "bLengthChange": false,
          "bStateSave": #{persist_state},
          "bFilter": #{search},
          "bAutoWidth": #{auto_width},
          #{"'aaSorting': [#{sort_by}]," if sort_by}
          #{"'sAjaxSource': '#{ajax_source}'," if ajax_source}
          "aoColumns": [
                #{formatted_columns(columns)}
                    ],
            #{"'fnRowCallback': function( nRow, aData, iDisplayIndex ) { #{row_callback} }," if row_callback}
          "fnServerData": function ( sSource, aoData, fnCallback ) {
            aoData.push( #{additional_data_string} );
            $.getJSON( sSource, aoData, function (json) {
                    fnCallback(json);
                } );
          }
        })#{append};
    });
    </script>}

感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:4)

这经常被问到。你需要告诉Rails不要以两种方式逃脱字符串:

  1. <%= 'string'.html_safe %>
  2. <%= raw 'string' %>
  3. 在大多数情况下,首选是首选,因为它更灵活。例如,您可以在定义字符串时将其标记为HTML-Safe,然后如果某些内容修改它,它将自动标记为不安全。这样可以避免意外打开自己的漏洞。

    然而,将代码移动到某种视图中会更好。你应该避免在你的方法中输出。对于帮助者,有限的输出代码是最好的(通常只是片段)。

答案 1 :(得分:0)

Rails会自动转义html以防止XSS攻击。你有两个选择:

# Provided that my_escaped_string is what you want to display
<%= my_escaped_string.html_safe %>
<%= raw my_escaped_string %>

您也可以在任何方法中使用html_safe