html экранируется в link_to - PullRequest
       10

html экранируется в link_to

1 голос
/ 11 апреля 2011

Я пытаюсь реализовать ссылку, при нажатии которой вы отмечены как присутствующие на встрече. Эта ссылка является методом в помощнике:

  def link_to_remote_registration(event_id)
    down_image = "down_blanco.png"
    up_image   = "up_blanco.png"

    unless registration.nil?
      if registration.present == 1
        up_image = "up_filled.png"
      elsif registration.present == 0
        down_image = "down_filled.png"
      end
    end

    link_to_remote_registration = String.new 
    loading_and_complete = "Element.show('indicator_event_"+event_id.to_s+"'); Element.hide('vote_"+event_id.to_s+"')".html_safe
    complete = "Element.hide('indicator_event_"+event_id.to_s+"'); Element.show('vote_"+event_id.to_s+"')".html_safe

    link_to_remote_registration =
      link_to(image_tag(up_image , :id =>  'will_not_attend_event_'+ event_id.to_s , border => 0),
      :url =>  new_registration_path(:present  => 1, :event_id => event_id, :escape => false),
      :remote => true,
      :method => :put,
      :loading => loading_and_complete,
      :complete => complete)

    return link_to_remote_registration
  end

Проблема в том, что когда я отображаю ссылку в моем представлении, некоторые из html-кодов экранируются, из-за чего ссылка не работает.

<a href="/calendar?complete=Element.hide%28%27indicator_event_1%27%29%3B+Element.show%28%27vote_1%27%29&loading=Element.show%28%27indicator_event_1%27%29%3B+Element.hide%28%27vote_1%27%29&method=put&remote=true&url=%2Fregistrations%2Fnew%3Fevent_id%3D1%26present%3D1">
<img id="will_not_attend_event_1" border="0" src="/images/up_blanco.png?1198181114" alt="Up_blanco">
</a>

Который я считаю недействительным URL. Интересно, почему это происходит - я вызываю html escape для полной и загружаемой строки.

Привет

Ответы [ 2 ]

8 голосов
/ 11 апреля 2011

Поскольку вы передаете html от помощника, Rails очищает его для защиты от XSS. Вы можете переопределить его, вернув:

link_to_remote_registration.html_safe

http://railscasts.com/episodes/204-xss-protection-in-rails-3

0 голосов
/ 06 марта 2012

Вы также можете использовать raw () вместо отключения всей системы XSS.

raw(image_tag(up_image , :id =>  'will_not_attend_event_'+ event_id.to_s , border => 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...