XSS Prevention Cheatsheet

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:

https://example.com/search?q=abc

If an attacker can trick victims into visiting this URL:

https://example.com/search?q=

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:

POST /status/updatestatus=

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:

 https://example.com?locale=north+america 

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:

https://example.com?locale=

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.

{{ user-input }}

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:

<script>alert(1)</script>

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:

import “html/template”t, err := template.New(“foo”).Parse({{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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月3日 02:49
下一篇 2022年5月3日 18:08

相关推荐

  • WebLogic中间件任意命令执行漏洞。

    一、背景简介 Weblogic是一款商用中间件应用服务器产品,可以为应用程序提供运行访问环境。 二、漏洞详情 公开日期:2022-07-29漏洞编号:暂无危害等级:高危漏洞描述:由于没有过滤危险字符,导致攻击者可以对T3/IIOP接口发送恶意内容,执行任意命令。 三、影响版本 未知 四、处置情况 1.暴露在公网的WebLogic应配置对外禁用T3和IIOP,…

    2022年8月3日
    3.2K8470
  • Linus Torvald’s House [Comic]

    文章来源于互联网:Linus Torvald’s House [Comic]

    2022年5月3日
    968420
  • Using HTTPS to Secure Your Websites: An Intro to Web Security

    More and more sites are switching to HTTPS. And with good reason! Security is essential in today’s complex web ecosystem: logins, online payment systems, and personal user in…

    2022年5月3日
    20.3K36990
  • log4j 0day漏洞情况分析及说明

    一、背景简介 2022年7月30日起,各大威胁情报社区及安全圈内开始盛传log4j存在0day漏洞,由于log4j在去年12月爆出严重的jndi注入漏洞,可通过在特定点插入恶意的jndi payload达到执行任意代码进而控制主机的目的。 log4j2(一般简称log4j)是Apache基金会开发维护的开源java日志组件,在以Java开发的系统中大量被直接…

    2022年8月3日
    22000
  • We Need to Talk About SSL [Comic]

    文章来源于互联网:We Need to Talk About SSL [Comic]

    2022年5月3日
    682280

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(28条)

  • Georgevulty
    Georgevulty 2024年11月8日 10:34

    kotor house for sale Montenegro real estate

  • JasonSoold
    JasonSoold 2024年11月9日 17:55

    Займ 300 000 тенге Займ 100 000 тенге

  • JasonSoold
    JasonSoold 2024年11月9日 21:09

    Экспресс займ Sravnim.kz

  • meleant
    meleant 2024年11月9日 23:19

    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

  • JasonRok
    JasonRok 2024年11月10日 08:01
  • Vivod iz zapoya rostov_wakt
    Vivod iz zapoya rostov_wakt 2024年11月12日 10:55

    нарколог на дом вывод из запоя на дому [url=https://mozaisk.anihub.me/viewtopic.php?id=4366/]https://mozaisk.anihub.me/viewtopic.php?id=4366/[/url] .

  • Vivod iz zapoya rostov_pgPt
    Vivod iz zapoya rostov_pgPt 2024年11月19日 09:45

    вывод из запоя ростов на дону на дому [url=https://www.klin.0pk.me/viewtopic.php?id=4399]вывод из запоя ростов на дону на дому[/url] .

  • vivod iz zapoya v stacionare_owsn
    vivod iz zapoya v stacionare_owsn 2024年11月25日 12:36

    вывод из запоя в воронеже [url=https://www.superjackson.ukrbb.net/viewtopic.php?f=28&t=9734]https://www.superjackson.ukrbb.net/viewtopic.php?f=28&t=9734[/url] .

  • vivod iz zapoya v stacionare_fmea
    vivod iz zapoya v stacionare_fmea 2024年11月26日 06:50

    вывод из запоя в стационаре воронежа [url=http://www.bisound.com/forum/showthread.php?p=1218353/]вывод из запоя в стационаре воронежа[/url] .

  • vivod iz zapoya ekaterinbyrg_wnor
    vivod iz zapoya ekaterinbyrg_wnor 2024年11月27日 03:52

    лечение запоев на дому [url=www.ximki.ukrbb.net/viewtopic.php?f=12&t=3702]www.ximki.ukrbb.net/viewtopic.php?f=12&t=3702[/url] .

  • GeorgeLox
    GeorgeLox 2024年11月28日 08:13

    кем проводится соут в москве https://sout213.ru

  • vivod iz zapoya ekaterinbyrg_epmr
    vivod iz zapoya ekaterinbyrg_epmr 2024年11月29日 06:53

    вывод из запоя на дому екатеринбург [url=www.zal.rolevaya.info/viewtopic.php?id=5387/]www.zal.rolevaya.info/viewtopic.php?id=5387/[/url] .

  • vivod iz zapoya ekaterinbyrg_kdol
    vivod iz zapoya ekaterinbyrg_kdol 2024年11月29日 06:54

    лечение запоев на дому [url=https://www.planeta.mybb.social/viewtopic.php?id=2230]https://www.planeta.mybb.social/viewtopic.php?id=2230[/url] .

  • buying cheap cytotec without prescription

    00 plus shipping how to get cytotec without rx Emile TfDJSjNQVnbqONmTk 6 26 2022

  • vivod iz zapoya v stacionare_apEr
    vivod iz zapoya v stacionare_apEr 2024年12月4日 11:43

    вывод из запоя нижний новгород [url=https://pokupki.bestforums.org/viewtopic.php?f=7&t=24090]вывод из запоя нижний новгород[/url] .

  • vivod iz zapoya v stacionare_ufPt
    vivod iz zapoya v stacionare_ufPt 2024年12月4日 11:47

    выведение из запоя нижний новгород [url=https://www.ximki.ukrbb.net/viewtopic.php?f=12&t=3710]выведение из запоя нижний новгород[/url] .

  • kyhni na zakaz_ewSr
    kyhni na zakaz_ewSr 2024年12月4日 11:54

    купить кухню в москве [url=www.mebeldinastiya.ru]купить кухню в москве[/url] .

  • vivod iz zapoya v stacionare_ubmt
    vivod iz zapoya v stacionare_ubmt 2024年12月4日 11:55

    наркология вывод из запоя в стационаре [url=http://www.vishivayu.ukrbb.net/viewtopic.php?f=12&t=13457]наркология вывод из запоя в стационаре[/url] .

  • taktichn__akSt
    taktichn__akSt 2024年12月6日 04:31

    Тактичные штаны: идеальный выбор для стильных мужчин, как носить их с другой одеждой.
    Неотъемлемая часть гардероба – тактичные штаны, которые подчеркнут ваш стиль и индивидуальность.
    Идеальные тактичные штаны: находка для занятых людей, который подчеркнет вашу уверенность и статус.
    Сочетание стиля и практичности в тактичных штанах, которые подчеркнут вашу спортивную натуру.
    Советы по выбору тактичных штанов для мужчин, чтобы подчеркнуть свою уникальность и индивидуальность.
    Секрет стильных мужчин: тактичные штаны, которые подчеркнут ваш вкус и качество вашей одежды.
    Сочетание стиля и практичности в тактичных штанах, которые подчеркнут ваш профессионализм и серьезность.
    купити штани олива тактичні [url=https://dffrgrgrgdhajshf.com.ua/]купити штани олива тактичні[/url] .

  • kapelnica ot zapoya kolomna_uhEa
    kapelnica ot zapoya kolomna_uhEa 2024年12月10日 11:40

    какие капельницы от запоя [url=https://4dkp.forum24.ru/?1-18-0-00002755-000-0-0-1730821905/]какие капельницы от запоя[/url] .

  • Velas_sfPn
    Velas_sfPn 2024年12月17日 06:24

    Расслабьтесь с велас ароматическими свечами, Вдохновляющие ароматы для вашего дома, ароматическая свеча как подарок
    hacer velas [url=https://scentalle.com/]https://scentalle.com/[/url] .

  • Clydethuse
    Clydethuse 2024年12月28日 15:38

    Лучшие 10 программ https://www.cctvfocus.ru для видеонаблюдения. Программное обеспечение для видеонаблюдения. При выборе программного обеспечения важно учитывать наличие функции обнаружения объектов с использованием искусственного интеллекта.

  • Kolyaska_pbPr
    Kolyaska_pbPr 2024年12月30日 20:29

    Выберите идеальную коляску 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] .

  • Bukety_waSt
    Bukety_waSt 2024年12月31日 05:17

    Свежие розы с доставкой к вашему порогу, порадуйте себя или близких.
    Индивидуальные букеты роз по вашему желанию, доставка в удобное время и место.
    Уникальные букеты роз от лучших флористов, доставка по всему городу.
    Роскошные букеты роз для особых случаев, быстрое исполнение заказов.
    Изысканные композиции из роз, почувствуйте аромат настоящей любви.
    Насладитесь красотой и свежестью цветов, круглосуточный сервис для вас.
    Оригинальные идеи для букетов роз, доставка в удобное для вас время.
    Выберите свой идеальный букет роз, удобные способы оплаты.
    Красочные композиции из роз разных сортов, доступные цены и высокое качество.
    Утонченные композиции из роз, и вы будете в восторге.
    Букеты роз – это всегда актуальный подарок, в удобное для вас время.
    Изысканные композиции из роз, сделайте день особенным.
    заказать цветы доставка [url=https://buket-roz-s-dostavkoj.ru/]https://buket-roz-s-dostavkoj.ru/[/url] .

  • riferimento binance
    riferimento binance 2025年1月5日 15:20

    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?

  • Furnitura_zySi
    Furnitura_zySi 2025年1月14日 00:56

    Широкий выбор фурнитуры для плинтуса, выберите подходящий вам вариант.
    Качественная фурнитура для плинтуса, долговечные и надежные в использовании.
    Простота установки элементов плинтуса, сэкономьте время и силы.
    Тренды в дизайне фурнитуры для плинтуса, выделитесь из общей массы.
    Эко-варианты элементов для плинтуса, экологичный выбор для вашего дома.
    Модные цвета для элементов плинтуса, выберите подходящий вам вариант.
    Уникальные элементы для стильного плинтуса, выразите свою индивидуальность через дизайн.
    Рекомендации по заботе о фурнитуре для плинтуса, для безупречного результата.
    Стильные детали для украшения плинтуса, добавьте шарм вашему интерьеру.
    Изысканные решения для отделки плинтуса, сделайте свой дом роскошным и элегантным.
    плинтус фурнитура [url=https://furnituradlyaplintusamsk.ru/]https://furnituradlyaplintusamsk.ru/[/url] .

  • can taking finasteride cause hair loss

    finasteride otc Peroxisome proliferator activated receptor gamma PPAR gamma mediates the action of gamma linolenic acid in breast cancer cells