• Существует ли хороший стиль программирования на C++11?

    @mamkaololosha
    сотни стандартов программирования / рекомендаций / codestyles

    Вы не в паблике в вк, успокойтесь. Стандарт всего 1.
    www.stroustrup.com/C++11FAQ.html
    https://isocpp.org/std/the-standard
    Кто как его реализует в своём компиляторе - его проблемы. GCC и VS придерживаются его.
    Ответ написан
    1 комментарий
  • Как защитить сайт от вредоносных атак?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Пользователь всегда врет. Все без исключения входящие данные ОБЯЗАТЕЛЬНО должны валидироваться, в случае ошибки - шлем на йух.
    2. Для средних систем - вполне норм подход: во всех публичных методах выполнять обязательную проверку всех аргументов простых типов, чуть что не так - исключение. Так как проверок будет море - критично время их выполнения, можете посмотреть мой проектик: https://github.com/ko-ko-ko/php-assert

    Пример использования:
    /**
     * @param string $login
     * @param string $password
     * 
     * @return int
     * @throws \InvalidArgumentException
     */
    public function login($login, $password)
    {
        Assert::assert($login, 'login')->lengthBetween(4, 16);
        Assert::assert($password, 'password')->lengthBetween(6, 20);
        
        // Business logic here
    }

    Код конечно после таких действий не самый красивый, но надежный. В случае действительно крупного проекта - вполне норм делать проверки в приватных и защищенных методах. Многомерные массивы как аргументы методов можно использовать только в безвыходных ситуациях.
    3. Гетеры и Сеттеры - обязательно. По хорошему классов с публичными свойствами быть не должно.
    4. Права на запуск ТОЛЬКО у точек входа, например index.php.
    5. Log - твой друг. Каждое исключение обязательно должно сохраняться для выяснения причин.
    6. Жесткая блокировка типов запросов. Например на главной - только GET, на login - только POST.
    7. По хорошему в мир должен смотреть только 80/443 порты.
    8. Блокировка сканнеров - в случае подключения запросов на то, чего у вас нет публично, pma (phpmyadmin) например - банить по ip на час, или больше. *Если у вас таки есть публичный pma - сами себе злобные буратины))
    9. По хорошему - стоит снимать метрики работоспособности вашей системы, например в zabbix, это косвенно решает проблему безопасности: отклонение метрик - маячок.
    10. Система контроля версий на проде обязательна, но с заблокированным push + системные файлы vcs закрыты для мира.
    11. Доступ к проду только у сисадмина и тим лида.
    12. Ручные правки кода в не релизное время выполняет тимлид и только после апрува руководства. Эти правки ОБЯЗАТЕЛЬНО должны быть сохранены в репозиторий в ближайшее время, например в течении 3-х дней.
    Ответ написан
    1 комментарий