---
# System prepended metadata

title: 'HU:Sch1 - Final Test'

---

# 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.

![](https://i.imgur.com/BQ3SAcT.png)

- [ ] Authorization Code Flow
- [x] Implicit Flow
- [ ] Resource Owner Password Credentials Grant
- [ ] Client Credentials Grant

Эта схема соответствует Implicit Flow.


### 20. Name this OAuth2 Flow.

![](https://i.imgur.com/LdT835Q.png)

- [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?

![](https://4wv1k4h4ec.a.trbcdn.net/userphotos/800/fbefcf6b-22e2-4b0b-90a9-abd0a78e10ed.jpg?1617362273596)

- [x] Yes
- [ ] No

Цикл в цикле, считывающий любой символ, а потом "а" является ловушкой для жадного алгоритма, из-за чего сложность может доходить до O(n^2)


### 28. Does this regular expression vulnerable to ReDoS?

![](https://4wv1k4h4ec.a.trbcdn.net/userphotos/800/ecab4cac-bc91-4dac-8fdf-bdd92f53e58b.jpg?1617362273598)

- [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.

Слишком мощные библиотеки открывают злоумышленникам дополнительные возможности.