освобождение javascript в rails .rb файле / возвращение js в методах ruby - PullRequest
3 голосов
/ 21 января 2011

У меня есть следующий 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 ]

4 голосов
/ 21 января 2011

Это часто спрашивают.Вы должны указать Rails не экранировать строку одним из двух способов:

  1. <%= 'string'.html_safe %>
  2. <%= raw 'string' %>

Первый предпочтителен вв большинстве случаев, поскольку он более гибкий.Например, вы можете пометить строку как HTML-Safe, когда она определена, а затем, если что-то ее изменит, она автоматически будет помечена как небезопасная.Это хорошо, чтобы избежать случайного открытия себя для эксплойта.

Однако , было бы лучше переместить этот код в какое-то представление.Вы должны избегать использования вывода в ваших методах.В случае помощников лучше всего использовать ограниченный выходной код (обычно это просто фрагменты).

0 голосов
/ 21 января 2011

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 в любом методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...