Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Нужна проверка вводимых данных


Автор: ежик 28.12.2005, 06:01
Привет пипл.

Вот если мы используем MySQL
и все вводимые значения мы пропускаем через:
Код
#
$dbh->quote();
#
$dbh->selectrow_array('SELECT * FROM 1 WHERE id=?', undef, param(id));
#
$sth = $dbh->prepare('SELECT * FROM 1 WHERE id=?');
$sth->execute(param(id));


Вводимые данные "новости безопасности" используется почти все символы
Стоит ли проверять вводимые данные.
Если стоит то какие именно надо вырезать????

smile smile

Автор: korob2001 28.12.2005, 08:08
Цитата

Стоит ли проверять вводимые данные.

Полученные от пользователя данные, стоит проверять всегда.
Цитата

Если стоит то какие именно надо вырезать????

Для начала запускай программу с переключателем -T, очищай полученные данные по максимуму.
Заменяй все амперсанды на &
Заменяй все < на &lt;
Заменяй все > на &gt;
По возможности откажись от системных вызовов, слава богу в Perl такая возможность есть почти всегда.
Не вставляй полученный параметр в регулярные выражения и транслитерацию.
Пользуйся $dbh->quote()

Хотя наверное лучше всего указывать то, что можно пропустить.

Автор: ежик 28.12.2005, 08:18
Цитата
Для начала запускай программу с переключателем -T, очищай полученные данные по максимуму.

Если я использую mod_perl и OS винда

Автор: korob2001 28.12.2005, 08:23
Под виндой он тоже чудно работает. Думаю mod_perl тоже не помеха, хотя не уверен, никогда на нём не писал.

Автор: sharq 28.12.2005, 11:43
Вот так можно обабатывать полученные от пользователя данные.

Код

# замена html
sub unHTML($) {
    my $text = shift;
    # экранирование html
    my %ENT=('<'=>'lt','>'=>'gt','"'=>'quot');
    $text =~ s!([<>"])!&$ENT{$1};!g;
    $text =~ s|\&lt;!--|<!--|g;
    $text =~ s|--\&gt;|-->|g;
    # обработка \n, \r, \s
    $text =~ s|\n|[br]|g;
    $text =~ s|\r||g;
    $text =~ s|\s+| |g;
    # экранирование стоп-символов
    $text =~ s|\@|{et}|g;
    $text =~ s!\|!|!g;
    $text =~ s|\{|{|g;
    $text =~ s|\}|}|g;
    $text =~ s|\(|(|g;
    $text =~ s|\)|)|g;
    $text =~ s|\[|]|g;
    $text =~ s|\[|]|g;
    $text =~ s|\.|.|g;
    $text =~ s|\,|,|g;
    $text =~ s|\~|~|g;
    $text =~ s|'|'|g;
    $text =~ s|\?|?|g;
    $text =~ s|\+|+|g;
    $text =~ s|\#|#|g;
    $text =~ s|^\$+$|& # 3 6 \;|g;
    $text =~ s|\$|& # 3 6 \;|g;
    $text =~ s|\&|& # 3 8 \;|g;
    $text =~ s|\*|& # 8 7 2 7 \;|g;
    $text =~ s|\^|& # 7 1 0 \;|g;
    return $text;
}


+ для кажого поля нужно добавлять свою проверку, например, для поля чисел - необходимо оставить только цифры:
Код

s/\D//g;



smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)