Как проще всего (framework / library / call) предотвратить межсайтовый скриптинг с помощью Google App Engine (GAE)? - PullRequest
0 голосов
/ 24 октября 2010

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

РЕДАКТИРОВАТЬ: Google App Engine дляJava

Ответы [ 4 ]

1 голос
/ 18 сентября 2011

Я сам работаю над тем же вопросом;но у меня еще не было возможности вывести его в реальный мир;поэтому, пожалуйста, имейте в виду, что МОЙ ОТВЕТ НЕ БЫЛ ПРОВЕРЕН.ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК.

Сначала вам нужно спросить себя, разрешаете ли вы пользователю использовать ЛЮБУЮ разметку HTML.Так, например, может ли пользователь ввести ссылку?Как насчет сделать жирный текст?

Если ответ НЕТ, то это довольно просто.Вот идея, как установить фильтр:

http://greatwebguy.com/programming/java/simple-cross-site-scripting-xss-servlet-filter/

Но лично мне не нравится фильтр, который используется в первом примере;Я просто поставил его там, чтобы показать вам, как настроить фильтр.

Я бы порекомендовал использовать этот фильтр:

http://xss -html-filter.sourceforge.net /

Итак, в основном:

  1. Настройте пример по первой ссылке, запустите его
  2. Загрузите пример по второй ссылке, вставьте его в свой проект втаким образом, вы можете получить к нему доступ из своего кода.
  3. Перепишите метод cleanXSS, чтобы использовать то, что вы скачали по второй ссылке.Так что, вероятно, что-то вроде:

    private String cleanXSS(String value) {
        return new HTMLInputFilter().filter( input );
    }
    

Если вы действительно хотите разрешить HTML (например, тег привязки / и т. Д.), То похоже, что HTMLInputFilter имеет механизмы, позволяющие это сделать;но это не задокументировано, поэтому вам придется выяснить это, взглянув на код самостоятельно или предоставив свой собственный способ фильтрации.

0 голосов
/ 19 сентября 2011

Вы также можете использовать сервис, который проксирует все соединения и блокирует любые попытки XSS. Я знаю только один такой сервис - CloudFlare (но это не значит, что других нет). К сожалению, функции безопасности входят в план Pro, который оплачивается: (

0 голосов
/ 19 сентября 2011

Большинство шаблонизаторов, включая django (который входит в состав App Engine), предоставляют средства для экранирования выходных данных, чтобы сделать их безопасными для печати в HTML. В новых версиях Django это делается автоматически, если вы не скажете этого; в 0.9.6 (все еще по умолчанию в веб-приложении) вы передаете свои выходные значения в шаблон |escape.

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

0 голосов
/ 18 сентября 2011

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

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

Например, если вы пишете общедоступный блокнот, который будет иметь в общей сложности 3 пользователя, вы можете избежать минимума, если, однако, вы пишете, что мы ненавидим Китай, Иран и все хакеры / взломщики, имеющие дело на сумму 1 000 000 долларов транзакций в час и 3 миллиардов пользователей, вы можете быть немного больше цели.

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

Я не проверял входящие строки Java на XSS, однако удаление HTML обычно достаточно хорошо, и Jsoup выглядит интересно для этого (см. Удаление тегов HTML из строки )

Также, чтобы убедиться, что вы должны обеспечить вывод того, что вы ожидаете выводить, а не какой-то JavaScript.

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