DP Delphi / Pascal  ·  30 вопросов  ·  ~85 мин  ·  ⏱ Таймер 25:00  ·  Сложный  · 

Безопасность настольного приложения

Вопросы имитируют чтение и сопровождение рабочего Delphi/Pascal-кода. Нужно отделять факт от правдоподобного мифа, учитывать граничные случаи и явно формулировать договор. В тесте 30 вопросов и 18 примеров с кодом; рассматриваются «Хранение секретов», «Подпись обновлений», «Проверка ввода», «Права пользователя», «Качество данных» и «Воспроизводимость результата».

Отвечено: 0 из 30
⏱ --:--
0%
💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 85 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 1 из 30
Почему строка с `ApiKey` остаётся секретом только на уровне исходного намерения, но не после сборки и запуска `EmbeddedSecret`?
PascalDelphi / Pascal · Хранение секретов
// Отделите правило языка от удачного запуска EmbeddedSecret.
program EmbeddedSecret;
const
  ApiKey = 'prod_live_7d82f0f0';
begin
  Writeln('Authorization: Bearer ', ApiKey);
end.
Вопрос 2 из 30
Две реализации темы «Подпись обновлений» совпадают на обычном примере. Какое различие всё же меняет их договор? Сопоставьте обычный путь и изменение состояния.
Вопрос 3 из 30
В практическом сценарии по теме «Проверка ввода» меняются входные данные и порядок действий. Какой вывод остаётся корректным? Сопоставьте обычный путь и изменение состояния.
Вопрос 4 из 30
Две реализации темы «Права пользователя» совпадают на обычном примере. Какое различие всё же меняет их договор? Сопоставьте обычный путь и изменение состояния.
Вопрос 5 из 30
Для темы «Качество данных» обычный путь и граничный путь дают разные риски. Какой вывод учитывает оба, не подменяя один другим?
Вопрос 6 из 30
Какие три значения в `BuildProvenance` нужно сопоставить, чтобы отличить повторяемую сборку от бинарника, полученного из тех же исходников в другом окружении?
PascalDelphi / Pascal · Воспроизводимость результата
// Отделите правило языка от удачного запуска BuildProvenance.
program BuildProvenance;
const
  CompilerId = 'Delphi-12-Athens';
  SourceRevision = 'a17c4e9';
  DependencyLockHash = '3d19...';
begin
  Writeln(CompilerId, ' ', SourceRevision, ' ', DependencyLockHash);
end.
Вопрос 7 из 30
Обычный пример по теме «Хранение секретов» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 8 из 30
Реализацию темы «Подпись обновлений» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 9 из 30
Обычный пример по теме «Проверка ввода» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 10 из 30
В теме «Права пользователя» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 11 из 30
Какую границу размера действительно обеспечивает `ImportDataset` до чтения и разбора JSON?
PascalDelphi / Pascal · Качество данных
// Проверьте размер файла до выделения памяти под его содержимое.
program ImportDataset;
{$APPTYPE CONSOLE}
uses System.Classes, System.JSON, System.SysUtils;
const
  MaxImportBytes = 10 * 1024 * 1024;
var
  Stream: TFileStream;
  Bytes: TBytes;
  Text: string;
  Value: TJSONValue;
begin
  Stream := TFileStream.Create('import.json', fmOpenRead or fmShareDenyWrite);
  try
    if Stream.Size > MaxImportBytes then
      raise EReadError.Create('file too large');
    SetLength(Bytes, Integer(Stream.Size));
    if Length(Bytes) > 0 then
      Stream.ReadBuffer(Bytes[0], Length(Bytes));
  finally
    Stream.Free;
  end;

  Text := TEncoding.UTF8.GetString(Bytes);
  Value := TJSONObject.ParseJSONValue(Text);
  try
    if Value = nil then
      raise EConvertError.Create('invalid JSON');
  finally
    Value.Free;
  end;
