Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Testweb

Инъекции

Recommended Posts

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

$this->request['name']

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Вы знаете что инъекции как минимум могут быть трех типов - 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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

\admin\sources\base\ipsRegistry.php

 

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

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

 

?????

Share this post


Link to post
Share on other sites
Вопрос актуален, дак я могу к едрени фени сделать иньекцию или нет?

Какую инъекцию? Вам же говорят - для 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 )

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

 

`date` = '2006-04-04'

 

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

 

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

Share this post


Link to post
Share on other sites

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

 

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

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

Share this post


Link to post
Share on other sites
То есть если нет кавычек, тогда можно сделать инъекцию.

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

 

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
Я вовсе запутался в функциях, которые применяют при постах и гетах.

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...