32 lines
529 B
Plaintext
32 lines
529 B
Plaintext
![]() |
include::../description.adoc[]
|
|||
|
|
|||
|
== Noncompliant Code Example
|
|||
|
|
|||
|
----
|
|||
|
const request = require('request');
|
|||
|
|
|||
|
function ssrf(req, res) {
|
|||
|
const url = req.query.url;
|
|||
|
|
|||
|
request(url, callback); // Noncompliant
|
|||
|
}
|
|||
|
----
|
|||
|
|
|||
|
== Compliant Solution
|
|||
|
|
|||
|
Validate the url with an allowlist:
|
|||
|
|
|||
|
----
|
|||
|
const request = require('request');
|
|||
|
|
|||
|
function ssrf(req, res) {
|
|||
|
const url = req.query.url;
|
|||
|
|
|||
|
if(url.startsWith("https://www.trustedwebsite.com/route/?query=")) {
|
|||
|
request(url, callback); // Compliant
|
|||
|
}
|
|||
|
}
|
|||
|
----
|
|||
|
|
|||
|
include::../see.adoc[]
|