Есть ли альтернатива запутыванию, чтобы было сложнее получить какую-либо строку в javascript? - PullRequest
2 голосов
/ 20 марта 2010

Я использую DropBox , и у меня возникли проблемы с доступом к моим файлам с других компьютеров: Я не всегда хочу входить в систему, когда нахожусь на общедоступном компьютере, но мне нравится иметь возможность получать доступ к своим материалам, где бы я ни находился.

Итак, я сделал простое приложение, которое, помещая его в общую папку, запускает и получает правильный UID, создает (все еще в вашей общей папке) HTML-код всего содержимого в папке (включая подпапки) в виде дерева. ссылок.

Но я никуда не рискнул его загрузить, поскольку там есть несколько личных вещей (да, я знаю, что имя папки - «ОБЩЕСТВЕННАЯ»).

Итак, мне пришла в голову идея сделать его простой страницей для входа, с правильным паролем, остальная часть страницы должна загрузиться. молодец !, а как же?

Если бы я сделал это путем перенаправления на другой HTML-файл в той же папке, я бы все равно поместил ссылку html в историю веб-поиска и историю обращения к URL-адресу администратора. Поэтому я должен создать его на той же странице.

Я сделал это:

альтернативный текст http://dl.dropbox.com/u/3045472/validate.png

И на данный момент страница представляет собой текстовое поле и кнопку, и только если вы введете правильный пароль (определенный в генераторе), остальная часть страницы ( с деревом ссылок ) будет загружена. Ошибка в том, что все (пароль, URL) легко доступны через исходный код.

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

Как вы, возможно, уже поняли, я использую потоковую запись для написания html-файла (заголовок, циклический переход по ссылкам, снизу), затем он чрезвычайно настраивается, и я могу придумать довольно грязный, но работающий код на C #, хотя мои знания JavaScript не так уж хороши.

Публичные ссылки в DropBox выглядят так:

enter image description here

Подводя итог: Как мне скрыть URL и пароль, чтобы показать их (в основном пароль, конечно) в моем исходном коде, чтобы не потребовалось каких-то усилий при чтении?

PS: Это не так уж лично, если кто-то ДЕЙСТВИТЕЛЬНО этого хочет, он никогда не сможет быть защищен на 100%, и если бы это было так важно, я бы не стал помещать его в общую папку, также, если чувак действительно хочет получить это так сложно, он должен это заслужить.
P.S. 2.: «Используйте ультра-3000'tron obfuscator !! 11» не является реальным ответом, поскольку мой javascript генерируется моей программой на c #.
P.S. 3.: Я не хочу, чтобы другие решения, такие как «использовать серверное приложение и разместить его где-нибудь для перенаправления и бла-бла» или «сжать ссылки в файле .RAR и ввести в него пароль», так как я Делая это ТАКЖЕ, чтобы учиться , и я хочу острые ощущения от этого =)

Обновление 1: Один ответ пока что дает идеальный способ (в соответствии с этим вопросом) скрыть мой пароль.
Теперь я хочу найти хороший способ скрыть URL-адреса, сделать фрагмент кода примера URL-адреса, который я дал, и если это слишком сложно, maby, как сгенерировать его в C # или что-то еще?

Обновление 2: Я подумал о том, чтобы сделать три «запутывающих метода» и выбрать их случайным образом во время выполнения. Таким образом, любой, кто понимает, как читать один XML, может прочитать только одну треть из них, и, возможно, ему будет трудно найти другой остаток этой трети ..

Обновление 3:
Подумав только о REGEX, URL может быть аккуратно заполнен фиктивными символами, не допускающими URL, добавленными случайным образом, которые будут удалены чем-то вроде:

regex.replace(url, ^[^\w\d/:-\.%]+$,"")

Значит, любопытный чувак должен как-то продвинуться в программировании, а? кто-нибудь может сказать мне, будет ли это работать или нет?

Ответы [ 3 ]

5 голосов
/ 20 марта 2010

Ну, как вы уже знаете, это довольно плохой выбор механизма безопасности, но если вы настаиваете ...

Не храните фактическую строку в источнике. Храните, например, его MD5 хэш . Затем, когда пользователь вводит пароль, вычисляет его хэш MD5 и сравнивает его с ожидаемым.

Выезд:

1 голос
/ 20 марта 2010

Чтобы развить идею Миорела, вы также можете зашифровать страницу целом , используя пароль в качестве ключа. По сути, закодируйте весь контент в одну большую строку, попросите пароль и расшифруйте эту строку. Если пароль неверный, он покажет много мусора, вот и все. Как

 content = "encrypted string"

 function decrypt(str, key) { your algorithm of choice here }

 document.write(decrypt(content, prompt('Password?')))

Единственное, что вам нужно, это реализация расшифровки в javascript - но это легко отгадать, например здесь или здесь .

Это также делает отдельную страницу «логин» бесполезной.

1 голос
/ 20 марта 2010

Конечно, это все равно что спрашивать, как вы можете раздеться публично, когда люди вас не видят, но, учитывая это, я предполагаю, что пароль, который вы пытаетесь сохранить, принадлежит DropBox. Я полагаю, вы могли бы запутать пароль и сохранить его в файле cookie. Это, по крайней мере, помешает кому-то просто просмотреть источник, чтобы увидеть пароль, но, очевидно, не помешает кому-то запустить что-то вроде Fiddler и увидеть его.

[snipped server side suggestion]

РЕДАКТИРОВАТЬ: Чтобы взломать URL-адреса, почему бы вам просто не создать URL-адреса на лету, и чтобы ссылки не вызывали функцию javascript для получения URL-адреса? Ваш серверный код заполнил бы массив в этой функции запутанными URL-адресами, и вызывающий код просто передал бы индекс в массив. Таким образом, при просмотре источника нигде, кроме статических незащищенных ссылок, не будет ни одного экземпляра «http».

ДОПОЛНЕНИЕ ОК. теперь, когда у меня есть более четкое представление о проблеме, легче найти решение. В javascript есть библиотеки для шифрования в сети (например, http://point -at-infinity.org / jsaes / ), но проблема сводится к управлению ключами. Начиная с его javascript, он будет общедоступным, но вы можете придумать обручи, чтобы затруднить определение ключа. В общем, эти трюки связаны с косвенным обращением. Например, сохраняйте длинный поток случайных символов (например, 40-50 или более), который генерируется вашим кодом C # и сохраняется в файле HTM. Кроме того, код C # будет хранить в вашей функции javascript числовые значения массива, которые представляют указатели на длинный поток текста, который использовался кодом C # для шифрования паролей (или только всего URL).

...