Forum. MyNuke.ru

Forum. MyNuke.ru (http://forum.mynuke.ru/index.php)
-   Безопасность (http://forum.mynuke.ru/forumdisplay.php?f=13)
-   -   фильтры в полях ввода (http://forum.mynuke.ru/showthread.php?t=2322)

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

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


Ну да:) Эту глупость я обнаружила и исправила, только вот результат тот-же.... Вот код при вводе данных в бд:
Код:
//В форме ввода указаны такие названия переменных: $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:


Часовой пояс GMT +4, время: 07:32.

Copyright © 2005 by Soniks