DEV Community

Cover image for Strategies for Handling Third-Party Scripts
OpenReplay Tech Blog
OpenReplay Tech Blog

Posted on

Strategies for Handling Third-Party Scripts

by Jonathan Osemekhian

This article offers all-inclusive tactics on how to supervise third-party scripts so that software developers and businesses can take full advantage of them and, at the same time, manage risks related to their use. In looking at their importance, threats, and rules of engagement in using third-party scripts, you will be armed with information enabling you to fine-tune your performance levels, beef up defenses, and safeguard individual confidentiality, as well as privacy matters.

Session Replay for Developers

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — an open-source session replay suite for developers. It can be self-hosted in minutes, giving you complete control over your customer data.

OpenReplay

Happy debugging! Try using OpenReplay today.


Scripts from third-party websites are crucial to web development because they offer diverse functionalities that improve the website user experience, simplify single-operation techniques, and bring together services of different kinds in today’s digital environment. Therefore, analytics tools plus clusters for ads, widgets for social sites, and payment systems enhance the provision of complex options to site owners without having them programmed individually.

Third-party scripts are code pieces that are written on the web pages from sources outside instead of being written inside the website. These scripts can perform different tasks, including linking the various social media feeds, tracking users' actions on the site, and placing ads on it. Third-party scripts provide developers with a means by which they can add more advanced features to their sites that would either be too difficult to write from scratch or to continue from another point. It is necessary to manage these third-party scripts for many reasons, including impacting the performance of websites and speed, thus affecting the user experience positively or negatively.

Failure to correctly monitor these scripts, on the other hand, allows security loopholes via data breaches and malware that can inflict other cyber threats. Last but not least, these scripts frequently require the gathering and handling of user information, thereby raising security concerns and resulting in the need for consent under data protection laws.

Strategy 1: Audit and Assessment

The first step in properly managing third-party scripts is to carry out a thorough audit and assessment. By this, I mean finding all scripts currently operating on your website and checking whether you need them or not.

For myriads of examples, an examination might illustrate how an organization can have several analytics scripts at different suppliers doing similar things, which makes its performance degrade miserably. According to the same research, this could help simplify data collection methods through which companies gather customer information with a single analytical tool. Reducing load time per page and simplifying whole-site maintenance are other reasons such transformations are embraced.

Moreover, the audit may unearth additional inefficacies within the program design rather than just its components, like those scripts that have outlived their utility. Removing them will improve both safety for users visiting your web space and the speed of operations on various devices. The security implications for each one should also be examined so that there are no vulnerability issues. This in-depth scrutiny ensures that only necessary, effective, and safe scripts are used to create a stronger and friendlier interface web page.

The audit and assessment process, in addition to optimizing performance metrics, uncovers truths about the functionality and significance of every third-party script. As a result, the company can make well-thought-out decisions about what scripts it might retain, upgrade, or dispose of, thereby ensuring its website’s optimization and security.

Strategy 2: Prioritization

One of the most important steps in optimizing your website is organizing its critical scripts. Some third-party scripts provide indispensable services and should be prioritized, while others are useful but non-essential. First, we identify essential scripts according to what they do and how they benefit our site. For instance, primary important scripts like payment gateways, authentication processes, and critical analytics need to be prioritized. The basic services of the website work well and securely through the use of these scripts, thereby affecting the user experience and business operations directly.

After you have found all the necessary scripts, evaluate the effect of their performance on the website. The scripts that are essential for the main operations of the website but have long latencies or high costs in performance need to be revised or replaced with more effective ones. You aim to keep the essentials of what your site does intact while thinking of speed.

Implementing asynchronous loading for non-critical scripts can speed up the initial load times. Postponing the loading of non-essential scripts until the main content has been completely loaded can significantly improve the user experience. This way, the primary information on a webpage would be accessible to users as quickly as possible, with another one loading in the background.

Besides, to ensure they function effectively at all times, these scripts must also be subjected to consistent checking and proper handling. In other words, updating scripts to the latest versions, deleting obsolete or blank scripts, and ongoingly ascertaining their needs and performance implications are required. Thus, this iterative process enables keeping a good environment for script optimization alive that helps the site stay speedy yet still functional.

Strategy 3: Minimization and Consolidation

