Вопросы по инъекциям

2.17K
.
Kip-OK, всё передаваемые переменные кроме $id, $user и $page (это числовые переменные) нужно фильтровать, так как в остальных идёт только убирание лишних пробелов.

При приёме данных с последующей их записью в б.д. достаточно их обработать функциеё mysql_real_escape_string(), а при выводе использовать functions::checkout().

Если сразу использовать принимаемые данные, то обрабатывать их functions::check().
.
Блиносвёрт ?
localhost (01.12.2011/14:58)
Зачем? У тебя там конкретные числа, фильтр интвал не пропустит ничего кроме цифр,а одними цифрами ты бяку не сделаешь.
ок поля, которые автоинкрементом заполняются, тоже можно не фильтровать при выводе?
.
OnLine Quest Game
REALball (01.12.2011/14:59)
functions::check() - для джона самое то, в остальных случаях тупо mysql_real_escape_string()
Этим ты экранируешь опасные символы
.
OnLine Quest Game
Jane (01.12.2011/15:00)
ок поля, которые автоинкрементом заполняются, тоже можно не фильтровать при выводе?
Их можно вообще не трогать никаким фильтром,автоинскремент пишет сама база и они не попадают из вне,поэтому их можно (нужно гг) не фильтровать,
.
ПФК ЦСКА forever!
Jane (01.12.2011/15:00)
ок поля, которые автоинкрементом заполняются, тоже можно не фильтровать при выводе?
Зачем? Не надо
.
Блиносвёрт ?
localhost (01.12.2011/15:01)
Их можно вообще не трогать никаким фильтром,автоинскремент пишет сама база и они не попадают из вне,поэтому их можно (нужно гг) не фильтровать,
хорошо
.
k_2
Jane (01.12.2011/14:57)
у меня вопрос такой, предположим я id отфильтровала и отправила в базу
$id = abs(intval($_GET['id']));

то есть туда ушло число..
нужно ли мне при выводе этого поля из базы еще раз фильт
Ненужно, так как полученное значение может содержать только ноль или положительное число.
+ Обычно такие поля в б.д. имеют тип INT, благодаря чему по определению немогут содержать ничего кроме чисел.
--------
P.S.: Этоже относится и к автоинкременту.
.
OnLine Quest Game
И еще просьба к модам.
Оформите норм верхний пост,и допишите туда что при ответе на вопрос желательно давать пояснения что почему.
Будет очень удобно и тем кто задал вопрос и тем кто читает тему,заодно и учится!
.
localhost
OnLine Quest Game
k_2 (01.12.2011/15:03)
+ Обычно такие поля в б.д. имеют тип INT, благодаря чему по определению немогут содержать ничего кроме чисел.
Ну тут может сыграть злую шутку неопытность/
Например когда я начинал работать с базой(учился) то я всегда во все поля ставил тип text или mediumtext так как не знал значение полей кроме текста.
.
1. Инициализация

Перемменные в скрипте должны быть явно инициализированы. Это во первых - правильно с точки зрения самого PHP (ибо не инициализированные переменные вызывают ошибки), во вторых - обезопасит вас от передачи парамметров внутренним переменным из вне (возможно при register_globals on).

Пример:
$error = array(); //инициализируем переменную
$error[] = 'Значение';


2. Типизация

Если наш скрипт за раннее предпологает наличие строго определенного типа конкретной переменной (кпримеру, $id должно содержать целочисленное значение), необходимо принудительно приводить эту перемменную к нужному типу, тем самым, обезопасив себя от передачи зловредных данных.

Пример:

$integer = (int) $_GET['var']; //ожидается целочисленное значение
$float = (float) $_GET['var']; //ожидается дробное значение


3. Фильтрация

На вводе данных, необходимо фильтровать потенциально опасные символы, которые могут послужить в sql-иньекциях и модификация ваших sql-запросов.

Пример:

mysql_query("INSERT INTO table SET
var = '". mysql_real_escape_string($_POST['value']) .'";");


Данные на выводе необходимо фильтровать от XSS атак, которые посредством внедрения зловредных кодов, выполняющихся на машине клиента, могут воровать его информацию (куки, идентификаторы сессий и т.д).


Пример:

htmlentities($_GET['value'], ENT_QUOTES, 'UTF-8');


З.Ы: надеюсь это уменьшит кол-во вопросов.
З.З.Ы: некоторые нюансы все таки не успел описать, ибо тороплюсь с работы , думаю знающие люди дополнят.
Всего: 67