Сделать текстовую строку безопасной от взлома? - PullRequest
7 голосов
/ 01 декабря 2011

Предположим, у меня есть важный пароль где-то в моей программе, и я хочу сделать его более безопасным, например:

ftp.password := 'mypassword';

Около 8 лет назад я использовал «взломать вещи» для удовольствия, поэтому я нашел меняи тому подобное, используя OllyDbg.

Мне нужно знать, есть ли способ обезопасить эту вещь от посторонних глаз.Я думал о сохранении пароля непосредственно в компоненте, но опять же не знаю, будет ли он полезен.

Ответы [ 6 ]

17 голосов
/ 01 декабря 2011

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

Если вам необходимо встроить пароль в программу, правило очень простое - никогда не передавайте программу тем, кто не должен ничего делать, что позволяет им пароль.

5 голосов
/ 01 декабря 2011

Хотя ответ, который вы просто не должны делать, является правильным, на практике бывают случаи, когда реальный мир вынуждает вас протянуть руку.В одном или двух случаях, когда я был вынужден применить что-то похожее на подход, который я использовал, я написал код функции, которая сгенерирует известный пароль с нуля, используя некоторую математическую формулу - например, первую букву английских словпервые 8 цифр ПИ в обратном порядке.Конечно, это все еще можно взломать, но это усложняет задачу и должно препятствовать работе обычных браузеров.

Конечно, если вы действительно используете FTP (не SFTP), вы передаете пароль в виде обычного текста.по сети в любом случае.Первоначально я бы больше беспокоился об этом - это гораздо более очевидный вектор атаки.

4 голосов
/ 01 декабря 2011

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

3 голосов
/ 01 декабря 2011

Это не та проблема, которую может решить криптография. Единственный способ защитить это значение - полагаться на контроль доступа пользователя, предоставляемый вашей операционной системой. Убедитесь, что права доступа к файлу максимально ограничены. chown user:user file затем chmod 400 file.

2 голосов
/ 01 декабря 2011

Вот один из способов - он защищает его от любопытных людей с помощью программы просмотра шестнадцатеричных кодов, но, конечно, не будет работать с продвинутыми методами во время выполнения:

function GetA: string;
begin
  Result := #$109#$121#$122;  // 'myp'
end;

function Getb: string;
begin
  Result := #97#$115#$115#$119;  // 'assw'
end;

function GetC: string;
begin
  Result := #$111#$114#$100;  // 'ord'
end;

procedure TForm1.Whatever;
begin
  ftp.Password := GetA + GetB + GetC + GetD;
end;

Как я уже сказал, это не безопасно от кого-тоустановка разрыва во время выполнения кода с помощью отладчика и проверка ftp.password в памяти после того, как он установлен, но это безопасно для шестнадцатеричной программы просмотра.Я обычно устанавливаю значение времени разработки ftp.password на что-то вроде DoyouthinkImthatstupid? для тех, кто любит пробовать.

1 голос
/ 01 декабря 2011

Возможно, вы могли бы зашифровать строку и расшифровать ее обратно, когда прочитали?

Но даже тогда, как уже говорили другие, сохранение пароля внутри приложения - не очень хорошая идея.

Даже если вы закодировали или зашифровали строку, она не будет в безопасности от решительных людей.

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