Testweb 3 12/23/14 07:11 В коде часто вижу такое$this->request['name']Только это и все, без всяких экранирований символов и тп. Чисто - $this->request['name']. Как на счет инъекций, можно ли сделать? Какая там защита стоит, когда перебрасываем в $this->request Поделиться сообщением Ссылка на сообщение
siv1987 2628 12/23/14 08:05 $this->request содержит данные в html сущности. Кроме того, при вставке и апдейте в бд, экранированния происходит в классе бд, если говорить о sql инъекциях. Sql инъекция возможна при неправильном форматирование параметров, например отсутствия кавычек у строк. Для xss, кавычки и хтмл скобки заменены на сущности. Поделиться сообщением Ссылка на сообщение
Testweb 3 12/23/14 08:07 В смысле html сущности? То есть от инъекций защиты нет? Поделиться сообщением Ссылка на сообщение
siv1987 2628 12/23/14 08:23 Вы знаете что инъекции как минимум могут быть трех типов - 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 Поделиться сообщением Ссылка на сообщение
Testweb 3 12/23/14 09:56 Вы мне скажите, прежде чем загнать в $this->request. Как обрабатывается содержимое поста, гетта и тп... Только та и всего... Поделиться сообщением Ссылка на сообщение
newbie 1723 12/23/14 10:11 Что и куда Вы собрались загонять? В коде часто вижу такоеТак возьмите и посмотрите, с чем его едят.\admin\sources\base\ipsRegistry.php /** * Input parameters * * @var array */ static public $request = array(); Далее по коду видно, как обрабатываются данные. Поделиться сообщением Ссылка на сообщение
Testweb 3 12/23/14 11:14 Странно, у меня так static public function request() { self::checkForInit(); return ipsRegistry::$request; } Вопрос актуален, дак я могу к едрени фени сделать иньекцию или нет?Когда просто в запрос засуну, пересуну,высону , пересуну голую $this->request['name'] ????? Поделиться сообщением Ссылка на сообщение
siv1987 2628 12/23/14 12:56 Вопрос актуален, дак я могу к едрени фени сделать иньекцию или нет?Какую инъекцию? Вам же говорят - для 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.phpstatic public function parseCleanValue( $val, $postParse=true ) Поделиться сообщением Ссылка на сообщение
Testweb 3 12/29/14 05:22 Спасибо. То есть если нет кавычек, тогда можно сделать инъекцию.По поводу ковычек WHERE id="{$this->request['myid']}"Так сделать инъекцию будет невозможно? `date` = '2006-04-04' Для чего имена полей заключают в обратные кавычки, обязательно ли это? Что за последняя уязвимость можно ссылочку? И в кратце сказать, в чем эта уязвимость. Поделиться сообщением Ссылка на сообщение
Testweb 3 12/29/14 05:28 Буду благодарен. Я вовсе запутался в функциях, которые применяют при постах и гетах. Скажите, есть скажем $_POST['Post']. То есть приняли данные такими какие они есть.Какие есть готовые функции в ipb, через которые стоит пропустить? Поделиться сообщением Ссылка на сообщение
siv1987 2628 12/29/14 11:32 То есть если нет кавычек, тогда можно сделать инъекцию.Не совсем правильное заключение. Правильнее будет сказать - если данные не соответствует типу. В кавычках мы заключаем строку, естественно что без них такой запрос не пройдет. В не кавычках обычно указываются числовые форматы - id, timestamp и тд, и здесь нужно убедится в том, что они соответствует формату - либо принудительно приводить к данному типу например через intval если это целочисленное число, либо обрамлять данные в кавычках. Для чего имена полей заключают в обратные кавычки, обязательно ли это?Не обязательно, но если имена полей совпадают с зарезервированными именами в mysql то их нужно обрамлять в обратные кавычки. Об этом можно почитать в справочнике mysql. Скажите, есть скажем $_POST['Post']. То есть приняли данные такими какие они есть.Какие есть готовые функции в ipb, через которые стоит пропустить?Для экранирования перед вставкой в бд - $this->DB->addSlashes Поделиться сообщением Ссылка на сообщение
siv1987 2628 12/29/14 13:30 Я вовсе запутался в функциях, которые применяют при постах и гетах.Вы же сами хотели чтобы вам просто сказали "функцию". Вот вам функцию и указали. А "при постах и гетах" применяется всего-лишь одна функция, и ничего там сложного чтобы запутаться нету. Поделиться сообщением Ссылка на сообщение