Защита сайта при загрузки фото и видео

273
08 июня 2018, 08:40

Есть сайт (на php) на котором я хочу реализовать загрузку/показ фото и видео. К каким мерам безопасности я должен придерживаться и что для этого я должен делать (Меня интерисует конкретно безопасность то есть защита от хакерских атак)

Answer 1

Вопрос обширный. Векторов атак может быть несколько и все их рассматривать можно долго.

Но пожалуй основное, на что стоит обратить внимание - чтобы вам вместо картинки не передали на сервер что-то другое: php скрипт, html страницу, или другой контент, который при публикации на сервере потенциально может вызвать проблему: php срипт думаю комментировать не требуется; а вот html-страница может содержать например js код для кражи cookie.

Answer 2

Затрону тему немного более обширную - лучше взять за правило проверку всех вводимых полей с целью избежать нежелательных инъекций и проникновений на сайт.Вот пример регулярок, которые помогут вам в данных проверках:

Набор из букв и цифр (латиница):
^[a-zA-Z0-9]+$
Набор из букв и цифр (латиница + кириллица):
^[а-яА-ЯёЁa-zA-Z0-9]+$
Домен (например abcd.com):
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$
IPv4:
((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)
IPv6:
((^|:)([0-9a-fA-F]{0,4})){1,8}$
Имя пользователя (с ограничением 2-20 символов, которыми могут быть буквы и цифры, первый символ обязательно буква):
^[a-zA-Z][a-zA-Z0-9-_\.]{1,20}$
Пароль (Строчные и прописные латинские буквы, цифры):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$
Пароль (Строчные и прописные латинские буквы, цифры, спецсимволы. Минимум 8 символов):
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$
Дата в формате YYYY-MM-DD:
[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01]) 
UPD. Более строгая проверка, предложенная runcore:
(19|20)\d\d-((0[1-9]|1[012])-(0[1-9]|[12]\d)|(0[13-9]|1[012])-30|(0[13578]|1[02])-31)
Дата в формате DD/MM/YYYY:
(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d
Целые числа и числа с плавающей точкой (разделитель точка):
\-?\d+(\.\d{0,})?
UUID:
^[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12}$
Широта или долгота:
-?\d{1,3}\.\d+
UPD. E-mail (от kvf77):
^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$
Answer 3

Обязательно проверять содержимое файла по mime типу. В php есть встроенная функция mime_content_type или сторонние наработки. Это конечно не единственное что поможет избежать действий лиц с пониженной социальной ответственностью :)

READ ALSO
Добавление новых задач (cron)

Добавление новых задач (cron)

Подскажите реализацию следующей задачиТребуется выполнение что-то наподобие cron либо же как то добавлять новую крон задачу средствами php на сайт

251
Laravel ошибка в создании нового проекта

Laravel ошибка в создании нового проекта

В чём суть же проблемы я установил laravel,обновил composer и что же я вижу?

221
Проблемы с кодировкой при шифровании

Проблемы с кодировкой при шифровании

Использую данный класс для шифрования

252
Yii2 Nav::widget убрать ul, li

Yii2 Nav::widget убрать ul, li

Как корректно убрать теги списка ul , li из выдачи виджетом? Пример

276