Opting for minimization and consolidation of scripts is a strategic way to elevate a website's performance. Websites can be loaded quicker and have better performance overall if they cut down on the number of external scripts and include features into a smaller number of more effective scripts. A necessary step in the process is to identify redundant or unnecessary scripts. A typical situation during audits involves identifying various scripts with similar purposes. For instance, different tracking scripts from distinct analytics providers can be used on one website. Combining them in one solution simplifies maintenance because there will be a small number of external requests, leading to faster load times on the site.

The next stage is to consolidate them where possible to recognize the essential scripts. What is done here is to combine various scripts responsible for related functionality into a single script file. For instance, rather than having individual JavaScript for various UI parts, developers should combine them all into a single script. Such activities may be automated using instruments such as Webpack or Rollup, ensuring better performance by avoiding double code within bundled JS files.

You can apply minimization tools like UglifyJS or Terser to make JavaScript files more compact by stripping unnecessary elements like whitespace and comments without losing any code features. As a result, content is downloaded faster, and website speed is due to reduced file sizes.

Another important tactic is to make good use of content delivery networks (CDNs). CDNs are used to deliver files like scripts from the nearest server to a specific person, thus reducing the loading time and avoiding delays so long as scripts are hosted or stored in a Content Delivery Network (CDN). Besides, these can help minimize the time spent optimizing scripts by providing barebones libraries for free.

Moreover, instead of loading scripts that are not essential right away, lazy loading can be utilized to postpone their loading time until they become needed. This means that the website’s main viewing time is minimal because only necessary scripts have loaded at once. And still, less necessary scripts may be loaded while people use some functions on the website to make it faster.

It is also important to frequently check and revise scripts, as is the practice of artificial intelligence. New versions of libraries and frameworks often incorporate performance enhancements and security fixes. For websites to benefit from these boosts and avoid being hacked through old codes, keeping up with the latest trends in making changes to this software is important.

In addition to this technical optimization, a well-structured and modular approach to scripting can also be very helpful. When scripts are organized within modules, they do not load except for those that have been called upon, thus saving time spent loading long scripts.

Strategy 4: Asynchronous Loading and Non-Blocking Execution

If scripts are loaded asynchronously, they don’t halt page rendering. Hence, using async or defer attributes enhances your website performance because both allow scripts to be loaded simultaneously with other page elements. For instance, advertising and analytics scripts load asynchronously on a news website. This ensures the quick display of the main content while allowing for more time during which the ads and tracking scripts may still be loading.

For example:

<script src="analytics.js" async></script>
<script src="ads.js" defer></script>
Enter fullscreen mode Exit fullscreen mode

The excerpt of codes highlights the process of enhancing website performance by having these scripts interrupt the main content rendering through the async and defer attributes.

The async attribute is good for scripts that do not need the site Document Object Model (DOM) loaded completely or other scripts, such as analytics scripts, that might not be related to other page parts. If made async would not block rendering.

The defer attribute implies that the script will not run until the whole HTML document is parsed. This can be helpful when some scripts must work with DOM elements because it allows them access and assures that all elements exist before they run.

Unlike the async, the defer scripts preserve their execution order when there is more than one deferred script on the page. This can be necessary for scripts that rely on the order of the executor.

Implementation of Asynchronous Loading and Non-Blocking Execution

By adopting asynchronous loading and non-blocking execution methods for scripts, your site’s efficiency will be greatly improved. The following is a systematic instruction on how one may apply them with the help of async and defer attributes:

  • Understanding async and defer attributes: Async enables the browser to download the script simultaneously while it is being parsed in the background, without stalling or delaying the parsing of HTML. The script will immediately execute once downloaded, which may disrupt HTML parsing. The Defer attribute also tells a browser to download scripts in a non-blocking manner; however, it makes sure that they are executed only after the HTML rendering is done. Thus, this approach script will not interfere with rendering any HTML content.

  • Adding scripts with async and defer: If you use async, find the script tag in the HTML document and attach the async attribute to the script tag:

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>Async Example</title>
 </head>
 <body>
 <h1>Async Loading Example</h1>
 <script src="analytics.js" async></script>
 <script src="advertising.js" async></script>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

This basic web page structure in HTML code is defined in English. There are meta tags for character encoding and viewport settings in its head section to ensure it displays properly on different devices. The title of the page is "Async Example". The body has an h1 heading with the phrase "Async Loading Example." At the end of the body, there are two script tags. analytics.js and advertising.js, with their async attributes included. This means these scripts will be fetched and executed asynchronously without blocking the HTML parsing.

