Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
вообше, задача у меня следующая:
11.01.04 13:19 Число просмотров: 1027
Автор: 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) я не нашел
|
|
|