diff --git a/lib/database/accounts.js b/lib/database/accounts.js index 51f0a101..f270e5d7 100644 --- a/lib/database/accounts.js +++ b/lib/database/accounts.js @@ -7,6 +7,15 @@ var Logger = require("../logger"); var registrationLock = {}; var blackHole = function () { }; +/** + * Replaces look-alike characters with "_" (single character wildcard) for + * use in LIKE queries. This prevents guests from taking names that look + * visually identical to existing names in certain fonts. + */ +function wildcardSimilarChars(name) { + return name.replace(/[Il1oO0]/g, "_"); +} + module.exports = { init: function () { }, @@ -15,7 +24,7 @@ module.exports = { * Check if a username is taken */ isUsernameTaken: function (name, callback) { - db.query("SELECT name FROM `users` WHERE name=?", [name], + db.query("SELECT name FROM `users` WHERE name LIKE ?", [wildcardSimilarChars(name)], function (err, rows) { if (err) { callback(err, true);