If you use defer, find the script tag in the HTML document and attach the defer attribute to the script tag:

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>Defer Example</title>
 </head>
 <body>
 <h1>Defer Loading Example</h1>
 <script src="main.js" defer></script>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

A webpage is defined by the HTML code as being in English. The head section has meta tags for character encoding and viewport settings, allowing it to be displayed correctly across different devices. The title of this page is set to "Defer Example." Within the body is an h1 header that says "Defer Loading Example." Lastly, a script tag is added at the end of the body, and the main.js file is loaded using defer. This means that the script would be downloaded in the background and only executed after HTML parsing has been completed so that it does not block initial page rendering.

  • Deciding when to use async and defer: Use async for stand-alone scripts unrelated to any DOM elements. The above is usually the case with third-party scripts like analytics and advertising. On the other hand, defer should be used for scripts that require the complete parsing of HTML, e.g., those that manipulate DOM or depend upon other scripts.

  • Combining async and defer for optimal performance: Meanwhile, scripts that rely on the total DOM or are to be run in a specific order should be deferred. Async must be used for third-party scripts that do not rely on other scripts or DOM elements.

For example:

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>Combined Example</title>
 </head>
 <body>
 <h1>Combined Loading Example</h1>
 <script src="analytics.js" async></script>
 <script src="advertising.js" async></script>
 <script src="library.js" defer></script>
 <script src="main.js" defer></script>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

This page is designed so that it preserves the English language, and its textual content is encoded in HTML format. The head section consists of meta tags that provide character encoding and viewport settings, enabling its correct display across several devices. The title is "Combined Example," while the body has an h1 heading that reads "Combined Loading Example." At the bottom of the body, four script tags are found; analytics.js and advertising.js load asynchronously using the async attribute so that they do not block HTML parsing. Library.js and main.js load with the defer attribute, implying that they will come into play when HTML parsing comes to an end and hence will not interfere with how fast the page appears.

  • Testing and Debugging: Employ browser developer tools to determine whether scripts are loaded asynchronously or deferred. Examine page loading durations both before and following the incorporation of async and defer attributes. Confirm that scripts reliant on DOM elements or other scripts are executed correctly without making any errors.

Strategy 5: Content Security Policy (CSP)

The CSP prevents cross-site scripting (XSS) attacks by determining the right sources to load scripts on the website. For instance, a medical site that deploys CSP allows scripts from its domain and reliable third-party providers.

For example:

Content-Security-Policy: script-src 'self' https://trustedanalytics.com
Enter fullscreen mode Exit fullscreen mode

The CSP header, also known as the Content-Security-Policy header, offers security against different attacks; for instance, it prevents cross-site scripting (XSS) and data injection by defining the trusted sources of content that can be loaded onto a web page. The script-src directive is responsible for determining specifically where scripts can come from. In this way, we support extensibility within our platform while enforcing security.

Consider having a website at https://example.com and using Google Analytics at https://trustedanalytics.com. You wish to ensure that only your domain and Google Analytics scripts are allowed to run. Scripts that originate from within the website. Several Javascript files are hosted on your server, e.g., main.js and utils.js. Scripts that originate from other websites: You are making use of Google Analytics, hosted at https://trustedanalytics.com.

