информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Где водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Я бы предложил сделать композицию из двух проверок 11.01.04 12:54  Число просмотров: 1044
Автор: Ktirf <Æ Rusakov> Статус: Elderman
Отредактировано 11.01.04 12:56  Количество правок: 2
<"чистая" ссылка>
Решение в лоб. Производительность, вероятно, будет ниже, чем можно было бы добиться, но зато все просто. Сначала проверить
eregi('(isset\()?\$_POST\["([^\'\"]+)"\][^[]{2}',$line, $arr),
а затем проверить на ложность eregi('isset\(\$_POST\["([^\'\"]+)"\][^[]{2}',$line, $arr). Закрывающую скобку для isset проверять не нужно, потому что мы все равно в итоге отбросим эти совпадения.

Update: сорри, вторую проверку нужно делать, конечно, не для исходной строки, а для найденного первым выражением совпадающего фрагмента.
<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); }
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach