mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-28 01:21:13 +01:00
fix: #9636, sanitize all attributes in meta and link tags
This commit is contained in:
@@ -68,13 +68,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function buildLinkTag(tag) {
|
function buildLinkTag(tag) {
|
||||||
var link = tag.link ? 'link="' + tag.link + '" ' : '';
|
const attributes = ['link', 'rel', 'as', 'type', 'href', 'sizes', 'title'];
|
||||||
var rel = tag.rel ? 'rel="' + tag.rel + '" ' : '';
|
const [link, rel, as, type, href, sizes, title] = attributes.map(attr => (tag[attr] ? `${attr}="${tag[attr]}" ` : ''));
|
||||||
var as = tag.as ? 'as="' + tag.as + '" ' : '';
|
|
||||||
var type = tag.type ? 'type="' + tag.type + '" ' : '';
|
|
||||||
var href = tag.href ? 'href="' + tag.href + '" ' : '';
|
|
||||||
var sizes = tag.sizes ? 'sizes="' + tag.sizes + '" ' : '';
|
|
||||||
var title = tag.title ? 'title="' + tag.title + '" ' : '';
|
|
||||||
|
|
||||||
return '<link ' + link + rel + as + type + sizes + title + href + '/>\n\t';
|
return '<link ' + link + rel + as + type + sizes + title + href + '/>\n\t';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,7 +154,10 @@ Tags.parse = async (req, data, meta, link) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!tag.noEscape) {
|
if (!tag.noEscape) {
|
||||||
tag.content = utils.escapeHTML(String(tag.content));
|
const attributes = Object.keys(tag);
|
||||||
|
attributes.forEach((attr) => {
|
||||||
|
tag[attr] = utils.escapeHTML(String(tag[attr]));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return tag;
|
return tag;
|
||||||
@@ -168,12 +171,18 @@ Tags.parse = async (req, data, meta, link) => {
|
|||||||
addIfNotExists(meta, 'name', 'description', Meta.config.description);
|
addIfNotExists(meta, 'name', 'description', Meta.config.description);
|
||||||
addIfNotExists(meta, 'property', 'og:description', Meta.config.description);
|
addIfNotExists(meta, 'property', 'og:description', Meta.config.description);
|
||||||
|
|
||||||
link = results.links.links.concat(link || []);
|
link = results.links.links.concat(link || []).map((tag) => {
|
||||||
|
if (!tag.noEscape) {
|
||||||
|
const attributes = Object.keys(tag);
|
||||||
|
attributes.forEach((attr) => {
|
||||||
|
tag[attr] = utils.escapeHTML(String(tag[attr]));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return tag;
|
||||||
meta: meta,
|
});
|
||||||
link: link,
|
|
||||||
};
|
return { meta, link };
|
||||||
};
|
};
|
||||||
|
|
||||||
function addIfNotExists(meta, keyName, tagName, value) {
|
function addIfNotExists(meta, keyName, tagName, value) {
|
||||||
|
|||||||
Reference in New Issue
Block a user