The prescribed CSP header lets you command your browser to run scripts exclusively from our domain (self) and a certain trusted analytics provider (https://trustedanalytics.com). This prevents untrusted domains from running scripts on your webpage and minimizes the possibility of cross-site scripting or any other kind of attack that might use scripts.

Implementing a Content Security Policy (CSP)

A Content Security Policy (CSP) helps you avoid cross-site scripting (XSS) or other code injection attacks by specifying which sources can load content on your site. Here is a guide on how to set up a CSP:

  • Define Your CSP Policy: Detect and enumerate every trusted resource for the substances in your domain. For example, concerning scripts, you should have faith in your domain and a handful of third-party suppliers.

  • Add the CSP header to your server configuration: The CSP directive needs to be added to the server configuration. Below are the methods for configuring CSP on various web servers:
    Add the following line to your .htaccess file or your site’s main configuration file.

For Apache:

Header set Content-Security-Policy "script-src 'self' https://trusted-third-party.com;"
Enter fullscreen mode Exit fullscreen mode

For Nginx, add the following line to your server block:

add_header Content-Security-Policy "script-src 'self' https://trusted-third-party.com;";
Enter fullscreen mode Exit fullscreen mode
  • Add CSP Meta Tag (Alternative Method): Should you lack accessibility to server settings, it is possible to place a CSP specification inside a meta tag in your HTML file:
<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>Medical Site</title>
 <meta
 http-equiv="Content-Security-Policy"
 content="script-src 'self' https://trusted-third-party.com;"
 />
 </head>
 <body>
 <h1>Welcome to the Medical Site</h1>
 <script src="main.js"></script>
 <script src="https://trusted-third-party.com/trusted.js"></script>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

Here is a sample of a simple HTML document for a medical website. Moreover, it sets the right character encoding and makes the site responsive by setting the viewport properties. Likewise, it has a Content Security Policy that allows the site’s scripts to only be executed while denying all others, like those of third parties. In addition, a message to welcome visitors is displayed on this page header and two external JavaScript files, respectively; one points to local main.js while the second is to a third-party domain.

  • Test Your CSP: After installing the CSP tool, carefully evaluate your webpage to ensure that every resource loads correctly and that no authentic information is denied. Use the developer browser options to look for any breaches of CSP.

  • Monitor and Adjust: Your website should be regularly monitored for any CSP violations so that changes to policies can be made when necessary. You may consider utilizing tools like Content Security Policy (CSP) monitoring services or browser reporting features to keep track of violations.

Strategy 6: Subresource Integrity (SRI)

A script cannot be tampered with by SRI, and it does this by specifying an expected script content hash. For instance, SRI is a mechanism an educational platform applies to guarantee that a certain external library utilized for interactive quizzes has not been corrupted.

For example:

<script
 src="https://example.com/library.js"
 integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxC4c/8OxEX/XA5n/VvnMhvN++/L1"
 crossorigin="anonymous"
></script>
Enter fullscreen mode Exit fullscreen mode

As one of the HTML elements, the <script> tag is linked to an external JavaScript file in this given code section. Added security measures to this distant document include attributes such as the integrity attribute and the crossorgin attribute. The <script> is an HTML element that embeds or references an external JavaScript file. The src attribute indicates the URL or address of the external JavaScript file to be incorporated. It’s where the script is saved, that is, https://example.com/library.js.The integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxC4c/8OxEX/XA5n/VvnMhvN++/L1 attribute helps you ensure that the integrity of script file is not compromised. Mathematically, the browser checks the fetched script’s hash against the one you provide to see if they match for checking the script’s integrity.

Implementing a Subresource Integrity (SRI) Strategy

Subresource integrity (SRI) is a special characteristic of security that allows web browsers to check if the files they pull (for example, CDNs) are delivered without an odd modification. Here’s how to implement SRI:

  • List the outside tools your site uses (how about stylesheets, scripts, and so on). To illustrate, a learning portal could rely on a third-party API for features such as interactive test modules.

  • For the resource, make use of a tool for generating its hash. For this task, you can make use of various web-based services like SRI Hash Generator as well as command-line applications such as OpenSSL. When using an online tool, copy the URL of the external resource. The next step is to paste the URL into the SRI Hash Generator tool and then copy the generated integrity attribute value.

Use this command for a file kept in a local place to use OpenSSL:

openssl dgst -sha384 -binary quiz-library.js | openssl base64 -A
Enter fullscreen mode Exit fullscreen mode

The SHA-384 hash is calculated for the file quiz-library.js, then binary format is used to output it and subsequently, Base64 encoding of that binary hash follows. To summarize, it generates a Base64-encoded hash that may serve for integrity-checking purposes, e.g., confirming that such a file remains unchanged.

  • In your HTML script or link tag, include the integrity and crossorigin attributes. Substitute in the code below sha384-BASE64_HASH with the proper hash created during step 2.

For example:

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>Educational Platform</title>
 </head>
 <body>
 <h1>Welcome to the Educational Platform</h1>
 <script
 src="https://cdn.example.com/quiz-library.js"
 integrity="sha384-BASE64_HASH"
 crossorigin="anonymous"
 ></script>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

A webpage called "Learning Platform" is created using this HTML. Using meta tags for defining character coding and viewport settings ensures the right display on different devices. The title bar is labeled "Online Educational Platform." This page has an h1 header that reads "Welcome to the Online Educational Platform". It incorporates a script tag that loads an external script from https://cdn.example.com/quiz-library.js. The integrity attribute denotes a hash of the script contents, thereby assuring that no one has touched them. Also, the crossorigin parameter is set to anonymous; hence, integrity checking operates normally when cross-origin requests take place.

  • Verify the right loading of resources and the absence of errors on integrity checks after SRI has been implemented. Developer tools available in browsers can confirm the accuracy of integrity attributes.

  • Make it a habit to watch out for updates on your outside resources. An updated resource’s hash will differ; hence, you must adjust the integrity attribute as necessary. If this is neglected, loading such a resource will fail.

Strategy 7: Sandboxing and Isolation

Applying the sandbox attribute to iframes on gaming sites can guarantee that ads are served without any risk of malicious scripts affecting pages containing them. By using the sandboxing technique, third-party scripts are prevented from reaching sensitive data or influencing other website sections.

For example:

<iframe
 src="https://ads.com/ad"
 sandbox="allow-scripts allow-same-origin"
></iframe>
Enter fullscreen mode Exit fullscreen mode

The snippet uses the <iframe> tag to embed an external resource (e.g., an advertisement). The Sandbox attribute is applied to enforce certain limitations on the contents of iframes due to security reasons.

For example, a website is willing to advertise ads (URL: ads.com) from an external advertising server. For security reasons, the content of this advertisement should not be trustworthy on your page; therefore, the developers have set up the iframe sandbox attribute.

Implementing a Sandboxing and Isolation Strategy

Sandboxing iframes are used as an efficient method to segregate some third-party content, like advertisements, on your site. This ensures that any harmful codes embedded in the iframe cannot alter any part of your website. The following instructions will show you how to carry out a sandboxing and isolation process:

  • The sandbox attribute should be understood. Restricting what content inside the Iframe can do is the job of the sandbox attribute. Where values are not mentioned, they are limited when you use sandboxes for iframes. Some exceptions can also be provided.

  • Iframes that have third-party content, such as ads, should have the sandbox attribute added to them. Adding the sandbox property is vital to protecting iframes that contain external material, such as ads since it restricts their functions. Thus, the use of an iframe is not permitted to run scripts, send forms, or obtain information from the preceding page. Such separation minimizes possible security threats like harmful code running or unlawful data, although it also enables this kind of frame to retain its intended displays.

  • Delineate the constraints of the sandbox. Several values can be added to modify the restrictions. On the Mozilla Developer Network (MDN) web documentation, you can find thorough documentation surrounding limitations regarding the sandbox attribute using this link.

When it comes to implementing sandboxing techniques for iframes on a gaming site, here is an example:

<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 <title>Gaming Site</title>
 </head>
 <body>
 <h1>Welcome to the Gaming Site</h1>
 <p>Play games and enjoy ad-supported content.</p>
 <iframe
 src="https://adserver.example.com/ad.html"
 sandbox="allow-scripts allow-same-origin"
 ></iframe>
 </body>
</html>
Enter fullscreen mode Exit fullscreen mode

By doing so, the iframe can execute scripts while still being considered a member of the same domain, which may be needed for some advertising features. Still, it cannot engage in any other harmful actions.

  • Test your implementation. Once sandboxing has been set up, test your site to verify that the iframes are being loaded properly and that the limitations are reduced. It is recommended that you utilize the available browser developer tools to check for any possible errors or violations.

  • Monitor and fix it when necessary. Your website should be examined frequently for potential concerns regarding the content shown in the iframes. Change the restrictions placed in the sandbox whenever necessary to balance security and the ability to utilize it.

Strategy 8: Privacy Considerations

Privacy concerns must be handled with good grace to uphold user confidence and observe data protection regulations.

Implement methods of getting user endorsements before downloading outside scripts that collect data. A travel website, for example, has a message banner seeking endorsement from internet users to allow cookies and external codes aimed at providing personalized suggestions and analytics.

Anonymizing data collected from third-party scripts can protect users' privacy. For instance, a forum anonymizes analytics data by removing IP addresses to protect users' identities.

Lastly, when using third-party scripts, make sure that you are compliant with GDPR and CCPA. For instance, to ensure that third-party scripts comply with GDPR, an online retailer reviewed and tweaked its privacy policy and added features such as data access and deletion requests for users.

Conclusion

All in all, the strategies provided in this content offer a well-rounded way of managing third-party scripts. This approach would help developers and enterprises make their websites perform better and be more secure when used to observe privacy, thus improving the safety and privacy of the user experience. Staying alert and being ahead of other users when managing such third-party scripts will aid one in developing an error-free web environment that is not vulnerable.

Top comments (0)