Как зашифровать адреса электронной почты с помощью JQuery

Не удалось избежать публикации минималистского метода без зависимости или библиотек. Для этого требуется новый API-интерфейс. Могу ли я использовать его?

var url = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="

fetch(url)
.then(res => res.blob())
.then(blob => console.log(blob))

С помощью этого метода вы также можете легко получить arraybuffer, text и json


Я сделал простой тест производительности по сравнению с версией синхронизации Джереми es6. Версия синхронизации будет блокировать UI некоторое время.

// get some dummy gradient image
var img=function(){var a=document.createElement("canvas"),b=a.getContext("2d"),c=b.createLinearGradient(0,0,200,100);a.width=a.height=3000;c.addColorStop(0,"red");c.addColorStop(1,"blue");b.fillStyle=c;b.fillRect(0,0,a.width,a.height);return a.toDataURL()}();


async function perf() {
  
  const blob = await fetch(img).then(res => res.blob())
  // turn it to a dataURI
  const url = img
  const b64Data = url.split(',')[1]

  // Jeremy Banks solution
  const b64toBlob = (b64Data, contentType = '', sliceSize=512) => {
    const byteCharacters = atob(b64Data);
    const byteArrays = [];
    
    for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
      const slice = byteCharacters.slice(offset, offset + sliceSize);
      
      const byteNumbers = new Array(slice.length);
      for (let i = 0; i < slice.length; i++) {
        byteNumbers[i] = slice.charCodeAt(i);
      }
      
      const byteArray = new Uint8Array(byteNumbers);
      
      byteArrays.push(byteArray);
    }
    
    const blob = new Blob(byteArrays, {type: contentType});
    return blob;
  }

  // bench blocking method
  let i = 1000
  console.time('b64')
  while (i--) {
    await b64toBlob(b64Data)
  }
  console.timeEnd('b64')
  
  // bench non blocking
  i = 1000

  // so that the function is not reconstructed each time
  const toBlob = res => res.blob()
  console.time('fetch')
  while (i--) {
    await fetch(url).then(toBlob)
  }
  console.timeEnd('fetch')
  console.log('done')
}

perf()

8
задан Anant Singh---Alive to Die 14 December 2017 в 07:07
поделиться

5 ответов

Используя JQuery может не быть маршрут, которым Вы хотите следовать, так как это было бы на стороне клиента... Существует ли причина, которую Вы не шифруете на стороне сервера?

6
ответ дан 5 December 2019 в 10:45
поделиться

Ну, так же, как комментарий Вы, вероятно, хотите, чтобы источник имел одетый адрес электронной почты и затем использовал jQuery, чтобы исправить или создать ссылку, чтобы иметь корректный адрес..., потому что боты будут смотреть на источник, не результаты выполнения Вашего JavaScript ;-)

10
ответ дан 5 December 2019 в 10:45
поделиться

К виду автожелезнодорожных перевозок на то, что предлагал Mike Stone, что я сделаю, шифруют его на серверной стороне и имеют что-то на серверной стороне, которая дешифрует его и возвратит его назад как JSON (jsonresult в mvc платформе, веб-сервисе, http обработчик, безотносительно). Тем путем Вы могли использовать jQuery для de-obfuscate адреса электронной почты, когда Вы хотели, но он все еще перепутает любого бота, который не поддерживает сценарий Java. Снова это не пуленепробиваемое решение, но оно может сделать то, что Вы ищете.

0
ответ дан 5 December 2019 в 10:45
поделиться

Семантические нацисты сказали бы "кодирование", "не шифрование". Шифрование подразумевает, что секрет требуется, чтобы декодировать. Преобразование в синтаксис объекта HTML было бы достойным процессом кодирования для не допускания надоедливых людей, но боты могли легко декодировать его.

0
ответ дан 5 December 2019 в 10:45
поделиться

То, что я сделал, запутывают его, когда это представляется, и скройте его, затем используйте JavaScript, чтобы зафиксировать путаницу и показать ссылку.

Например, можно представить это с сервера:

<a href="mailto:some_address^^some_domain$$com" style='display:none'>Email me</a>

затем использование JavaScript можно использовать regex для свопинга ^^ для @ и $$ для .

Независимо от того, что схема, которую можно придумать, будет, вероятно, прекрасна. Конечно, если бот понимает JavaScript затем, он не имеет значения так или иначе.

Вы заблокируете 95% ботов, которые появляются, Ваш путь и остальная часть Ваших пользователей будут видеть адрес очень хорошо.

0
ответ дан 5 December 2019 в 10:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: