Я занимаюсь разработкой веб-приложения и столкнулся с некоторыми проблемами безопасности.
В моем приложении пользователи могут отправлять сообщения и видеть чужие сообщения (например, на доске объявлений). Я проверяю все поля формы, которые пользователи могут отправлять в мое приложение.
Есть несколько очень простых полей, таких как «никнейм», которые могут содержать 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? Или другое решение, которое я могу использовать?