Как написать функцию util, которая принимает map в качестве входных данных, перебирает все ключи, вызывает эту функцию и возвращает очищенную карту значений ключа?

#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.