💡 Инструкция: В каждом вопросе выберите один ответ из пяти. На весь тест отведено 85 минут. Код лучше сначала разобрать вручную: правильный вариант должен объяснять механизм, а не только совпадать с одним запуском.
Вопрос 21 из 30
Как `ImportPath` отличает дочерний путь от соседнего каталога с похожим префиксом на Win32/Win64?
Pascal Delphi / 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.
На Windows нормализованный путь сравнивают с полным корнем, включающим завершающий разделитель, без учёта регистра.
Ручное экранирование ввода равноценно параметрам SQL и командной строки.
Выбор файла стандартным диалогом гарантирует, что итоговый путь останется внутри разрешённого каталога.
Проверка расширения файла достаточна для безопасного импорта и ограничения пути.
Нормализация пути не нужна, если пользователь выбрал файл стандартным диалогом.
Вопрос 26 из 30
В `UpdateVerification` сначала встречается `function AcceptUpdate(const FileName, ExpectedHash: string): Boolean;`, а затем `Result := SameText(THashSHA2.GetHashStringFromFile(FileName), ExpectedHash);`. Какой вывод можно сделать только после чтения обеих строк?
Pascal Delphi / 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.
Совпавшая контрольная сумма из того же канала надёжнее подписи издателя.
HTTPS подтверждает происхождение установщика и заменяет цифровую подпись.
Проверку ограничивают корректностью подписи, не сопоставляя продукт и допустимую версию.
Сравнение с доверенным хешем проверяет целостность файла, но не заменяет цифровую подпись, проверку продукта и допустимой версии.
HTTPS подтверждает происхождение скачанного установщика, поэтому отдельная цифровая подпись не нужна.