- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
<form>
<input name=userid type=text>
<input name=password type=text>
<input name=email text=text>
<input type=submit>
</form>
public class User {
private String userid;
private String password;
private String email;
private boolean isAdmin;
//Getters & Setters
}
@RequestMapping(value = "/addUser", method = RequestMethod.POST)
public String submit(User user) {
userService.add(user);
return "successPage";
}
Более того: эта уязвимость встречается очень часто.
PS. Ещё одна: habrahabr.ru/post/340066
А вообще, там же должен быть какой-то механизм для валидации перед записью в базу, иначе и в логин всякой херни понасуют.
А вот в сторону хтмл - вполне возможно. Ну как минимум ник с невидимыми пробелами, чтобы под кого-то другого косить. Или RTLом вёрстку пидорасить. Ну или с zalgo пофаниться на худой конец.
Эскейпить надо перед выводом.
Перед выводом в HTML надо превращать в entities.
Перед выводом в PDF не нужно.
Это совсем не значит что в базе надо запрещать что-то хранить
Заведёт кто-нибудь учётку SemaReal и будет от твоего имени постить всяких гомонигров. Ничего страшного же?
Или зарегается как SemaReal и распидорасит разметку.
Всё-таки для многих полей стоит задать разумные ограничения, даже если всё корректно эскейпится на выводе.
но запрещать символ в модели просто потому что он один из вью (пусть и самый важный) его не умеет -- это фейл
Здесь тонкая грань, блин...
Для тех же сообщений или описаний товаров - да, согласен. Пусть вьюха сама разбирается с этим говном.
Но писать функцию, которая делает визуальное сравнение джвух юникодных строк, сложно и дорого. Имхо, ограничение на допустимые символы в userid'е будет разумным компромиссом.
все что старше 127 точно нахуй
Тоже самое я делаю для полей с емейлом. Им тоже не нужны символы за пределами a-zA-Z_0-9-.
Начальник! Начальник, бля! Уберите от меня этого мудака!!! Идите мойте его, нахуй, я с ним здесь сидеть не буду, блядь!
У тебя почта в домене .рф?
Может быть, у него в юзернейме плюсик или ещё какой-нибудь символ?
Вообще говоря перед собачкой можно что угодно, но SMTP должен уметь проходить через семибитные кодировки и это надо учитывать.
Но если ты точно знаешь что он не пойдет через них (например потому что ты шлешь почту на тот же сервер) то пиши что угодно: главное чтобы сервер понял
Они укладываются в семибитную кодировку, но не проходят через некоторые самопальные фильтры.
Годится для проверки адресанта на трезвость или защиты от подбора адреса спамерами по словарю.
Регулярка для проверки адреса занимает четверть листа A4, и редко когда используется.
>>C=CA/ADMD=TELE
Запахло LDAP / X.500
>>user%host
Запахло еще какой-то древней почтовой сетью, чем-то типа UUCP.
она как раз уникодная
UTF16 - ересь!
"koi8-r"
"win-1251"
"mac-cyr"
чтобы пользователь сам выбирал
я всегда так делаю
так было много, много лет назад
Там учат писать код с XSS и SQL инъекциями