Хотя мы, разработчики, создаем красивый пользовательский интерфейс и всегда стремимся улучшить UX клиентов, нам необходимо понять и устранить некоторые проблемы безопасности.
В этой статье мы рассмотрим проблему безопасности, называемую троянским конем.

Увидеть проблему ⚠️

Как мы все знаем, каждому символу соответствует определенный юникод. Но знаете ли вы, что есть некоторые специальные символы.

func test() {
    let accessLevel = "user"
    if accessLevel != "user⁦// check if admin⁩⁦" {
        print("You're an admin")
    }
}
test()

Этот код на первый взгляд выглядит так, будто выводит «Вы администратор»? Но попробуйте скопировать и вставить его в XCode и посмотреть, как это выглядит. Вот результат.

Подождите секунду..😱 это была моя первая реакция. Теперь похоже, что у него не будет никакого выхода.

Каждый разработчик здесь сказал бы, что на выходе не будет ничего, поскольку предикат в операторе if равен false.

Угадайте, что на выходе:

You're an admin

Таким образом, кто-то может изменить поток вашего приложения. Что, если бы вы разработали программное обеспечение для автономного автомобиля, а внутри кодовой базы было бы что-то вроде этого. Затем водитель нажимал на тормоз, и машина ускорялась ‼️

Этого бы не произошло из-за модульного тестирования, но вы все равно поняли мою точку зрения!

Решение ✅

Не волнуйтесь, есть решение. Решение идеи простое.
Не допускайте использования этих специальных символов в кодовой базе.

Это можно сделать с помощью Swiftlint и добавления пользовательского правила lint.

Правило, которое вам нужно добавить, это следующее

Как было предложено macdrevx в этом Pull request

Если вы хотите узнать, что такое swiftLint, я рекомендую вам прочитать это 👇



Если вы узнали что-то новое из этой статьи, не забудьте подписаться на и 👏.