как избежать перекрестного скриптинг в «рубин на рельсах»Rails - как избежать Межсайтовый скриптинг
я использовал код ниже
и я хочу знать, как и где делать мы проверьте, работает ли этот скрипт или нет.
как избежать перекрестного скриптинг в «рубин на рельсах»Rails - как избежать Межсайтовый скриптинг
я использовал код ниже
и я хочу знать, как и где делать мы проверьте, работает ли этот скрипт или нет.
Вам следует избегать чего-либо в ваших представлениях, которые могут быть изменены третьей стороной, например атрибутами и параметрами.
Учитывая ваш пример, я создал пользователя с именем <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="#"><script type="text/javascript">alert("XSS")</script></a>
Клиент, просматривающий эту страницу с включенной поддержкой JavaScript, не будет видеть стандартное предупреждение.
Это метод, который вы можете использовать для проверки того, уязвимо ли представление к атаке сценариев межсайтового сайта.
Альтернативный вариант - рассмотреть возможность использования HAML. HAML может быть сконфигурирован так, чтобы всегда выводить вывод, если вы явно не попросите его быть сырым. Я убежден, что это будет поведение по умолчанию в Rails 3 с использованием ERb.
Все встроенные функции в Rails (например, link_to) уже выходят из вывода по умолчанию. Это также будет сделано по умолчанию для erb в Rails 3. – askegg
Параметр 'name' по умолчанию не экранирован. Доступны только параметры, которые оцениваются с помощью 'url_for'. –
Да - я должен был сделать это ясно :( – askegg
Если вы хотите добавить auto-escape в Rails 2.x, ознакомьтесь с руководством пользователя Michael Koziarski's rails_xss. Именно то, что вы ищете :)
Что вы подразумеваете под "check this script"? Использовать тесты? Запустить сервер и загрузить страницу в браузере? Кроме того, последняя версия Rails (и ранее) поддерживает такой код, как «<% = link_to @ user.name, @user%>». – askegg
, если вы назначаете как имя пользователя, а затем выводите результат #{@user.name} в отличие от # {h (@user .name)} вы увидите, что метод h() фактически выполняет html-экранирование. – Maulin