Проверка данных и Аутентификация

auditOpenEdgeDB[1]Советую вам проверять все, что вводит пользователь, так как для нас любой пользователь может быть злоумышленником. Старайтесь не фильтровать, а валидировать. Другими словами, создавать не черный список, а белый.

Вместо

if (are_bad_symbols($data)) boo();

используйте

if (!all_good_symbols($data)) boo();
        // Например:
        is_numeric($data);
        preg_match('/[a-z0-9_-]*/i', $data)
        ...

Так вы будете уверены, что информация чиста и никаких угроз для безопасности не будет.
Если вы составляете список запрещённых символов, всегда можете просмотреть какой-нибудь нехороший %00 и подобные, о которых, скорее всего, не догадываетесь.

Разумеется, есть ситуации, когда нужна фильтрация. Например, когда пользователь пишет комментарий. В таком случае необходимо отсекать плохие символы.

Есть несколько команд, с которыми надо обращаться очень осторожно.
Это include, require, readfile, eval, «, system, exec, create_, dir, fopen и подобные им.
Трижды проверьте все, если используете их. Ведь если в них используются данные, которые могут прийти от пользователя, будьте уверены — кто-то обязательно этим воспользуется.

  include($_GET['module'] . '.php');

Этот кусок опасен. Если злоумышленник введёт ‘.../.../.../.../.../etc/passwd%00′, он получит пароль и обрадуется. А вы — нет.

Не забывайте, что cookies редактируются ни чуть не сложнее, чем то, что видно в адресной строке. Всё, что приходит как cookies, потенциально может стать атакой и нарушить безопасность. Поэтому, не стоит хранить в cookies уровень доступа пользователя или его ID. Лучше всего дать PHP самому разбираться с этим, используя сессии.

Кстати, хранить в cookies что-либо вообще не советую. Семь раз подумайте, а надо ли это вам…

Запись навигация

Top