#node.js #sails.js
#node.js #sails.js
Вопрос:
Это функция addorUpdateAddress вместо того, чтобы использовать этот sanitizeXSS и decrypt_key снова и снова, напишите функцию util, которая принимает map в качестве входных данных, перебирает все ключи и вызывает эту функцию и возвращает очищенную карту значений ключа.
addOrUpdateAddress : function (request, resolve)
{
const customerKey = sanitizeXSS(decrypt_key(request.customer_key));
const lat = sanitizeXSS(decrypt_key(request.lat));
const lng = sanitizeXSS(decrypt_key(request.lng));
const line1 = sanitizeXSS(decrypt_key(request.line1));
const line2 = sanitizeXSS(decrypt_key(request.line2));
const city = sanitizeXSS(decrypt_key(request.city));
const pincode = sanitizeXSS(decrypt_key(request.pincode));
const state = sanitizeXSS(decrypt_key(request.state));
const contact = sanitizeXSS(decrypt_key(request.contact));
const landmark = request.landmark?sanitizeXSS(decrypt_key(request.landmark)):null;
}
sanitizeXSS: string => {
const map = {
'amp;': 'amp;amp;',
'<': 'amp;<',
'>': 'amp;>',
'"': 'amp;quot;',
"'": 'amp;#x27;',
"/": 'amp;#x2F;',
};
const reg = /[amp;<>"'/]/ig;
return string.replace(reg, (match)=>(map[match]));
}
function decrypt_key(message, action)
{
var text = message;
var encrypted = "";
for(var i = 0; i < text.length; i ) {
var ASCII = text[i].charCodeAt(0);
var n = null;
if(i % 2 == 0) {
n = action == 'encrypt' ? ASCII 4 : ASCII - 4;
}
else if(i % 2 == 1) {
n = action == 'encrypt' ? ASCII 3 : ASCII - 3;
}
var s = String.fromCharCode(n);
encrypted = s;
}
return encrypted;
}
Ответ №1:
Да, вы можете написать такую функцию.
function sanitizeXSS(string){
const map = {
'amp;': 'amp;amp;',
'<': 'amp;<',
'>': 'amp;>',
'"': 'amp;quot;',
"'": 'amp;#x27;',
"/": 'amp;#x2F;',
};
const reg = /[amp;<>"'/]/ig;
return string.replace(reg, (match)=>(map[match]));
}
function decrypt_key(message, action)
{
var text = message;
var encrypted = "";
for(var i = 0; i < text.length; i ) {
var ASCII = text[i].charCodeAt(0);
var n = null;
if(i % 2 == 0) {
n = action == 'encrypt' ? ASCII 4 : ASCII - 4;
}
else if(i % 2 == 1) {
n = action == 'encrypt' ? ASCII 3 : ASCII - 3;
}
var s = String.fromCharCode(n);
encrypted = s;
}
return encrypted;
}
function decryptAndSanitizeXss(obj){
let newObj = {}
for(const prop in obj) {
if(obj[prop]){
newObj[prop] = sanitizeXSS(decrypt_key(obj[prop]));
}
}
return newObj
}
function addOrUpdateAddress(request, resolve) {
request = decryptAndSanitizeXss(request)
}
Комментарии:
1. Можете ли вы, пожалуйста, написать, что должно быть их в prop, obj в вашей функции decryptAndSanitizeXss?
2. А также в функции addorUpdateAddress, как она гарантирует, что все эти параметры запроса будут переданы здесь?
3. @neha Для вашего первого комментария, пожалуйста, обратитесь к вызову функции decryptAndSanitizeXss, предоставленному в качестве последней строки. Здесь функция decryptAndSanitizeXss считывает свойство из объекта, которое передается функции, и обновляет его в другом объекте. В качестве резервной копии вы также можете создать клон вашей исходной карты и напрямую обновить свойства в clone.