2009-08-20 6 views
0

как избежать перекрестного скриптинг в «рубин на рельсах»Rails - как избежать Межсайтовый скриптинг

я использовал код ниже

и я хочу знать, как и где делать мы проверьте, работает ли этот скрипт или нет.

+0

Что вы подразумеваете под "check this script"? Использовать тесты? Запустить сервер и загрузить страницу в браузере? Кроме того, последняя версия Rails (и ранее) поддерживает такой код, как «<% = link_to @ user.name, @user%>». – askegg

+0

, если вы назначаете как имя пользователя, а затем выводите результат #{@user.name} в отличие от # {h (@user .name)} вы увидите, что метод h() фактически выполняет html-экранирование. – Maulin

ответ

2

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

Учитывая ваш пример, я создал пользователя с именем <script type="text/javascript">alert("XSS")</script>. Предполагая, что вы только подтверждаете наличие имени, это будет действительным.

<!-- Raw output --> 
<a href="#"><script type="text/javascript">alert("XSS")</script></a> 

Клиент, просматривающий эту страницу с включенным JavaScript, будет видеть стандартное предупреждение. Это демонстрирует, что я могу добавить JavaScript для своего просмотра.

<!-- Escaped output --> 
<a href="#">&lt;script type=&quot;text/javascript&quot;&gt;alert(&quot;XSS&quot;)&lt;/script&gt;</a> 

Клиент, просматривающий эту страницу с включенной поддержкой JavaScript, не будет видеть стандартное предупреждение.

Это метод, который вы можете использовать для проверки того, уязвимо ли представление к атаке сценариев межсайтового сайта.

Альтернативный вариант - рассмотреть возможность использования HAML. HAML может быть сконфигурирован так, чтобы всегда выводить вывод, если вы явно не попросите его быть сырым. Я убежден, что это будет поведение по умолчанию в Rails 3 с использованием ERb.

+0

Все встроенные функции в Rails (например, link_to) уже выходят из вывода по умолчанию. Это также будет сделано по умолчанию для erb в Rails 3. – askegg

+0

Параметр 'name' по умолчанию не экранирован. Доступны только параметры, которые оцениваются с помощью 'url_for'. –

+0

Да - я должен был сделать это ясно :( – askegg

0

Если вы хотите добавить auto-escape в Rails 2.x, ознакомьтесь с руководством пользователя Michael Koziarski's rails_xss. Именно то, что вы ищете :)

Смежные вопросы