Хотя мы, разработчики, создаем красивый пользовательский интерфейс и всегда стремимся улучшить 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, я рекомендую вам прочитать это 👇
Если вы узнали что-то новое из этой статьи, не забудьте подписаться на и 👏.