#string #mutable
#строка #изменяемый
Вопрос:
Часто можно услышать, что строки неизменяемы, и это повышает безопасность. Я понимаю идею о том, что, поскольку строки являются окончательными, их содержимое не может быть изменено позже. Но даже если содержимое может быть изменено, я думаю, что это все равно безопасно, поскольку код написан разработчиком, а не злоумышленником.
Или же на практике, как эта атака выполняется на самом деле?
Я видел онлайн-пример, в котором указывалось, что злоумышленник может обойти защиту, если строки изменчивы. Я не понимаю. Приведенный ниже код написан разработчиком. Это та часть, к которой злоумышленник никогда не сможет прикоснуться. Независимо от того, изменчивы строки или нет, злоумышленники никогда не смогут изменить их значения, верно?
public class FileInputStream
{
private String filename;
public FileInputStream(String filename)
{
if (!allowedToReadFile(filename))
throw new SecurityException();
this.filename = filename;
}
...
}
Ответ №1:
Я полагаю, что вы имеете в виду переполнение памяти, если строка изменчива, то она имеет фиксированный размер памяти, который нельзя изменить, если это не так, можно ввести достаточно длинное значение, которое может переполняться в другие области памяти и переопределять содержимое других переменных, следовательно, вводяугроза безопасности.
например, допустим, у вас есть две переменные в вашей программе, var1 и var2, обе являются предопределенными строками размером 3 байта, чем будет выглядеть ваше распределение памяти:
[var1, var1, var1, var2, var2, var2]
и фактические значения при инициализации:
[0,0,0,0,0,0]
Затем вы запрашиваете у пользователя ввод и получаете «ааааа», ваш стек памяти будет выглядеть так
[a,a,a,a,0,0]
это означает, что у вас есть переполнение между первой переменной и второй.
Это очень зависит от языка.
Комментарии:
1. это звучит как-то абстрактно, не могли бы вы привести пример того, как добиться атаки на изменение, чтобы открыть другой неожиданный файл этим?
2. Спасибо за ваш пример. Это очень подробно. Итак, предполагается, что злоумышленник знает, как распределяется память, и для этого злоумышленнику вводится запрос. Я правильно понял, что вы указали? Возвращаясь к примеру, если это так, я боюсь, что вероятность такого рода атаки будет очень низкой, чтобы открыть другие файлы, потому что как злоумышленники могли узнать, что драгоценно для осмысленной атаки, даже если действительно существует вход для его перезаписи?
3. Это зависит от используемого вами языка, если это c, он выполняется для сборки, и злоумышленник может перепроектировать и просмотреть расположение памяти. Если вы считаете этот ответ приемлемым, пожалуйста, отметьте его как принятый, спасибо!
4. Извините, я все еще не понимаю, как это может привести к значимой атаке в отношении приведенных выше примеров, если только атака не рассматривается как просто попытка ввести достаточно большой ввод, чтобы вообще испортить систему.