Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Testweb

Инъекции

Рекомендованные сообщения

В коде часто вижу такое

$this->request['name']

Только это и все, без всяких экранирований символов и тп. Чисто - $this->request['name']. Как на счет инъекций, можно ли сделать? Какая там защита стоит, когда перебрасываем в $this->request

Поделиться сообщением


Ссылка на сообщение

$this->request содержит данные в html сущности. Кроме того, при вставке и апдейте в бд, экранированния происходит в классе бд, если говорить о sql инъекциях. Sql инъекция возможна при неправильном форматирование параметров, например отсутствия кавычек у строк. Для xss, кавычки и хтмл скобки заменены на сущности.

Поделиться сообщением


Ссылка на сообщение

В смысле html сущности? То есть от инъекций защиты нет?

Поделиться сообщением


Ссылка на сообщение

Вы знаете что инъекции как минимум могут быть трех типов - sql инъекция, xss и php инъекция? Это так, навскидку. Инъекцией называют любые неавторизованные вмешательства в логику работы кода. Говорить о защите от инъекции это тоже самое что говорить о таблетке от болезней. Для каждого типа предусмотренно своя защита, и если бы ее небыло, вредоносных внедрений было бы сплошь и рядом. Как пользователя могу вас успокоить, но как разработчика думаю вам стоит еще почитать литературы.

HTML сущности (мнемоники) http://ru.wikipedia.org/wiki/%D0%9C%D0%BD%D0%B5%D0%BC%D0%BE%D0%BD%D0%B8%D0%BA%D0%B8_%D0%B2_HTML

Поделиться сообщением


Ссылка на сообщение

Вы мне скажите, прежде чем загнать в $this->request. Как обрабатывается содержимое поста, гетта и тп... Только та и всего...

Поделиться сообщением


Ссылка на сообщение

Что и куда Вы собрались загонять?

 

В коде часто вижу такое
Так возьмите и посмотрите, с чем его едят.

\admin\sources\base\ipsRegistry.php

 

	/**
 * Input parameters
 *
 * @var		array
 */
static public $request	= array();

Далее по коду видно, как обрабатываются данные.

Поделиться сообщением


Ссылка на сообщение

Странно, у меня так

 

	static public function request()
{
	self::checkForInit();
	return ipsRegistry::$request;
}

 

Вопрос актуален, дак я могу к едрени фени сделать иньекцию или нет?

Когда просто в запрос засуну, пересуну,высону , пересуну голую $this->request['name']

 

?????

Поделиться сообщением


Ссылка на сообщение
Вопрос актуален, дак я могу к едрени фени сделать иньекцию или нет?

Какую инъекцию? Вам же говорят - для sql (update, insert) предусмотрено экранирования на уровне класса бд. Для xss - html скобки '', слеши, атрибуты событий тегов заменены на сущности (htmlspecialchars, может так быть будет понятнее).

 

Когда просто в запрос засуну, пересуну,высону , пересуну голую $this->request['name']

Вся беда в том, что вы слышали что есть такое слово "инъекция", но не знаете как она работает, или имеете очень скудные представления. Вам бы следовала начать с основ, тогда многое станет понятно - сможете вы провести инъекцию или нет. Литературы на эту тему навалом в сети, начните с нее.

Роль играет не столько защита, а умение ею пользоваться. Какая бы хащита совершенной не была, она не спасет от говнокода и незнания основ фильтрации данных. Если в вкратце, то инъекция предполагает внедрения чужеродного фрагмента в код и изменения его логики работы, которая чаще всего происходит за счет "выхода" за пределами полей (атрибутов). Если говорить о sql запросах:

 

WHERE name='{$name}'

если в переменной $name окажется подобный текст:

 

' OR 1=1 -- 

то и в итоге запрос примет вид:

 

WHERE name='' OR 1=1 -- '

что нарушит первоначальную логику запроса.

$this->request содержит "очищенные данные" некоторые спецсимволы заменены на сущности, и провести таким образом инъекцию невозможно:

 

WHERE name='' OR 1=1 -- '

Но это, например, не спасет при такой формы записи (значение не обрамлено в кавычках):

 

WHERE id={$this->request['myid']}

Также, данные автоматически экранируются при вставке или апдейте в бд $this->DB->update|insert('table', array data), так как массив data проходит принудительную mysql escape string.

 

В общем говоря, если вас это интересует с точки зрения обывателя, то беспокоится вам не следует. Но если вы собираетесь что-то писать или "всунуть", то все зависит от того как вы это всунете и куда, пример уязвимого кода вам показан выше.

Отвечая на вопросы - можно провести инъекцию? - да можно, инъекцию можно провести в любой системе при неправильной логики.

Можно ли провести sql инъекцию с $this->request? - можно, если руки кривые. Доказательство тому последняя найденная уязвимость.

 

Вы мне скажите, прежде чем загнать в $this->request. Как обрабатывается содержимое поста, гетта и тп... Только та и всего...

/admin/sources/base/core.php

static public function parseCleanValue( $val, $postParse=true )

Поделиться сообщением


Ссылка на сообщение

Спасибо. То есть если нет кавычек, тогда можно сделать инъекцию.

По поводу ковычек

 

WHERE id="{$this->request['myid']}"

Так сделать инъекцию будет невозможно?

 

 

`date` = '2006-04-04'

 

Для чего имена полей заключают в обратные кавычки, обязательно ли это?

 

Что за последняя уязвимость можно ссылочку? И в кратце сказать, в чем эта уязвимость.

Поделиться сообщением


Ссылка на сообщение

Буду благодарен. Я вовсе запутался в функциях, которые применяют при постах и гетах.

 

Скажите, есть скажем $_POST['Post']. То есть приняли данные такими какие они есть.

Какие есть готовые функции в ipb, через которые стоит пропустить?

Поделиться сообщением


Ссылка на сообщение
То есть если нет кавычек, тогда можно сделать инъекцию.

Не совсем правильное заключение. Правильнее будет сказать - если данные не соответствует типу. В кавычках мы заключаем строку, естественно что без них такой запрос не пройдет. В не кавычках обычно указываются числовые форматы - id, timestamp и тд, и здесь нужно убедится в том, что они соответствует формату - либо принудительно приводить к данному типу например через intval если это целочисленное число, либо обрамлять данные в кавычках.

 

Для чего имена полей заключают в обратные кавычки, обязательно ли это?

Не обязательно, но если имена полей совпадают с зарезервированными именами в mysql то их нужно обрамлять в обратные кавычки. Об этом можно почитать в справочнике mysql.

 

Скажите, есть скажем $_POST['Post']. То есть приняли данные такими какие они есть.

Какие есть готовые функции в ipb, через которые стоит пропустить?

Для экранирования перед вставкой в бд - $this->DB->addSlashes

Поделиться сообщением


Ссылка на сообщение
Я вовсе запутался в функциях, которые применяют при постах и гетах.

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...