1
0
mirror of https://git.sr.ht/~cadence/bibliogram synced 2025-12-15 10:55:07 +00:00

Fix exploit and add tests for proxy URL validator

This commit is contained in:
Cadence Ember
2020-06-19 17:57:34 +12:00
parent 10c913a919
commit 6e1e5e6996
3 changed files with 82 additions and 22 deletions

View File

@@ -3,27 +3,10 @@ const sharp = require("sharp")
const constants = require("../../lib/constants")
const collectors = require("../../lib/collectors")
const {request} = require("../../lib/utils/request")
const {verifyURL} = require("../../lib/utils/proxyurl")
const db = require("../../lib/db")
require("../../lib/testimports")(constants, request, db)
require("../../lib/testimports")(constants, request, db, verifyURL)
/**
* Check that a resource is on Instagram.
* @param {URL} completeURL
*/
function verifyURL(completeURL) {
const params = completeURL.searchParams
if (!params.get("url")) return {status: "fail", value: [400, "Must supply `url` query parameter"]}
try {
var url = new URL(params.get("url"))
} catch (e) {
return {status: "fail", value: [400, "`url` query parameter is not a valid URL"]}
}
// check url protocol
if (url.protocol !== "https:") return {status: "fail", value: [400, "URL protocol must be `https:`"]}
// check url host
if (!["fbcdn.net", "cdninstagram.com"].some(host => url.host.endsWith(host))) return {status: "fail", value: [400, "URL host is not allowed"]}
return {status: "ok", url}
}
function statusCodeIsAcceptable(status) {
return (status >= 200 && status < 300) || status === 304