PDA

View Full Version : фильтры в полях ввода


Alie
28.09.2006, 03:11
На днях решила добавить фильтры в созданные мной модули чтоб пользователи в БД ненароком гадость не засунули. Всё прописано вроде правильно, только вот не фильтруют мои фильтры...
Если обрисовать ситуацию точнее - фильтр работает только в том случае, когда html код был добавлен с помощью редактора! Если код прописан вручную, или редактор отключён - код не фильтруется.

Парадокс прямо:

Код для примера:


//Вводим данные в БД
$result=mysql_query("insert into ".$prefix."_table values ('".$info."')");
//Фильтр при вводе
$info=filter($_POST['info'],nohtml,1);

//Выводим данные из БД
$result=mysql_query("SELECT info FROM ".$prefix."_table");
//Фильтр при выводе
$info = filter($row['info'], nohtml);

Поправьте меня, если какие ошибки есть...
Каким образом редактор влияет на фильтры?

Использовалась Nuke 7.9 Final Release с NukeFiles.

Заранее спасибо ребята!

Soniks
05.10.2006, 14:31
фильтрацию переменной нужно пролводить до того как выполняется запрос на добавление в бд, а не после

Alie
05.10.2006, 18:47
фильтрацию переменной нужно пролводить до того как выполняется запрос на добавление в бд, а не после

Ну да:) Эту глупость я обнаружила и исправила, только вот результат тот-же.... Вот код при вводе данных в бд:

//В форме ввода указаны такие названия переменных:
$from
$mail
$text

//Ставлю фильтр
$from = filter($from, nohtml, 1);
$mail = filter($mail, nohtml, 1);
$text = filter($text, nohtml, 1);

//Записываю в БД
$result = $db->sql_query("insert into " . $prefix . "_test VALUES (NULL, '$from', '$mail', '$text')");

А вот вывод данных:
//Запрос к БД
$sql = "SELECT * FROM ".$prefix."_test ORDER by id DESC LIMIT 0 , 10";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result)) {

//Фильтр данных:
$id = intval($row['id']);
$from = filter($row['from'], nohtml);
$mail = filter($row['mail'], nohtml);
$text = filter($row['text'], nohtml);

//В форме вывода указаны следующие переменные:
$from
$mail
$text

Написала всё именно в том порядке, в каком код расположен в файле...

Alexander-V-Sh
05.10.2006, 18:52
Попробуйте так еще:
//Ставлю фильтр
$from = strip_tags($from);
$from = htmlspecialchars($from);

$text = strip_tags($text);
$text = htmlspecialchars($text);

$mail = strip_tags($mail);
$mail = htmlspecialchars($mail);

//Записываю в БД
$result = $db->sql_query("insert into " . $prefix . "_test VALUES (NULL, '$from', '$mail', '$text')");
Сомневаюсь что грамотно написано, но работает :) У меня аналогично коменты сделаны везде.

Alie
05.10.2006, 19:27
Заработало..... Спасибки :wink:
Кстати, есть такой фильтр, который не просто изменяет символику кода а просто удаляет его?
Например:
Я ввожу код <a href=#>code</a> Delete code. А в БД записывается code Delete code. Или Delete code.

Alexander-V-Sh
05.10.2006, 19:52
так strip_tags вроде и удалает все теги.
Вы пишиите <a href=#>code</a> Delete code
пропускаем через strip_tags и получаем
code Delete code

А htmlspecialchars для замены всего что осталось: слеши, оптострофы, ковычки и т.д.
Еще можно добавить следом фильтр нюки:

$from = filter($from, "nohtml");
Для надежности :))) и мат заодно вырежет еще.

Alie
06.10.2006, 00:13
меня почему-то работает по-другому....
пишу:
<a href=#>code</a> Delete code.
Иду в phpMyAdmin, нахожу нужную таблицу. Там в записях у меня вместо кода его кодовый аналог - &alt; и т.п. При выводе опять генерируется html... И это при том, что стоит фильтр перед выводом данных! Ничего не понимаю.... Получается от SQL иньекций поля защищены, а вот от XSS атак - нет....

Alexander-V-Sh
06.10.2006, 00:17
$from = strip_tags($from);
и
$from = htmlspecialchars($from);
местами не перепутали?
попробуйте только:
$from = strip_tags($from);

Alie
06.10.2006, 03:50
рррррррррррр.... ну конечно! Я действительно неправильно их расположила!
Никак не могу привыкнуть к тому, что

$var1="1";
echo "$var1";
$var1="2";

//Будет выводится 1 а не 2....


Спасибо большое! :jumplol: