Уровень $ SAFE не затрагивает все уязвимости на уровне приложений. Инъекционные атаки, которые не проходят через «небезопасную операцию», например межсайтовый скриптинг и SQL-инъекцию. Это включает в себя, более или менее, каждый класс уязвимости для веб-приложений, за исключением, возможно, локального и удаленного включения файлов. Смотрите OWASP Top 10 , $ SAFE не помогает со многими из них.
Уровень $ SAFE защищает вас от уязвимостей системного уровня. Если злоумышленник сможет записать код Ruby в файл в / tmp, он не сможет заставить вашу программу загрузить этот код, если $ SAFE> = 2.
И это, конечно, не включает никаких уязвимостей в самом Ruby. Это намного серьезнее и может полностью обойти $ SAFE.
Или обычные старые переполнения буфера, целочисленные переполнения и т. Д. В самом интерпретаторе Ruby, которые не имеют ничего общего с $ SAFE.
В Rails есть исторические уязвимости, которые возникают независимо от того, включен $ SAFE или нет. Это осложняется тем фактом, что пользовательский ввод хранится в приложениях Rails, и вредоносные данные могут появиться позже.
Отчеты об уязвимостях в приложениях на Ruby других , отличных от Rails и MRI, трудно найти.
Другая большая проблема с $ SAFE состоит в том, что нет реального списка (о котором я знаю), который бы описывал точно , что $ SAFE делает и не защищает. Единственное, что вы можете сделать, это найти ruby_safe_level в eval.c (это более старый eval.c из 1.8.4). В комментариях приведено это описание, но оно довольно расплывчато.
/* safe-level:
0 - strings from streams/environment/ARGV are tainted (default)
1 - no dangerous operation by tainted value
2 - process/file operations prohibited
3 - all generated objects are tainted
4 - no global (non-tainted) variable modification/no direct output
*/
Я думаю, что я пытаюсь сказать, что $ SAFE - это все о безопасности системы. Это делает нормальную работу, но нет никакого реального способа точно знать, что находится и что не защищено. Это не должно быть вашей единственной линией защиты, это скорее защитная сетка, поэтому ничто не ускользает от «небезопасной операции». С другой стороны, это не имеет ничего общего с безопасностью приложений и не спасет ваши данные или пользователей от взлома. Кроме того, у MRI есть история уязвимостей, которые полностью обходят $ SAFE.