этот вопрос может быть связан с субъективным вопросом, но это не совсем один.
При разработке веб-сайта вы должны знать несколько моментов: атаки XSS, SQL-инъекция и т.д. Это может быть очень сложно (и занять много времени, чтобы закодировать), чтобы обеспечить все возможные атаки.
Я всегда пытаюсь защитить свое приложение, но не знаю, когда остановиться.
Возьмем тот же пример: социальные сети, подобные Facebook. (Потому что веб-сайт банка должен обеспечить все его данные.)
Я вижу несколько подходов:
-
Не защищайте XSS, SQL-инъекцию... Это можно сделать, когда вы доверяете своему пользователю: конец для частного предприятия. Но защищаете ли вы этот тип приложения?
-
Безопасные атаки только тогда, когда пользователь пытается получить доступ к не принадлежащим им данным: это лучший подход.
-
Защитите все, все и все: вы сохраняете все данные (владелец или нет): пользователь не может сломать собственные данные и другие пользовательские данные: это очень долго, и это очень полезно?
-
Защитите обычные атаки, но не защищайте очень жесткие атаки (потому что он слишком длинный для кода, сравнимого с возможностью взлома).
Ну, я не знаю, что делать... Для меня я стараюсь делать 1, 2, 4, но я не знаю, если это отличный выбор.
Есть ли приемлемый риск, чтобы не защищать все ваши данные? Могу ли я защитить все данные, но мне нужно удвоить время, чтобы закодировать вещи? Что подход предприятия к риску и "время - деньги"?
Спасибо, что разделили это, потому что я думаю, что многие разработчики не знают, что является хорошим лимитом.
EDIT: я вижу много ответов, говорящих о XSS и SQL-инъекциях, но это не единственное, о чем нужно заботиться.
Возьмите форум. Поток можно писать на форуме, где мы модератор. Поэтому, когда вы отправляете данные в клиентское представление, вы добавляете или удаляете кнопку "Добавить" для этого форума. Но когда пользователь пытается сохранить поток на стороне сервера, вы должны убедиться, что пользователь имеет право его разделить (вы не можете доверять безопасности клиента).
Это очень простой пример, но в некоторых моих приложениях у меня есть иерархия прав, которую очень сложно проверить (нужно много SQL-запросов...), но в других случаях это действительно трудно найти хак (данные псевдошифрованы в представлении клиента, есть много данных, которые нужно изменить, чтобы сделать взломы, и хакеру нужно хорошее понимание правил моего приложения, чтобы сделать взлом): в этом случае, я могу проверить только дыры безопасности на поверхности (действительно легко взломать), или я могу проверить очень жесткие дыры в безопасности (но это уменьшит мои характеристики для всех пользователей и потребует много времени для разработки).
Второй вопрос: можем ли мы "доверять" (чтобы не создавать жесткий и длинный код, который снижает производительность) на вид клиента для очень тяжелого взлома?
Вот еще один пост, рассказывающий об этом виде взлома: (спящий режим и проверка коллекции) Вопрос безопасности: как защитить коллекции Hibernate, возвращаемые с клиента на сервер?