2012-06-07 2 views
1

Как остановить скрипт от выполнения в JavaScript? В случае атак на межсайтовый скриптинг (XSS) основными требованиями являются инжекция + выполнение скрипта.Есть ли способ «остановить сценарий» от запуска с использованием JavaScript?

Представьте себе ситуацию, когда злоумышленник может инъекционные JavaScript на странице & наша цель состоит в том, чтобы остановить скрипт атакующего от исполнения. Точкой впрыска в качестве примера может быть любая пользовательская область ввода.

+1

Вы не можете. Посылка - это * уже введенная *. Пользователь может полностью отключить JavaScript, но это еще одна история :) –

+0

Кажется гораздо лучше атаковать точку инъекции, а не пытаться обнаружить все способы выполнения JavaScript после того, как был нанесен урон. –

ответ

0

Всегда всегда избегайте ввода. Для XSS используйте htmlentities(), чтобы избежать HTML и JS. Вот хорошая статья на PHP Security

http://www.phpfreaks.com/tutorial/php-security

+4

Нет, espace ваш * выход *. Это меньше хлопот, и результат тот же. –

0

Есть в основном две вещи, чтобы быть осторожным при работе с XSS:

  1. Побег свой выход. Выход из входных данных требует больше ресурсов ни для чего. Избегайте вывода контента, предоставленного пользователем. Это также означает, что в вашей базе данных небезопасный контент, что хорошо (в случае ложных срабатываний вы можете исправить это, не теряя содержимого, в случае новой политики XSS вам не нужно изменять всю вашу базу данных, и т.д).
  2. Защитите свой javascript-код. Будьте очень осторожны, чтобы не включать некоторые недостатки, используя eval() или что-то в этом роде.
0

Как было сказано, лучший и самый простой способ защитить себя от XSS - это проверка ввода и правильное удаление вывода в зависимости от точки вставки (HTML, скорее всего, с объектами или блоками JavaScript/CSS - маловероятно и более трудно правильно убежать).

Однако, если ваш случай использования выводит необработанный ввод пользователя, который, как предполагается, содержат произвольный HTML и вы просто хотите, чтобы предотвратить впрыскивается JavaScript возиться с вашим сайтом, вы можете:

1) Скадрируйте содержание другой, уникальный домен (поэтому он не может передавать файлы cookie с вашим основным документом), например xyz123.usercontent.com (с любым xyz123 для любого пользователя) 2) Подождите, и/или директива Sandbox Sandware будет стандартизирована в каждом поддерживаемом вами браузере (и, конечно же, отказе в доступе к неуправляемым браузерам).

0

Ваше единственное решение - предотвращать впрыскивание сценариев. Для этого можно сделать несколько действий:

  1. Не доверяйте вводам пользователя. Это означает, что входные данные формы, параметры строки запроса, содержимое cookie или любые другие данные, полученные из входящего запроса.
  2. Санируйте все, что вы делаете, везде, где вы его визуализируете. Мне нравится делать это с помощью двух четко обозначенных функций рендеринга в шаблонах, render и render_unsafe. Rails имеет аналогичный интерфейс с 3.0, который дезактивирует все данные шаблона, если вы специально не запрашиваете неаналитированный рендеринг. Наличие четко названного интерфейса упростит проверку ваших шаблонов и гарантирует, что исключаемые визуализации исключают, что вы принимаете решение каждый раз, когда вы отправляете данные в шаблон.
  3. Если вы должны разрешить пользователю выполнять функции напрямую, всегда делайте это через белый список. Попросите их указать имя функции или какой-либо другой идентификатор в виде строки и их аргументы как JSON или какую-либо другую конструкцию синтаксического анализа. Взгляните на дизайн системы Template для Shopify's Liquid, в которой используется аналогичный шаблон с белым списком.
  4. Не доверяйте ни одному пользователю от пользователя. Никогда не.
+0

Хотя хороший совет, 1-й и 4-й пункты не связаны с XSS (так, как вы не проверяете ввод), а скорее для SQL-инъекций. –

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