Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Часто ко мне обращаются клиенты, у которых установлены самописные CMS или модули, написанные начинающими веб-программистами, которые не понимают, что нужно для защиты данных и зачастую копируют функции фильтрации, не задумываясь о том как они работают и что именно нужно с ними делать.
if (count($checkbox)) // Проверяем, является ли переменная массивом
if (is_array($checkbox)) // Проверяем, является ли переменная массивом
Функция идентична mysql_real_escape_string(), исключая то, что mysql_real_escape_string() принимает параметром ещё и указатель на соединение и экранирует в зависимости от кодировки. mysql_escape_string() не делает этого и результат работы не зависит от кодировки, в который вы работаете с БД.
mysql_real_escape_string не всегда подходитПочему?
1. Юзайте PDO
$q = 'SELECT * FROM table where id='.$_GET['id'];
filter_var
В файле index.php (или в любом другом главном файле) напишите такую строчку перед подключением других php файлов
if( in_array( $_GET[...], array( 'some', 'other' ), true ) )
{
include ...;
}if (!$_POST['secret_key'] OR $_POST['secret_key'] != $secret_key)RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]Получается мы создаем запись в базе, которая совершенно бесполезна нам.
Cookie::getinstance()->set('key', 'value');
foreach ($checkbox as $value) { $value = intval($value); if ($value) $new_arr[] = $value; }
$slovo = strip_tags($_GET['slovo']); $slovo = htmlspecailchars($slovo); $slovo = mysql_escape_string($slovo);
В данном случае 0 пофильтруется, хотя является нормальным числовым значением.
Зачем здесь strip_tags?
Во первых это мнимая безопасность, так как данные нужно обрабатывать от XSS перед выводом, а не перед вставкой.
Во вторых вы тупо портите исходные данные.
И дело даже не в именовании переменных, называйте их как хотите.
if (intval($chislo))
$checkbox = $_POST['checkbox'];
$new_arr = array(); // Массив для сохранения отфильтрованных значений
if (is_array($checkbox)) // Проверяем, является ли переменная массивом
{
foreach ($checkbox as $value)
{
$value = intval($value);
if ($value) $new_arr[] = $value; // не допускаем нули
}
}
$new_arr = array_filter(array_map('intval', $_POST['checkbox']));
$number = intval($_GET['input_number']);
if ($number)
{
... выполняем SQL запрос ...
}
Фильтрация и проверка данных PHP. Частые ошибки