# Do not use insecure URLs (no-insecure-url) Insecure protocols such as [HTTP](https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol) or [FTP](https://en.wikipedia.org/wiki/File_Transfer_Protocol) should be replaced by their encrypted counterparts ([HTTPS](https://en.wikipedia.org/wiki/HTTPS), [FTPS](https://en.wikipedia.org/wiki/FTPS)) to avoid sending potentially sensitive data over untrusted networks in plaintext. - [Rule Source](../../lib/rules/no-insecure-url.js) - [Rule Test](../../tests/lib/rules/no-insecure-url.js) ## Options This rule comes with three [default lists](../../lib/rules/no-insecure-url.js#L13): - **blocklist** - a RegEx list of insecure URL patterns. - **exceptions** - a RegEx list of common false positive patterns. For example, HTTP URLs to XML schemas are usually allowed as they are used as identifiers, not for establishing actual network connections. - **varExceptions** - a RegEx list of false positive patterns which a derivated from the variable name. For example, a variable that is called "insecureURL" which is used to test HTTP explicitly. These lists can be overrided by providing options. --- For example, providing these options... : ```javascript "@microsoft/sdl/no-insecure-url": ["error", { "blocklist": ["^(http|ftp):\\/\\/", "^https:\\/\\/www\\.disallow-example\\.com"], "exceptions": ["^http:\\/\\/schemas\\.microsoft\\.com\\/\\/?.*"], "varExceptions": ["insecure?.*"] }] ``` ... overrides the internal blocklist, blocking the following URL patterns... : - `http://`... - `ftp://`... - `https://www.disallow-example.com` ... and also overrides the internal exceptions list, allowing the following URL patterns as exceptions.: - `http://schemas.microsoft.com` - `http://schemas.microsoft.com/sharepoint` - `http://schemas.microsoft.com/path/subpath` ... and also overrides the internal variable exceptions list, allowing the following declaration name patterns as exceptions.: - `var insecureURL = "http://..."` - `var insecureWebsite = "http://..."` - ... URLs in neither the blocklist nor the exceptions list, are allowed: - `telnet://`... - `ws://`... - ... --- **Note**: The RegEx for the lists is provided within a string in a JSON. It is without delimiting slashes `/ /` and thus users cannot pass RegEx parameters. We make it case-insensitive after user input. Do not forget to escape characters: ```javascript let pureRegex = /^https:\/\/www\.disallow-example\.com/; let regexInString = "^https:\\/\\/www\\.disallow-example\\.com"; ``` ## Related Rules * [tslint-microsoft-contrib/no-http-string](https://github.com/microsoft/tslint-microsoft-contrib/blob/master/src/noHttpStringRule.ts) * [CodeQL/InsecureDownloadCustomizations.qll](https://github.com/github/codeql/blob/master/javascript/ql/src/semmle/javascript/security/dataflow/InsecureDownloadCustomizations.qll#L62) * [DevSkim/DS137138](https://github.com/microsoft/DevSkim/blob/main/guidance/DS137138.md) * [Fortify/insecure_transport](https://vulncat.fortify.com/en/detail?id=desc.config.java.insecure_transport#JavaScript%2fTypeScript) ## Further Reading * [HTTPS Everywhere](https://en.wikipedia.org/wiki/HTTPS_Everywhere)