Testweb Posted December 23, 2014 Share Posted December 23, 2014 В коде часто вижу такое$this->request['name']Только это и все, без всяких экранирований символов и тп. Чисто - $this->request['name']. Как на счет инъекций, можно ли сделать? Какая там защита стоит, когда перебрасываем в $this->request Link to comment Share on other sites More sharing options...
siv1987 Posted December 23, 2014 Share Posted December 23, 2014 $this->request содержит данные в html сущности. Кроме того, при вставке и апдейте в бд, экранированния происходит в классе бд, если говорить о sql инъекциях. Sql инъекция возможна при неправильном форматирование параметров, например отсутствия кавычек у строк. Для xss, кавычки и хтмл скобки заменены на сущности. Link to comment Share on other sites More sharing options...
Testweb Posted December 23, 2014 Author Share Posted December 23, 2014 В смысле html сущности? То есть от инъекций защиты нет? Link to comment Share on other sites More sharing options...
siv1987 Posted December 23, 2014 Share Posted December 23, 2014 Вы знаете что инъекции как минимум могут быть трех типов - 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 Link to comment Share on other sites More sharing options...
Testweb Posted December 23, 2014 Author Share Posted December 23, 2014 Вы мне скажите, прежде чем загнать в $this->request. Как обрабатывается содержимое поста, гетта и тп... Только та и всего... Link to comment Share on other sites More sharing options...
newbie Posted December 23, 2014 Share Posted December 23, 2014 Что и куда Вы собрались загонять? В коде часто вижу такоеТак возьмите и посмотрите, с чем его едят.\admin\sources\base\ipsRegistry.php /** * Input parameters * * @var array */ static public $request = array(); Далее по коду видно, как обрабатываются данные. Link to comment Share on other sites More sharing options...
Testweb Posted December 23, 2014 Author Share Posted December 23, 2014 Странно, у меня так static public function request() { self::checkForInit(); return ipsRegistry::$request; } Вопрос актуален, дак я могу к едрени фени сделать иньекцию или нет?Когда просто в запрос засуну, пересуну,высону , пересуну голую $this->request['name'] ????? Link to comment Share on other sites More sharing options...
siv1987 Posted December 23, 2014 Share Posted December 23, 2014 Вопрос актуален, дак я могу к едрени фени сделать иньекцию или нет?Какую инъекцию? Вам же говорят - для 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 ) Link to comment Share on other sites More sharing options...
Testweb Posted December 29, 2014 Author Share Posted December 29, 2014 Спасибо. То есть если нет кавычек, тогда можно сделать инъекцию.По поводу ковычек WHERE id="{$this->request['myid']}"Так сделать инъекцию будет невозможно? `date` = '2006-04-04' Для чего имена полей заключают в обратные кавычки, обязательно ли это? Что за последняя уязвимость можно ссылочку? И в кратце сказать, в чем эта уязвимость. Link to comment Share on other sites More sharing options...
Testweb Posted December 29, 2014 Author Share Posted December 29, 2014 Буду благодарен. Я вовсе запутался в функциях, которые применяют при постах и гетах. Скажите, есть скажем $_POST['Post']. То есть приняли данные такими какие они есть.Какие есть готовые функции в ipb, через которые стоит пропустить? Link to comment Share on other sites More sharing options...
siv1987 Posted December 29, 2014 Share Posted December 29, 2014 То есть если нет кавычек, тогда можно сделать инъекцию.Не совсем правильное заключение. Правильнее будет сказать - если данные не соответствует типу. В кавычках мы заключаем строку, естественно что без них такой запрос не пройдет. В не кавычках обычно указываются числовые форматы - id, timestamp и тд, и здесь нужно убедится в том, что они соответствует формату - либо принудительно приводить к данному типу например через intval если это целочисленное число, либо обрамлять данные в кавычках. Для чего имена полей заключают в обратные кавычки, обязательно ли это?Не обязательно, но если имена полей совпадают с зарезервированными именами в mysql то их нужно обрамлять в обратные кавычки. Об этом можно почитать в справочнике mysql. Скажите, есть скажем $_POST['Post']. То есть приняли данные такими какие они есть.Какие есть готовые функции в ipb, через которые стоит пропустить?Для экранирования перед вставкой в бд - $this->DB->addSlashes Link to comment Share on other sites More sharing options...
siv1987 Posted December 29, 2014 Share Posted December 29, 2014 Я вовсе запутался в функциях, которые применяют при постах и гетах.Вы же сами хотели чтобы вам просто сказали "функцию". Вот вам функцию и указали. А "при постах и гетах" применяется всего-лишь одна функция, и ничего там сложного чтобы запутаться нету. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now