# HU:Sch1 - Final Test
### 1. Which resources has the same origin with: `https://site.com`?
- [x] https://site.com:443
- [ ] http://site.com:443
- [x] `javascript:alert(1)` from `https://site.com:443`
- [ ] `about:blank` from `https://site.com:8443`
- [ ] `data:text/plain,Hello` from `https://site.com`
same origin учитывает схему, домен и порт. Для https 443 - порт по умолчанию.
### 2. Which resources has the same origin with page at `https://site.com` that set `document.domain = 'site.com'`?
- [ ] page at `https://site.com`
- [x] page at `https://site.com:8443` that set `document.domain = document.domain`
- [x] page at `https://sub.site.com` that set `document.domain = 'site.com'`
- [ ] page at `https://site.co` that set `document.domain = 'site.com'`
После установки document.domain поддомены и ресурсы на других портах считаются тем же origin. При этом врождённый и присвоенный домен считаются разными даже если они с одинаковыми значениями.
### 3. Will this code produce preflight request? Page location: `https://site.com`.
```javascript=
fetch('https://auth.site.com')
```
- [ ] Yes
- [x] No
Простые запросы не производят preflight.
### 4. Will this code produce preflight request? Page location: `https://site.com`.
```javascript=
fetch('https://api.site.com', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
})
```
- [x] Yes
- [ ] No
Отправка json является сложным запросом, вызывающим preflight.
### 5. Will this code produce preflight request? Page location: `https://site.com`.
```javascript=
fetch('https://site.com', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + TOKEN
}
})
```
- [ ] Yes
- [x] No
Preflight отправляется только в случае с cross-origin запросами.
### 6. Server answered to preflight request with this headers. Does this allow User-Agent to make a main request with credentials?
```http
HTTP/1.1 200 OK
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
...
```
- [ ] Yes
- [x] No
Access-Control-Allow-Origin: * запрещает присылать credentials даже при наличии соответствущего заголовка.
### 7. Which HTML snippets will NOT invoke violation due to CSP? Page origin is: `https://site.com`
```java=
Content-Security-Policy:
default-src 'self' https:;
img-src *;
frame-ancestors 'none'
```
- [x] `<img src="https://s3.img.com/12345.jpg" \>`
- [x] `<script src="https://cdn.jquery.com" \>`
- [x] `<iframe src="https://auth.site.com/authn">`
- [ ] `<img src="/logo.jpg" onclick="reload"\>`
Данная настройка CSP разрешает загружать изображения из любых источников. onclick - event handler, который блокируется. Остальное - можно загружать если используется протокол https либо тот же домен.
### 8. Which resources are "same site" with: `https://heroku.com` (eTLD)?
- [x] http://heroku.com
- [x] https://heroku.com:8443
- [ ] https://jack.heroku.com
- [ ] https://heroku.net
Same-site учитывает домен высшего уровня и одну из частей, стоящих слева (ближе всего к домену). При этом heroku.com зарегистрирован как домен высшего уровня и поэтому поддомены также берутся во внимание, из-за чего разные поддомены не считаются same-site.
### 9. When `secret` cookie will be sent?
```http
HTTP/1.1 200 OK
Set-Cookie: secret=...; Domain=site.com; Secure; HttpOnly
```
- [x] `<img src="https://site.com/background.jpg" \>` at `https://auth.site.com`
- [ ] `<img src="https://site.com/background.jpg" \>` at `https://cite.com`
- [x] when user clicks on `<a href="https://site.com/news>News</a>` at `https://habr.com/en/post/549844/`
- [x] when user clicks on `<a href="https://site.com/news>News</a>` at `https://site.com/main`
При переходе пользователя по ссылке секрет из куки отправляется как если бы пользователь просто зашёл на сайт.
### 10. `X-Frame-Options: SAMEORIGIN` applies to the whole chain of frames?
- [ ] Yes
- [ ] No
- [x] Depends on browser
В зависимости от браузера, это применяется либо к верхнему уровню, либо к родителям, либо ко всей цепочке.
### 11. What is `Refer` header value in request from `https://site.com/auth?token=...` to `https://cite.com`?
- [ ] not sent
- [x] https://site.com
- [ ] https://site.com/auth?token=...
По умолчанию полный путь отправляется только на тот же origin. В данном случае запрос отправляется на другой origin, так что путь в заголовке не будет указан.
### 12. What is `Refer` header value in request from `https://site.com/auth?token=...` to `http://cite.com`?
- [x] not sent
- [ ] https://site.com
- [ ] https://site.com/auth?token=...
Если исходная страница получена по https, при запросе на http этот заголовок не отправляется.
### 13. Which hashing algorithms has embedded salt generation?
- [x] PBKDF2
- [x] Bcrypt
- [ ] Dcrypt
- [ ] SHA-1
Dcrypt не существует, а в SHA-1 не предусмотрено автоматическое соление пароля.
### 14. Which factors may be SECOND factor to password?
- [ ] PIN
- [ ] Security questions
- [x] Software TOTP
- [x] mTLS
PIN и вопросы относятся к той же области, что и пароль - Something you know, в то время как TOTP и mTLS - Something you have.
### 15. Which factors may be SECOND factor to SMS?
- [x] Iris scan
- [x] Security questions
- [ ] Hardware OTP
- [ ] mTLS
Аналогично предыдущему - SMS, TLS и HOTP относится к Something you have, вопросы - Something you know, а сканирование сетчатки глаза к Something you are.
### 16. Name the universal countermeasure agaist Brute Force, Credential Stuffing and Password Spraying attacks.
- [x] MFA
- [ ] Account lockout
- [ ] CAPTCHA
- [ ] Device Tokens
Если злоумышленник получил доступ к авторизационным данным пользователя, наверняка от этого сможет защитить только применение второго фактора.
### 17. What is the minimum recommended amount of entropy for random session ID?
- [ ] 32 bit
- [x] 64 bit
- [ ] Sega Mega Drive 16 bit
- [ ] 128 bit
64 бита энтропии - минимально допустимая величина, но лучше не скупиться и дать 128.
### 18. What statements about RBAC and DAC entities are true?
- [ ] DAC groups and RBAC roles are the same.
- [x] Sometimes RBAC roles may be modelled by DAC groups.
- [ ] RBAC supports data-based access control.
- [x] DAC implemets more fine-grained access control.
Отличие групп от ролей в том, что между ролями есть связи, а между группами нет. Всё остальное проистекает из этого различия.
### 19. Name this OAuth2 Flow.

