Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Инъекции

Опубликовано:

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

$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

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.