iOS - функция JSONObjectWithData имеет проблему с внедрением JSON - PullRequest
0 голосов
/ 01 ноября 2018

В моем проекте у меня есть некоторые функции Util, конвертирующие NSData в NSDictionary или NSArray, использующие NSJSONSerialization https://developer.apple.com/documentation/foundation/nsjsonserialization/1415493-jsonobjectwithdata?language=objc

Пример:

+ (NSDictionary *) jsonToDictionary: (NSData *)jsonResult mutableContainer:(BOOL)mutContainer mutableString:(BOOL)mutString failBlock:(void(^)(NSError *)) failBlock {
    NSError *error;
    NSDictionary *result = [NSJSONSerialization JSONObjectWithData:jsonResult options:(kNilOptions) || (mutContainer ? NSJSONReadingMutableContainers:kNilOptions) || (mutString ? NSJSONReadingMutableLeaves: kNilOptions) error:&error];
    if (error) {
        if (failBlock) {
            failBlock (error);
        }
    }
    return result;
}

Но при реализации этого проекта используйте Penetration Test от партнера. Они сказали, что у него есть JSON-инъекция .

  • Описание

JavaScript Object Notation или JSON - это открытый формат файла, который использует читаемый человеком текст для передачи объектов данных, состоящих из пар атрибут-значение и типов данных массива.

  • Наблюдение

Во время оценки было замечено, что приложение записывает неподтвержденный ввод в JSON.

  • Заявление

Внедрение JSON происходит, когда данные поступают в программу из ненадежных источников. Этот вызов может позволить злоумышленнику внедрить произвольные элементы или атрибуты в объект JSON. Успешная эксплуатация может потенциально привести к отказу в обслуживании или компрометации мобильного приложения.

  • Рекомендация

При записи пользовательских данных в JSON необходимо соблюдать некоторые рекомендации:

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

  2. Убедитесь, что вся сериализация в JSON выполняется с использованием функции безопасной сериализации, например, NSJSONSerialization.dataWithJSONObject, который разделяет ненадежные данные в одинарных или двойных кавычках и экранирует любые специальные символы.

Как я могу пройти правила теста на пентацию JSON-инъекции, но все же возможность поддерживать правильную функциональность этой функции

...