- [ ] Authorization Code Flow
- [x] Implicit Flow
- [ ] Resource Owner Password Credentials Grant
- [ ] Client Credentials Grant
Эта схема соответствует Implicit Flow.
### 20. Name this OAuth2 Flow.

- [x] Authorization Code Flow
- [ ] Implicit Flow
- [ ] Resource Owner Password Credentials Grant
- [ ] Client Credentials Grant
Эта схема соответствует Authorization Code Flow.
### 21. Is it required for mobile application to have both `client_id` and `client_secret` for OAuth2?
- [ ] Yes
- [x] No
Для мобильных приложений используется PKCE, в котором нет client_secret.
### 22. What is universal countermeasure against `Insufficient Redirect URI Validation`, `Credential Leakage via Referer` and `Authorization Code Injection`?
- [x] Proof Key for Code Exchange
- [ ] `state` validation
- [ ] Usage of complete redirect URIs
Использование цельных URI защищает только от Insufficient Redirect URI Validation, а state валидация используется для защиты от инъекции авторизационного кода.
### 23. Do JWT or PASETO tokens fit for stateless session management?
- [ ] Yes
- [x] No
Отсутствует возможность инвалидировать токен без непосредственного им обладания.
### 24. Select valid statements about deserialization.
- [x] Native formats usually offer more features than standardized platform agnostic ones.
- [ ] Remote Code Execution vulnerabilities may arise only in the context of Native Deserialization.
- [x] The main problem with deserialization is the presense of type annotations in raw data.
- [ ] There is only field-based way of deserialization.
Существует множество способов получить RCE, и десериализация - только один из них.
### 25. Select countermeasures against Mass Assignment.
- [x] Deserialization to DTO.
- [ ] Modelling structured data with non-structured data structures.
- [ ] Binding to richer model.
Mass Assignment подразумевает, что данные десериализуются в объект класса, в котором больше полей, чем было сериализовано. Из-за этого злоумышленник может расширить сериализованную строку и при десериализации добавленные им данные будут записаны наравне с легитимными. DTO - объект, содержащий только те поля, которые должны быть получены в данный момент времени.
### 26. How to simplify free-form text validation?
- [x] Unify encoding.
- [x] Apply normalization.
- [ ] None of the above.
Унификация используемой кодировки и избавление от недопустимых символов упрощает дальнейшую валидацию.
### 27. Does this regular expression vulnerable to ReDoS?

- [x] Yes
- [ ] No
Цикл в цикле, считывающий любой символ, а потом "а" является ловушкой для жадного алгоритма, из-за чего сложность может доходить до O(n^2)
### 28. Does this regular expression vulnerable to ReDoS?

- [x] Yes
- [ ] No
Пробельный символ тоже подпадает под понятие "любой", то есть в данном случае переход из одного состояния в другое может быть осуществлён по двум путям, и этот переход находится в цикле.
### 29. What is the main reason of Injection vulnerabilities emergence?
- [ ] Lack of input validation.
- [x] Lack of context-based output encoding.
Проблема заключается не в пользовательском вводе, а в результате его обработки.
### 30. Treat code at picture as template with injection point at `<INJECTION_POINT>`. Select amount of injection contexts.
```htmlembedded=
<script>
val session_data = "<INJECTION_POINT>";
</script>
```
- [ ] 0
- [ ] 1
- [x] 2
- [ ] 3
HTML и JavaScript.
### 31. Choose best storage location for user uploaded files.
- [x] Different host
- [ ] Database
- [ ] Application web root
С другого хоста файлы пользователя не смогут навредить приложению, даже если являются вредоносными.
### 32. Select reasons why it is required to isolate processing of complex data format documents?
- [x] Used third-party libraries may have unknown vulnerabilities.
- [x] Used third-party libraries typically are more powerful then required for web application.
- [x] Such documents may contain malicious payloads.
- [ ] None of the above.
Слишком мощные библиотеки открывают злоумышленникам дополнительные возможности.