- Главное правило - всегда явно проверять все переменные полученные из внешних источников
(cgi-параметры, cookie, переменные окружения, имя файла и путь (при листинге директории по readdir));
- Вырезать спецсимволы в переменных используемых в сис. функциях (open(), system(), ``) и обращениях к sql.
вырезание: s/[^\w\d_\-.]//g или tr/;<>*|?`&$!#{}[]:'\/\n\r\0// для open(), system(), ``.
не забывать про \0 (передают , который воспринимается как конец стоки)
Пример: $var="../../etc/passwd|\0"; open(F, "/home/test/$var.txt")
- при открытии файла на чтение в open() всегда указывать "<$file";
- Осторожность при использовании переменной внутри eval() и regex (/\Q$var\E/ иначе можно подставить ?{код}).
- Нельзя проверять числовые параметры через "if ($var > 0)", так как может пройти $var="123;somecode";
URL:
Обсуждается: https://www.opennet.ru/tips/info/621.shtml