как написать сабж для :
$_POST["smth"] при этом обязательное условие, чтобы конструкций вида
isset ( $_POST["smth"]) не ловились
есть уже функция
eregi('\$_POST\["([^\'\"]+)"\][^[]{2}',$line, $arr), осталось добавить "отрицание" isset 10x
Я бы предложил сделать композицию из двух проверок11.01.04 12:54 Автор: Ktirf <Æ Rusakov> Статус: Elderman Отредактировано 11.01.04 12:56 Количество правок: 2
Решение в лоб. Производительность, вероятно, будет ниже, чем можно было бы добиться, но зато все просто. Сначала проверить
eregi('(isset\()?\$_POST\["([^\'\"]+)"\][^[]{2}',$line, $arr),
а затем проверить на ложность eregi('isset\(\$_POST\["([^\'\"]+)"\][^[]{2}',$line, $arr). Закрывающую скобку для isset проверять не нужно, потому что мы все равно в итоге отбросим эти совпадения.
Update: сорри, вторую проверку нужно делать, конечно, не для исходной строки, а для найденного первым выражением совпадающего фрагмента.
вообше, задача у меня следующая:
11.01.04 13:19 Автор: tdes@work Статус: Незарегистрированный пользователь
вообше, задача у меня следующая:
есть код на PHP, работающий с MySql, соответственно, параметры с форм заносятся в базу данных.
например :
$Field1 = isset($_POST["Field1"]) ? $_POST["Field1"] : 0;
$sql = INSERT INTO Table1 (TableField1) VALUES($Field1);
mysql_query($sql, ....)
в данном виде коде явно подвержен sql-injection, то есть нужно изменить на
$Field1 = isset($_POST["Field1"]) ? form2db($_POST["Field1"]) : ) где form2db, перекодирует специальные sql-символы в безопасный формат.
Но поскольку над кодом работало много всяких юзеров типа меня ;) есть много мест, с отсутствием form2db(). Так как код состоит из 100 файлов, делать проверку вручную не хочется и я написал скрипт:
while (eregi('\$_POST\[\"([^\'\"]+)\"\][^[]{2}',$line, $arr)) { // $_POST["Pattern"] search
$pattern = '\$_POST\[\"';
$pattern .= $arr[1];
$pattern .= '\"\]';
echo $file." ---- ".stripslashes($pattern)."\n";
$line = eregi_replace($pattern,'form2db($_POSTTTT["'.$arr[1].'"])',$line);
}
$line = eregi_replace('\$_POSTTTT','$_POST',$line);
...........................................
Проблема в том, что там где есть isset($_POST["...."]) замену делать нельзя - parse error, и нужно такие случаи фильтровать, но как сделать "отрицание" целого стринга ( isset) я не нашел
пока справился так:11.01.04 14:39 Автор: tdes@work Статус: Незарегистрированный пользователь