Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8f3f6bb

Browse files
committed
Prevent XSS injection through user metadata
1 parent 5573057 commit 8f3f6bb

File tree

2 files changed

+26
-2
lines changed

2 files changed

+26
-2
lines changed

‎logicaldoc-core/src/main/java/com/logicaldoc/core/security/user/HibernateUserDAO.java‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.logicaldoc.i18n.I18N;
3232
import com.logicaldoc.util.StringUtil;
3333
import com.logicaldoc.util.config.ContextProperties;
34+
import com.logicaldoc.util.html.HTMLSanitizer;
3435
import com.logicaldoc.util.security.PasswordCriteria;
3536
import com.logicaldoc.util.security.PasswordValidator;
3637
import com.logicaldoc.util.spring.Context;
@@ -210,6 +211,8 @@ public void store(User user, UserHistory transaction) throws PasswordAlreadyUsed
210211

211212
validateUsernameUniquenes(user, newUser);
212213

214+
sanitize(user);
215+
213216
if (user.getType() == UserType.SYSTEM)
214217
user.setType(UserType.DEFAULT);
215218

@@ -272,6 +275,26 @@ public void store(User user, UserHistory transaction) throws PasswordAlreadyUsed
272275
saveEnabledOrDisabledHistory(user, transaction, enabledStatusChanged);
273276
}
274277

278+
/**
279+
* Sanitizes the text properties of a user
280+
*
281+
* @param user the user to sanitize
282+
*/
283+
private void sanitize(User user) {
284+
user.setName(HTMLSanitizer.sanitizeSimpleText(user.getName()));
285+
user.setFirstName(HTMLSanitizer.sanitizeSimpleText(user.getFirstName()));
286+
user.setCity(HTMLSanitizer.sanitizeSimpleText(user.getCity()));
287+
user.setBuilding(HTMLSanitizer.sanitizeSimpleText(user.getBuilding()));
288+
user.setCompany(HTMLSanitizer.sanitizeSimpleText(user.getCompany()));
289+
user.setCountry(HTMLSanitizer.sanitizeSimpleText(user.getCountry()));
290+
user.setDepartment(HTMLSanitizer.sanitizeSimpleText(user.getDepartment()));
291+
user.setPostalcode(HTMLSanitizer.sanitizeSimpleText(user.getPostalcode()));
292+
user.setState(HTMLSanitizer.sanitizeSimpleText(user.getState()));
293+
user.setStreet(HTMLSanitizer.sanitizeSimpleText(user.getStreet()));
294+
user.setTelephone(HTMLSanitizer.sanitizeSimpleText(user.getTelephone()));
295+
user.setTelephone2(HTMLSanitizer.sanitizeSimpleText(user.getTelephone2()));
296+
}
297+
275298
private void validateUsernameUniquenes(User user, boolean newUser) throws PersistenceException {
276299
if (newUser && findByUsernameIgnoreCase(user.getUsername()) != null)
277300
throw new PersistenceException(String.format(

‎logicaldoc-core/src/test/java/com/logicaldoc/core/security/user/HibernateUserDAOTest.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,13 +198,12 @@ public void testFindByUserNameAndName() throws PersistenceException {
198198

199199
@Test
200200
public void testStore() throws PersistenceException, NoSuchAlgorithmException {
201-
202201
String pswd = PasswordGenerator.generate(12, 2, 2, 2, 2, 2, 2);
203202
User user = new User();
204203
user.setUsername("xxx");
205204
user.setDecodedPassword(pswd);
206205
user.setName("claus");
207-
user.setFirstName("valca");
206+
user.setFirstName("<h1>valca</h1>");
208207
user.setEmail("valca@acme.com");
209208

210209
WorkingTime wt = new WorkingTime(1, 5, 30);
@@ -217,6 +216,8 @@ public void testStore() throws PersistenceException, NoSuchAlgorithmException {
217216
testSubject.store(user, transaction);
218217
assertNotNull(groupDao.findByName(user.getUserGroupName(), 1));
219218

219+
assertEquals("valca", user.getFirstName());
220+
220221
user = testSubject.findById(user.getId());
221222
testSubject.initialize(user);
222223
user.addGroup(groupDao.findById(1L));

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /