Решения по защите сайтов Java (особенно XSS) - PullRequest
4 голосов
/ 10 марта 2010

Я занимаюсь разработкой веб-приложения и столкнулся с некоторыми проблемами безопасности.

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

Есть несколько очень простых полей, таких как «никнейм», которые могут содержать 6-10 буквенных символов или время отправки сообщения, которое отправляется пользователям в виде строки, а затем (когда пользователи запрашивают сообщения, "моложе" или "старше" даты) Я анализирую это с помощью SimpleDateFormat (я занимаюсь разработкой на языке Java, но мой вопрос касается не только Java).

Большая проблема - это поле сообщения. Я не могу ограничить его только буквенными символами (прописными или строчными), потому что мне приходится иметь дело с некоторыми часто используемыми символами, такими как ", ', /, {,} и т. Д. (Пользователи не будут удовлетворены, если система не не позволяйте им использовать эти вещи)

Согласно этому http://ha.ckers.org/xss.html, существует множество способов, которыми люди могут «взломать» мой сайт. Но мне интересно, есть ли способ, чтобы предотвратить это? Не все, потому что нет 100% защиты, но я бы хотел решение, которое защитит мой сайт.

Я использую сервлеты на стороне сервера и jQuery на стороне клиента. Мое приложение является "полным" AJAX, поэтому пользователи открывают 1 JSP, затем все данные загружаются и обрабатываются jQuery с использованием JSON. (да, я знаю, что он не дружит с пользователями, но это 2010 год, верно? :-)) Я знаю, что проверка интерфейса не достаточно. Я хотел бы использовать 3 слоя проверки: - 1. интерфейс, JavaScript проверяет данные, а затем отправляет на сервер - 2. на стороне сервера, та же проверка, если есть что-то, чего не должно быть (из-за JavaScript на стороне клиента), я запрещаю пользователю - 3. если есть что-то, что я не смог уловить ранее, процесс рендеринга обрабатывает и рендерит соответственно

Есть ли какое-либо решение "из коробки", особенно для Java? Или другое решение, которое я могу использовать?

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Чтобы минимизировать атаки XSS, важно закодировать любые данные поля, прежде чем вернуть их на страницу. Как изменить> на> и так далее. Это никогда не позволит выполнять вредоносный код при добавлении на страницу.

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

Более того, поскольку вы используете Ajax, это дает вам некоторую защиту, поскольку люди не могут переопределять значения в параметрах URL и т. Д.

1 голос
/ 06 мая 2010

Посмотрите на библиотеку AntiSamy . Он позволяет вам определять наборы правил для вашего приложения, а затем запускать пользовательский ввод через AntiSamy, чтобы очистить его согласно вашим правилам.

0 голосов
/ 10 марта 2010

Самый простой способ - это сделать простую замену для следующего <с & lt; <br> > с & gt;
'с \'

Это решит большинство проблем с базами данных.

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