diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js
index 818177754a..5d33b4d9b5 100644
--- a/public/src/admin/extend/plugins.js
+++ b/public/src/admin/extend/plugins.js
@@ -195,7 +195,7 @@ define('admin/extend/plugins', [
let html = '';
activePlugins.forEach(function (plugin) {
html += `
-
${plugin}
@@ -233,7 +233,7 @@ define('admin/extend/plugins', [
const plugins = $('#order-active-plugins-modal .plugin-list').children();
const data = [];
plugins.each(function (index, el) {
- data.push({ name: $(el).text(), order: index });
+ data.push({ name: $(el).attr('data-plugin'), order: index });
});
socket.emit('admin.plugins.orderActivePlugins', data, function (err) {
diff --git a/src/socket.io/admin/plugins.js b/src/socket.io/admin/plugins.js
index 46d77c9c1a..b8890f9e61 100644
--- a/src/socket.io/admin/plugins.js
+++ b/src/socket.io/admin/plugins.js
@@ -5,6 +5,7 @@ const nconf = require('nconf');
const plugins = require('../../plugins');
const events = require('../../events');
const db = require('../../database');
+const { pluginNamePattern } = require('../../constants');
const Plugins = module.exports;
@@ -41,7 +42,14 @@ Plugins.orderActivePlugins = async function (socket, data) {
throw new Error('[[error:plugins-set-in-configuration]]');
}
data = data.filter(plugin => plugin && plugin.name);
- await Promise.all(data.map(plugin => db.sortedSetAdd('plugins:active', plugin.order || 0, plugin.name)));
+
+ data.forEach((plugin) => {
+ if (!pluginNamePattern.test(plugin.name)) {
+ throw new Error('[[error:invalid-plugin-id]]');
+ }
+ });
+
+ await db.sortedSetAdd('plugins:active', data.map(p => p.order || 0), data.map(p => p.name));
};
Plugins.upgrade = async function (socket, data) {