end.
Вопрос 12 из 30
В практическом сценарии по теме «Воспроизводимость результата» меняются входные данные и порядок действий. Какой вывод остаётся корректным? Сопоставьте обычный путь и изменение состояния.
Вопрос 13 из 30
Правка по теме «Хранение секретов» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 14 из 30
Какой сценарий по теме «Подпись обновлений» отличит исправную реализацию от версии со скрытым дефектом? Сопоставьте обычный путь и изменение состояния.
Вопрос 15 из 30
Для темы «Проверка ввода» готовят регрессионный набор из двух разных сценариев. Какой набор действительно закрывает обе границы?
Вопрос 16 из 30
Какое наблюдение должен зафиксировать тест именно для последовательности `Result := TPath.Combine('C:\Program Files\MyApp', 'config.ini');` → `TFile.WriteAllText(MachineConfigPath, 'enabled=1');` в `PrivilegedWrite`?
PascalDelphi / Pascal · Права пользователя
// Проследите фактическое поведение PrivilegedWrite.
program PrivilegedWrite;
uses System.IOUtils;
function MachineConfigPath: string;
begin
  Result := TPath.Combine('C:\Program Files\MyApp', 'config.ini');
end;
procedure SaveMachineConfig;
begin
  TFile.WriteAllText(MachineConfigPath, 'enabled=1');
end;
begin
  SaveMachineConfig;
end.
Вопрос 17 из 30
Реализацию темы «Качество данных» заменяют без изменения интерфейса. Какое наблюдаемое свойство обязано сохраниться? Сопоставьте обычный путь и изменение состояния.
Вопрос 18 из 30
Обычный пример по теме «Воспроизводимость результата» проходит, но после изменения состояния возникает дефект. Какое условие объясняет его источник? Сопоставьте обычный путь и изменение состояния.
Вопрос 19 из 30
Какое свойство темы «Хранение секретов» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 20 из 30
В теме «Подпись обновлений» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 21 из 30
Как `ImportPath` отличает дочерний путь от соседнего каталога с похожим префиксом на Win32/Win64?
PascalDelphi / Pascal · Проверка ввода
// Нормализуйте путь и сравнивайте полный корень вместе с разделителем каталога.
program SafePath;
{$APPTYPE CONSOLE}
uses System.IOUtils, System.SysUtils;
function ImportPath(const Root, UserName: string): string;
var
  RootFull, Candidate: string;
begin
  RootFull := IncludeTrailingPathDelimiter(TPath.GetFullPath(Root));
  Candidate := TPath.GetFullPath(TPath.Combine(RootFull, UserName));
  if not SameText(Copy(Candidate, 1, Length(RootFull)), RootFull) then
    raise EArgumentException.Create('path outside root');
  Result := Candidate;
end;
begin
  Writeln(ImportPath('C:\Import', 'data.json'));
end.
Вопрос 22 из 30
Правка по теме «Права пользователя» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 23 из 30
Модуль, использующий тему «Качество данных», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 24 из 30
Правка по теме «Воспроизводимость результата» должна сохранить полезное поведение и убрать риск на соседнем сценарии. Какое требование она обязана выполнить?
Вопрос 25 из 30
В теме «Хранение секретов» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?
Вопрос 26 из 30
В `UpdateVerification` сначала встречается `function AcceptUpdate(const FileName, ExpectedHash: string): Boolean;`, а затем `Result := SameText(THashSHA2.GetHashStringFromFile(FileName), ExpectedHash);`. Какой вывод можно сделать только после чтения обеих строк?
PascalDelphi / Pascal · Подпись обновлений
// Отделите правило языка от удачного запуска UpdateVerification.
program UpdateVerification;
uses System.Hash, System.SysUtils;
function AcceptUpdate(const FileName, ExpectedHash: string): Boolean;
begin
  Result := SameText(THashSHA2.GetHashStringFromFile(FileName), ExpectedHash);
end;
begin end.
Вопрос 27 из 30
Модуль, использующий тему «Проверка ввода», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния.
Вопрос 28 из 30
Какое свойство темы «Права пользователя» становится решающим на граничном входе или при другом порядке действий? Сопоставьте обычный путь и изменение состояния.
Вопрос 29 из 30
Модуль, использующий тему «Качество данных», передают другой команде. Какую ответственность нужно закрепить во внешнем договоре? Сопоставьте обычный путь и изменение состояния. Рассмотрите вариант, где меняется состояние, но внешний интерфейс остаётся прежним.
Вопрос 30 из 30
В теме «Воспроизводимость результата» есть две независимые границы поведения. Какой внешний договор не смешивает их в одно расплывчатое правило?

Ответьте на все 30 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу