diff --git a/server/modules/rendering/html-image-prefetch/renderer.js b/server/modules/rendering/html-image-prefetch/renderer.js
index 07b8afa7..fc20e454 100644
--- a/server/modules/rendering/html-image-prefetch/renderer.js
+++ b/server/modules/rendering/html-image-prefetch/renderer.js
@@ -1,7 +1,22 @@
const request = require('request-promise')
+const { URL } = require('url')
+
+const BLOCKED_HOSTS = /^(127\.|10\.|172\.(1[6-9]|2\d|3[01])\.|192\.168\.|169\.254\.|::1$|::ffff:)/
+
+function isSafeUrl (urlStr) {
+ let parsed
+ try { parsed = new URL(urlStr) } catch { return false }
+ if (!['http:', 'https:'].includes(parsed.protocol)) return false
+ if (parsed.hostname === 'localhost' || BLOCKED_HOSTS.test(parsed.hostname)) return false
+ return true
+}
const prefetch = async (element) => {
const url = element.attr(`src`)
+ if (!isSafeUrl(url)) {
+ WIKI.logger.warn(`Blocked unsafe prefetch URL: ${url}`)
+ return
+ }
let response
try {
response = await request({