XSS, or Cross-Site Scripting, is one of the most common vulnerabilities found in applications. In bug bounty programs of different organizations, XSS consistently ranks as the most common vulnerability found. Today, let’s learn how these attacks work, how they manifest in code, and how to prevent them in your programming language. Let’s dive right in!
Anatomy of an XSS attack
XSS happens whenever an attacker can execute malicious scripts on a victim’s browser.
Applications often use user input to construct web pages. For example, a site might have a search functionality where the user can input a search term, and the search results page will include the term at the top of the results page. If a user searches “abc”, the source code for that page might look like this:
You searched for abc; here are the results!
But what if that application cannot tell the difference between user input and the legitimate code that makes up the original web page?
Attackers might be able to submit executable scripts and get that script embedded on a victim’s webpage. These malicious scripts can be used to steal cookies, leak personal information, change site contents, or redirect the user to a malicious site. There are three main types of XSS attacks: reflected XSS, stored XSS, and DOM XSS.
Reflected XSS
For example, if the application also allows users to search via URLs:
If an attacker can trick victims into visiting this URL:
The script in the URL will become embedded in the page the victim is visiting, making the victim’s browser run the JS code contained within the tags. This is called a “reflected XSS” attack.
You searched for ; here are the results!
Stored XSS
During a stored XSS attack, the attacker places the malicious script into a database before it gets returned to the victim. Let’s say that example.com also allows users to post status updates for others to see. An attacker can post this status update:
This malicious script will become embedded on the attacker’s profile page, attacking anyone who visits the attacker’s profile page.
DOM XSS
Finally, DOM-based XSS is similar to reflected XSS, except that in DOM-based XSS, the user input never leaves the user’s browser. Since the malicious input is never sent to the server, this type of XSS is harder to detect and prevent.
As in reflected XSS, attackers submit DOM-based XSS payloads via the victim’s user input. Unlike reflected XSS, a DOM-based XSS script doesn’t require server involvement, because it executes when user input modifies the source code of the page in the browser directly. Say a website allows the user to change their locale by submitting it via a URL parameter:
The URL parameter isn’t submitted to the server. Instead, it’s used to change the language of the webpage by a client-side script of the application. But if the website doesn’t validate the user-submitted parameter, an attacker can trick victims into visiting a URL like this one:
The site will embed the payload on the user’s web page, and the victim’s browser will execute the malicious script.
Defeating XSS
The key to preventing XSS is output encoding. You should never insert user-submitted data directly into an HTML document. Instead, you should encode any untrusted input that ends up on an HTML page so that browsers know the input should be treated as content and not raw HTML. This will make sure that attackers cannot influence the way browsers interpret the information on the page by submitting dangerous characters or character sequences. For example, if someone submits , browsers should treat
and
as user content, not HTML script tags.
To prevent XSS, you should encode characters that have special meaning in HTML, such as the &
character, angle brackets, single and double quotes, and the forward-slash character. In our example, you can encode the left and right angle brackets can be encoded into HTML characters < and > to prevent browsers from treating the content as script tags.
However, there are many ways attackers can use to smuggle executable Javascript code into a victim’s browser. And a blocklist-based encoding scheme like this one might miss a few characters that will allow attackers to achieve XSS. So, it might be worth it to consider stricter approaches to input validation. For example, you can validate user input against a list of allowed values, or only allow a limited set of characters (such as only alphanumeric characters in usernames) in user input.
The prevention of DOM-based XSS requires a different approach. Since the malicious user input won’t pass through the server, sanitizing the data that enters and departs from the server won’t work. Instead, you should avoid rewriting the HTML document based on user input, and implement client-side input validation before user input is inserted into the DOM.
Defense in Depth
You can also take measures to mitigate the impact of XSS flaws if they do happen. First, set the HttpOnly
flag on sensitive cookies that your site uses. This prevents attackers from stealing cookies via XSS. You should also implement the Content-Security-Policy
HTTP response header. This header lets you restrict how resources such as JavaScript, CSS, or images load on your web pages. To prevent XSS, you can instruct the browser to execute only scripts from a list of sources.
Preventing XSS in your Programming Language
Now, let’s talk about how you can prevent XSS vulnerabilities in your programming language!
Java
If you are using Java Server Pages (JSP), you need to be aware that JSP templates do not escape dynamic content by default. Let’s say that you want to display a message this way:
${message}
You will need to use the
tag or fn:escapeXml()
function to escape potentially dangerous content in untrusted input:
${fn:escapeXml(message)}
Python
Most Python template languages will take care of output encoding for you. For example, Jinja2 will automatically encode any input placed within curly braces. This should prevent XSS in most cases.
Node.js
Most Javascript template languages escape dynamic content by default. For example, the Nunjucks template language will automatically escape anything between curly braces:
This will output in HTML:
C#
The Razor template language that uses C# automatically escapes dynamic content automatically and protects against most potential XSS attacks:
string message = ““;
}
@message
This code will render the HTML code:
<script>alert(1)</script>
Go
The Go package html/template
will automatically escape dynamic content, protecting you from most XSS:
{{define "T"}}{{.}}{{end}}
)err = t.ExecuteTemplate(out, “T”, ““)
This code will write the escaped string <script>alert(1)</script> to the output variable out
.
On the other hand, the "text/template"
package does not offer this protection.
Scala
Most template languages in Scala will also encode dynamic content by default. For instance, in the Play framework, this user input will be displayed safely:
@(user-input)
Overriding Safe Defaults
For each template language that automatically encodes dynamic content, there are ways of overriding the safe default, which might render the application vulnerable. And if you are constructing HTML code manually from user input and not using templates to render dynamic content, then you’ll need to find a way to encode the user input before inserting it into HTML strings. See our vulnerability database (TODO: add vulnerability database link) for some example scenarios that might make an application vulnerable and for some tips for escaping content manually in different programming languages.
文章来源于互联网:XSS Prevention Cheatsheet
发布者:小站,转转请注明出处:http://blog.gzcity.top/4274.html
评论列表(28条)
kotor house for sale Montenegro real estate
Займ 300 000 тенге Займ 100 000 тенге
Экспресс займ Sravnim.kz
buy priligy in the usa 2 10 5 and a lower risk of type 2 diabetes odds ratio OR equivalent to 1 mm Hg lower SBP 0
прокат сноубордов поляна прокат сноубордов красная Красная Поляна
нарколог на дом вывод из запоя на дому [url=https://mozaisk.anihub.me/viewtopic.php?id=4366/]https://mozaisk.anihub.me/viewtopic.php?id=4366/[/url] .
вывод из запоя ростов на дону на дому [url=https://www.klin.0pk.me/viewtopic.php?id=4399]вывод из запоя ростов на дону на дому[/url] .
вывод из запоя в воронеже [url=https://www.superjackson.ukrbb.net/viewtopic.php?f=28&t=9734]https://www.superjackson.ukrbb.net/viewtopic.php?f=28&t=9734[/url] .
вывод из запоя в стационаре воронежа [url=http://www.bisound.com/forum/showthread.php?p=1218353/]вывод из запоя в стационаре воронежа[/url] .
лечение запоев на дому [url=www.ximki.ukrbb.net/viewtopic.php?f=12&t=3702]www.ximki.ukrbb.net/viewtopic.php?f=12&t=3702[/url] .
центр оценки условий труда аккредитованные организации по специальной оценке условий труда москва
кем проводится соут в москве https://sout213.ru
вывод из запоя на дому екатеринбург [url=www.zal.rolevaya.info/viewtopic.php?id=5387/]www.zal.rolevaya.info/viewtopic.php?id=5387/[/url] .
лечение запоев на дому [url=https://www.planeta.mybb.social/viewtopic.php?id=2230]https://www.planeta.mybb.social/viewtopic.php?id=2230[/url] .
00 plus shipping how to get cytotec without rx Emile TfDJSjNQVnbqONmTk 6 26 2022
вывод из запоя нижний новгород [url=https://pokupki.bestforums.org/viewtopic.php?f=7&t=24090]вывод из запоя нижний новгород[/url] .
выведение из запоя нижний новгород [url=https://www.ximki.ukrbb.net/viewtopic.php?f=12&t=3710]выведение из запоя нижний новгород[/url] .
купить кухню в москве [url=www.mebeldinastiya.ru]купить кухню в москве[/url] .
наркология вывод из запоя в стационаре [url=http://www.vishivayu.ukrbb.net/viewtopic.php?f=12&t=13457]наркология вывод из запоя в стационаре[/url] .
Тактичные штаны: идеальный выбор для стильных мужчин, как носить их с другой одеждой.
Неотъемлемая часть гардероба – тактичные штаны, которые подчеркнут ваш стиль и индивидуальность.
Идеальные тактичные штаны: находка для занятых людей, который подчеркнет вашу уверенность и статус.
Сочетание стиля и практичности в тактичных штанах, которые подчеркнут вашу спортивную натуру.
Советы по выбору тактичных штанов для мужчин, чтобы подчеркнуть свою уникальность и индивидуальность.
Секрет стильных мужчин: тактичные штаны, которые подчеркнут ваш вкус и качество вашей одежды.
Сочетание стиля и практичности в тактичных штанах, которые подчеркнут ваш профессионализм и серьезность.
купити штани олива тактичні [url=https://dffrgrgrgdhajshf.com.ua/]купити штани олива тактичні[/url] .
какие капельницы от запоя [url=https://4dkp.forum24.ru/?1-18-0-00002755-000-0-0-1730821905/]какие капельницы от запоя[/url] .
Расслабьтесь с велас ароматическими свечами, Вдохновляющие ароматы для вашего дома, ароматическая свеча как подарок
hacer velas [url=https://scentalle.com/]https://scentalle.com/[/url] .
Лучшие 10 программ https://www.cctvfocus.ru для видеонаблюдения. Программное обеспечение для видеонаблюдения. При выборе программного обеспечения важно учитывать наличие функции обнаружения объектов с использованием искусственного интеллекта.
Выберите идеальную коляску 3 в 1 для вашего ребенка, которые обязательно пригодятся.
Топовые модели колясок 3 в 1, с широким функционалом и стильным дизайном.
Гид по выбору коляски 3 в 1, которые помогут вам сделать правильный выбор.
Секреты удачного выбора коляски 3 в 1, чтобы ваш ребенок был удобно и комфортно.
Какую коляску 3 в 1 выбрать: опыт других родителей, и сделать правильное решение.
купить коляску трость [url=https://kolyaska-3-v-1-msk.ru/]https://kolyaska-3-v-1-msk.ru/[/url] .
Свежие розы с доставкой к вашему порогу, порадуйте себя или близких.
Индивидуальные букеты роз по вашему желанию, доставка в удобное время и место.
Уникальные букеты роз от лучших флористов, доставка по всему городу.
Роскошные букеты роз для особых случаев, быстрое исполнение заказов.
Изысканные композиции из роз, почувствуйте аромат настоящей любви.
Насладитесь красотой и свежестью цветов, круглосуточный сервис для вас.
Оригинальные идеи для букетов роз, доставка в удобное для вас время.
Выберите свой идеальный букет роз, удобные способы оплаты.
Красочные композиции из роз разных сортов, доступные цены и высокое качество.
Утонченные композиции из роз, и вы будете в восторге.
Букеты роз – это всегда актуальный подарок, в удобное для вас время.
Изысканные композиции из роз, сделайте день особенным.
заказать цветы доставка [url=https://buket-roz-s-dostavkoj.ru/]https://buket-roz-s-dostavkoj.ru/[/url] .
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?
Широкий выбор фурнитуры для плинтуса, выберите подходящий вам вариант.
Качественная фурнитура для плинтуса, долговечные и надежные в использовании.
Простота установки элементов плинтуса, сэкономьте время и силы.
Тренды в дизайне фурнитуры для плинтуса, выделитесь из общей массы.
Эко-варианты элементов для плинтуса, экологичный выбор для вашего дома.
Модные цвета для элементов плинтуса, выберите подходящий вам вариант.
Уникальные элементы для стильного плинтуса, выразите свою индивидуальность через дизайн.
Рекомендации по заботе о фурнитуре для плинтуса, для безупречного результата.
Стильные детали для украшения плинтуса, добавьте шарм вашему интерьеру.
Изысканные решения для отделки плинтуса, сделайте свой дом роскошным и элегантным.
плинтус фурнитура [url=https://furnituradlyaplintusamsk.ru/]https://furnituradlyaplintusamsk.ru/[/url] .
finasteride otc Peroxisome proliferator activated receptor gamma PPAR gamma mediates the action of gamma linolenic acid in breast cancer cells