Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
| | |
пока справился так: 11.01.04 14:39 Число просмотров: 1035
Автор: tdes@work Статус: Незарегистрированный пользователь
|
$i = 0;
$rpls1 = Array();
$rpls2 = Array();
while (eregi('\$_GET\[\"([^\'\"]+)\"\][^[]{2}',$line, $arr)) { // $_GET["Pattern"] search
if(eregi('isset[ ]*\([ ]*\$_GET\["([^\'"]+)\"\][^[]{2}',$line, $arr)) { // isset ( $_GET["Pattern"] search
$pattern = 'isset[ ]*\([ ]*\$_GET\[\"';
$pattern .= $arr[1];
$pattern .= '\"\]';
//print_r($arr);
$line = eregi_replace($pattern,"REPLACED___$i",$line)."\n";
//$rpls1[$i] = $pattern;
$rpls1[$i] = 'isset($_GET["'.$arr[1].'"]';
$rpls2[$i] = "REPLACED___$i";
$i ++;
}
$pattern = '\$_GET\[\"';
$pattern .= $arr[1];
$pattern .= '\"\]';
echo $file." ---- ".stripslashes($pattern)."\n";
$line = eregi_replace($pattern,'form2db($_GETTTT["'.$arr[1].'"])',$line);
}
$line = eregi_replace('\$_GETTTT','$_GET',$line);
for($j = 0;$j<count($rpls1);$j ++ ) {
echo $rpls2[$j]." --- ".$rpls1[$j]."\n";
$line = eregi_replace($rpls2[$j], $rpls1[$j], $line);
}
|
<beginners>
|
[posix regexpr] 11.01.04 11:46
Автор: tdes@work Статус: Незарегистрированный пользователь
|
как написать сабж для :
$_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 Статус: Незарегистрированный пользователь
|
$i = 0;
$rpls1 = Array();
$rpls2 = Array();
while (eregi('\$_GET\[\"([^\'\"]+)\"\][^[]{2}',$line, $arr)) { // $_GET["Pattern"] search
if(eregi('isset[ ]*\([ ]*\$_GET\["([^\'"]+)\"\][^[]{2}',$line, $arr)) { // isset ( $_GET["Pattern"] search
$pattern = 'isset[ ]*\([ ]*\$_GET\[\"';
$pattern .= $arr[1];
$pattern .= '\"\]';
//print_r($arr);
$line = eregi_replace($pattern,"REPLACED___$i",$line)."\n";
//$rpls1[$i] = $pattern;
$rpls1[$i] = 'isset($_GET["'.$arr[1].'"]';
$rpls2[$i] = "REPLACED___$i";
$i ++;
}
$pattern = '\$_GET\[\"';
$pattern .= $arr[1];
$pattern .= '\"\]';
echo $file." ---- ".stripslashes($pattern)."\n";
$line = eregi_replace($pattern,'form2db($_GETTTT["'.$arr[1].'"])',$line);
}
$line = eregi_replace('\$_GETTTT','$_GET',$line);
for($j = 0;$j<count($rpls1);$j ++ ) {
echo $rpls2[$j]." --- ".$rpls1[$j]."\n";
$line = eregi_replace($rpls2[$j], $rpls1[$j], $line);
}
|
|
|