Discord window.localStorage не определено.Как получить доступ к localStorage на странице Discord? - PullRequest
0 голосов
/ 26 сентября 2018

Когда я запускаю window.localStorage на https://stackoverflow.com, он возвращает localStorage, но когда я использую ту же команду на странице Discord, он каждый раз возвращает undefined.

Есть ли что-то, что делает Discordудалить их localStorage со стороны клиента?И если да, есть ли способ изменить localStorage до его удаления, предотвратить его удаление или каким-либо другим способом каким-либо образом получить к нему доступ, прежде чем он undefined?

Что-нибудь поможет?

Ответы [ 4 ]

0 голосов
/ 15 декабря 2018

На самом деле, я хочу написать это решение, более свободно.скопируйте и вставьте приведенный ниже код в консоль браузера, когда сайт Discord полностью загружен, тогда window.localStorage еще не undefined.

(() => {
  const iframe = document.createElement('iframe');
  iframe.style.display = 'none';
  document.body.prepend(iframe);
  window.localStorage = iframe.contentWindow.localStorage;
  iframe.remove();
})();

Команда разработчиков Discord удаляет ключ localStorage изглобальный window объект, поэтому я снова создал его и добавляю его в DOM, чтобы использовать его localStorage.

0 голосов
/ 14 декабря 2018

Вы все еще можете получить доступ программно.Они удалили window.localStorage.Это собственное свойство экземпляров окна, но это не свойство данных, а средство доступа.Метод доступа get является фирменным методом, который возвращает значение localStorage любого получателя, у которого есть внутренний слот localStorage.Фактический внутренний слот localStorage текущего окна все еще существует, поэтому вам нужна еще одна фирменная функция get localStorage.К счастью, вы можете получить это многими способами.

function getLocalStoragePropertyDescriptor() {
  const iframe = document.createElement('iframe');
  document.head.append(iframe);
  const pd = Object.getOwnPropertyDescriptor(iframe.contentWindow, 'localStorage');
  iframe.remove();
  return pd;
}

// You can use pd.get.call, pd.get.apply, or use Reflect.apply; but the simplest
// thing to do is probably to just restore the original property:

Object.defineProperty(window, 'localStorage', getLocalStoragePropertyDescriptor());

window.localStorage.heeeeey; // yr old friend is bak

Если это дело гонки вооружений, сторона, заинтересованная в сокрытии localStorage, может попытаться исправить каждый метод и метод доступа через DOM, который возвращает ссылку на объект окна.,Даже если они преуспели, хотя, последнее слово всегда на стороне пользователя: скрипт содержимого расширения браузера, манифест которого объявляет, что он должен быть оценен перед любым другим кодом.(Вот почему возможна блокировка рекламы.)

Хранилище, будь то экземпляры sessionStorage или localStorage, не предназначено для хранения конфиденциальных данных.Это вообще не защищено.Кажется, что эта попытка скрыть это намек на то, что он может быть использован неправильно.

0 голосов
/ 14 декабря 2018

Как и пользователь AkiraMiura, уже упомянул - разработчики страницы «Discord» удалили свойство window.localStorage.Они сделали это следующим образом (цитата из Reddit post ):

Как Discord скрывает localStorage?
....

(function()
{
    var privateLocalStorage = window.localStorage;
    delete window.localStorage;
    console.log(privateLocalStorage);
}());
console.log(window.localStorage); //undefined

Они создают замыкание, в котором выполняются все их локальные операции хранения, и копируют localStorage в переменную, а затем удаляют объект из окна.

Но мы можем использовать localStorage из iframes

Если вы хотите восстановить , используйте localStorage на странице Discord, тогда вы можете взять его из новойiframe с iframe.src = 'about:blank'; Это дает вам возможность работать с сохраненными элементами для страницы «Discord».Вы можете написать:

window.localStorage = iframe.contentWindow.localStorage;

после загрузки iframe, но этот localStorage объект взят из iframe, и поэтому вам не нужно так его писать - лучше, как в моем коде ниже.

Следующий код, который вы можете поместить на страницу "Discord" в консоли разработчика, и вы получите в консоли вывод примерно такого вида:

"45235333 ... WKDrSWDKIS "

Не забудьте войти на страницу" Discord "раньше! (вам даже не нужно заходить на эту страницу).

Код

var iframe = document.createElement('iframe');
iframe.onload = function()
{
    //Iframes must be appended to the DOM in order to be loaded
    //Iframes do not load immediately nor synchronously
    //now (after load) we can use iframe.contentWindow:
    //window.localStorage = iframe.contentWindow.localStorage; //you can use it, but better is like:
    var ifrLocalStorage = iframe.contentWindow.localStorage;
    //But DO NOT: "document.body.removeChild(iframe);" because after it access on 'Storage' will be denied
    console.log(ifrLocalStorage.getItem('fingerprint'));
    //OUTPUT: "45235333...WKDrSWDKIS"
};
iframe.src = 'about:blank';
document.body.appendChild(iframe);

Удачи!

0 голосов
/ 13 октября 2018

Найдено на reddit .TL; DR, они перемещают свои window.localStorage в другую переменную, а затем удаляют window.localStorage.

Один из способов получения localStorage (хотя и вручную), который я нашел, заключается в следующем:

1: goto%AppData%/discord/Local Storage/

2: открыть https_discordapp.com_0.localstorage в SQLite Studio

3: перейти к https_discordapp.com_0 > Tables > ItemTable и дважды щелкнуть по нему.

4: на вкладке Data дваждыщелкните значение и прочитайте / преобразуйте шестнадцатеричные данные, удалив все остальные 00 шестнадцатеричные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...