Turvatesti kokkuvõte - SilverReinaas/TarkvaraTehnika GitHub Wiki
Rakenduse URLide loetelu:
- POST: /auth/login, params: LoginData object
- POST: /addExercise, params: Exercise object
- POST: /addMeasureLog, params: MeasureLogData object
- GET: /getUserExercises, params: id
- GET: /getExerciseById, params: id
- GET: /getExerciseSets, params: exerciseId
- GET: /getDaySetsList, params: id
- GET: /getDaySetsListByPeriod, params: id, start, end
- GET: /getAllSetsList, params: id
- GET: /getAllSetsListByPeriod, params: id, start, end
- GET: /getExerciseSetsToday, params: id
- GET: /getUnitTypes
- GET: /getMuscles
- GET: /getMuscleSetsList, params: userId, start, end
- GET: /getExerciseStatistics, params: userId, exerciseId
- GET: /findAllBySetId, params: id
Turvariskide hindamine
SQL injektsioon
Välistatud, kuna meil on kasutusel Spring JPA ja Object-Relational Mapping - mis tähendab, et me ei pea kirjutama ise SQL lauseid, vaid defineerime objekte ja turvalisi SQL-e koostatakse Springi poolt taustal.
Üks näide: kui proovida panna mittenumbriline väärtus ";" eesmärgiga lõpetada eelmine päring ja teha SQL injection, siis see ei õnnestu.
2018-04-24 14:43:56.624 WARN 27012 --- [nio-8080-exec-7] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to bind request element: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: ";"
Kasutaja impersoneerimine
On küll võimalik, kuna esimeste rakenduste prototüübi tegemisel me pole keskendanud mittefunktsionaalsetele komponentidele nagu korralik autentimine ja sessiooni hoidmine back-endi pool. Lahendus oleks kasutada unikaalne juhuslik hash/sessiooni ID, et kasutajat autentida.
DDoS rünnak
Keerulisemaid lehte (nt. /exercise-details) laetakse >1 sekundiga. Mingit resursside (piltide jne) cache-imist ei ole. Seega veebileht on lihtsasti rünnatav.