//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /** * Sanitize SQL function * ============================================================================== * @description this function takes in a text(or number) or object or array or * boolean and returns a sanitized version of the same input. * * @param {string|number|object|boolean} input - Text or number or object or boolean * @param {boolean?} spaces - Allow spaces? * * @returns {string|number|object|boolean} */ function sanitizeSql(input, spaces) { /** * Initial Checks * * @description Initial Checks */ if (!input) return ""; if (typeof input == "number" || typeof input == "boolean") return input; if (typeof input == "string" && !input?.toString()?.match(/./)) return ""; if (typeof input == "object" && !Array.isArray(input)) { //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// const newObject = sanitizeObjects(input, spaces); return newObject; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } else if (typeof input == "object" && Array.isArray(input)) { //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// const newArray = sanitizeArrays(input, spaces); return newArray; //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// /** * Declare variables * * @description Declare "results" variable */ let finalText = input; if (spaces) { } else { finalText = input .toString() .replace(/\n|\r|\n\r|\r\n/g, "") .replace(/ /g, ""); } //////////////////////////////////////// //////////////////////////////////////// //////////////////////////////////////// const escapeRegex = /select |insert |drop |delete |alter |create |exec | union | or | like | concat|LOAD_FILE|ASCII| COLLATE | HAVING | information_schema|DECLARE |\#|WAITFOR |delay |BENCHMARK |\/\*.*\*\//gi; finalText = finalText .replace(/(? { const value = objectUpdated[key]; if (!value) { delete objectUpdated[key]; return; } if (typeof value == "string" || typeof value == "number") { objectUpdated[key] = sanitizeSql(value, spaces); } else if (typeof value == "object" && !Array.isArray(value)) { objectUpdated[key] = sanitizeObjects(value, spaces); } else if (typeof value == "object" && Array.isArray(value)) { objectUpdated[key] = sanitizeArrays(value, spaces); } }); return objectUpdated; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// /** * Sanitize Objects Function * ============================================================================== * @description Sanitize objects in the form { key: "value" } * * @param {string[]|number[]|object[]} array - Database Full Name * @param {boolean?} spaces - Allow spaces * * @returns {string[]|number[]|object[]} */ function sanitizeArrays(array, spaces) { let arrayUpdated = [...array]; arrayUpdated.forEach((item, index) => { const value = item; if (!value) { arrayUpdated.splice(index, 1); return; } if (typeof item == "string" || typeof item == "number") { arrayUpdated[index] = sanitizeSql(value, spaces); } else if (typeof item == "object" && !Array.isArray(value)) { arrayUpdated[index] = sanitizeObjects(value, spaces); } else if (typeof item == "object" && Array.isArray(value)) { arrayUpdated[index] = sanitizeArrays(item, spaces); } }); return arrayUpdated; } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// module.exports = sanitizeSql;