Million Dollar Question - Can React Protect Against XSS? 

Tags: react, security, webdev, discuss
Published: 2020-06-11 11:28:32

Web applications are gaining more traction every day with the increase in on-demand development for Progressive Web Applications (PWAs) and Single Page Applications (SPAs). Sure, React as a JavaScript library has always been an easy and convenient go-to library to build web applications. But, did you also know that it is not immune to security threats, especially to Cross-site scripting (XSS). 

If you have been using React for a while, you would know that the XSS attack in relation to React has always been a common point of discussion around several development communities. If XSS  sounds new to you, imagine it as a kind of injection attack. With this attack, perpetrators inject malicious scripts into web pages of your application at the client-side. 

#What Are The Implications of XSS? 

For starters, an XSS attack will result in a full compromise of your frontend web application. Malicious users or perpetrators will be able to track data and user paths within your application. Moreover, you will lose control over your application.

In most cases, the attacker will be able to make manual requests on behalf of the application allowing them to extract any sensitive information. Sure, just like every other technology, React presents itself with facts that it comes with built-in defenses against XSS. But how far can React fight against XSS attacks? This is a million-dollar question. 

Having said that, let’s get to know some solutions to protect React from XSS attacks. 

#Can React Protect Against XSS? 

React has default APIs that make the application aware of the potential dangers when a new element is created within itself. When it gets notified of new elements being created or injected, it has the ability to automatically review the elements making sure it is not an XSS attack. 

So, what if it is an XSS attack? Surely, React just being able to automatically be aware of XSS attacks is not going to help. Fear not, React does have a defense mechanism against it. 

##Feeding XSS Protection Through APIs 

**createElement()** APIs come in very handy in order to provide application properties individually and manually. This helps in automatically detecting injections. Using this API element, you can create custom elements and when an attacker tries to inject and if their script value is invalid according to the API attribute you created, then your application will automatically refuse the input. 

But, you should note that this approach will not help if you have already lost full access and control of your application over to the attacker. 

##JSX to The Rescue 

When components of your application functions through a JSX code, the similar mechanism of custom API element creation is brought to light in providing the necessary protection. The only difference is that the protection in this case will be generated through a JSX code instead of a React API. This is possible through the auto-escaping functionality of React. It converts everything within the application into a string before rendering. 

##Is That All? 

Obviously the above two approaches are not all. There are many third-party libraries that help in protecting your application against XSS  attacks. When do you need to pick the help of third-party libraries? For instance, if you want to inject a new element into your own application in the future, your application should not consider the new element as malicious. One of the majorly preferred libraries to overcome this scenario and successfully inject your element into the code or add new elements is **dangerouslySetInnerHTML**. 

![React Security Alert](https://dev-to-uploads.s3.amazonaws.com/i/soxvehq7d0qlz629m9ld.jpg)

But, don't get fooled around to think that these approaches are a workaround to completely protect React against XSS. In addition to that, did you consider that there might be more security threats like XSS to a React web application? What if the attacks are injected through HTTP headers? URLs? Authentication failures? The list goes on and on! Beware of some vulnerabilities that might expose your web application to some security-related threats. I have written a whole blog covering all these pitfalls with their solutions: [React security vulnerabilities](https://www.simform.com/react-security-vulnerabilities-solutions/). It might very well come in handy just to be aware of the security obstacles that exist around React and its solutions.