Pull to refresh
1
0
Андрей Амстеди @amsterdy

developer of life

Send message

Защита от SQL-инъекций в PHP и MySQL

Reading time 26 min
Views 251K
К своему удивлению, я не нашёл на Хабре исчерпывающей статьи на тему защиты от инъекций. Поэтому решил написать свою.

Несколько пространный дисклеймер, не имеющий прямого отношения к вопросу
Давайте признаем факт: количество статей (и комментариев) на тему защиты от SQL-инъекций, появившихся на Хабре в последнее время, говорит нам о том, что поляна далеко не так хорошо истоптана, как полагают некоторые. Причём повторение одних и тех же ошибок наводит на мысль, что некоторые заблуждения слишком устойчивы, и требуется не просто перечисление стандартных техник, а подробное объяснение — как они работают и в каких случаях должны применяться (а в каких — нет).

Статья получилась довольно длинной — в ней собраны результаты исследований за несколько лет — но самую важную информацию я постараюсь компактно изложить в самом начале, а более подробные рассуждения и иллюстрации, а так же различные курьёзы и любопытные факты привести в конце. Также я постараюсь окончательно развеять множественные заблуждения и суеверия, связанные с темой защиты от инъекций.

Я не буду пытаться изображать полиглота и писать рекомендации для всех БД и языков разом. Достаточное количество опыта у меня есть только в веб-разработке, на связке PHP/MySQL. Поэтому все практические примеры и рекомендации будут даваться для этих технологий. Тем не менее, изложенные ниже теоретические принципы применимы, разумеется, для любых других языков и СУБД.

Сразу отвечу на стандартное замечание про ORM, Active record и прочие query builders: во-первых, все эти прекрасные инструменты рождаются не по мановению волшебной палочки из пены морской, а пишутся программистами, используя всё тот же грешный SQL. Во-вторых, будем реалистами: перечисленные технологии — хорошо, но на практике сырой SQL постоянно встречается нам в работе — будь то legacy code или развесистый JOIN, который транслировать в ORM — себе дороже. Так что не будем прятать голову в песок и делать вид, что проблемы нет.

Хоть я и постарался подробно осветить все нюансы, но, вполне возможно, некоторые из моих выводов могут показаться неочевидными. Я вполне допускаю, что мой контекст и контексты читателей могут различаться. И вещи, которые кажутся мне сами собой разумеющимися, не являются таковыми для некоторых читателей. В этом случае буду рад вопросам и уточнениям, которые помогут мне исправить статью, сделав её более понятной и информативной.

Ещё только начав интересоваться темой защиты от инъекций, я всегда хотел сформулировать набор правил, который был бы одновременно исчерпывающим и компактным. Со временем мне это удалось:

Правила, соблюдение которых гарантирует нас от инъекций


  1. данные подставляем в запрос только через плейсхолдеры
  2. идентификаторы и ключевые слова подставляем только из белого списка, прописанного в нашем коде.

Всего два пункта.
Разумеется, практическая реализация этих правил нуждается в более подробном освещении.
Но у этого списка есть большое достоинство — он точный и исчерпывающий. В отличие от укоренившихся в массовом сознании правил «прогонять пользовательский ввод через mysql_real_escape_string» или «всегда использовать подготовленные выражения», мой набор правил не является катастрофическим заблуждением (как первое) или неполным (как второе).

Но вперёд, читатель — перейдём уже к подробному разбору.
Читать дальше →
Total votes 128: ↑98 and ↓30 +68
Comments 97

Пишем свой API для сайта с использованием Apache, PHP и MySQL

Reading time 9 min
Views 159K

С чего все началось



Разрабатывая проект, я столкнулся с необходимостью организации клиент-серверного взаимодействия приложений на платформах iOS и Android с моим сайтом на котором хранилась вся информация — собственно БД на mysql, картинки, файлы и другой контент.
Задачи которые нужно было решать — достаточно простые:
регистрация/авторизация пользователя;
отправка/получение неких данных (например список товаров).

И тут-то мне захотелось написать свой API для взаимодействия с серверной стороной — большей своей частью для практического интереса.

Входные данные



В своем распоряжении я имел:
Сервер — Apache, PHP 5.0, MySQL 5.0
Клиент — Android, iOS устройства, любой браузер

Я решил, что для запросов к серверу и ответов от него буду использовать JSON формат данных — за его простоту и нативную поддержку в PHP и Android. Здесь меня огорчила iOS — у нее нет нативной поддержки JSON (тут пришлось использовать стороннюю разработку).
Читать дальше →
Total votes 55: ↑24 and ↓31 -7
Comments 25

Куда пойти учиться на программиста

Reading time 8 min
Views 515K


Школьники уже, кажется, сдали ЕГЭ и вот-вот отправятся подавать документы в ВУЗы. Программирование и IT-технологии пользуются стабильным спросом, примерно как юридические и экономические специальности 10 лет назад.

В этой статье я расскажу как работает высшее образование для IT, как правильно выбрать IT-специальность.
Статья будет полезна не только абитурентам-2015, но и школьникам старших классов, которые уже решили связать свою жизнь с IT.
Читать дальше →
Total votes 27: ↑21 and ↓6 +15
Comments 94

Бесплатный учебник электроники, архитектуры компьютера и низкоуровневого программирования на русском языке

Reading time 2 min
Views 245K

Господа! Я рад сообщить, что наконец-то все желающие могут загрузить бесплатный учебник на более чем 1600 страниц, над переводом которого работало более полусотни человек из ведущих университетов, институтов и компаний России, Украины, США и Великобритании. Это был реально народный проект и пример международной кооперации.

Учебник Дэвида Харриса и Сары Харрис «Цифровая схемотехника и архитектура компьютера», второе издание, 2012, сводит вместе миры программного обеспечения и аппаратуры, являясь одновременно введением и в разработку микросхем, и в низкоуровневое программирование для студентов младших курсов. Этот учебник превосходит более ранний вводный учебник «Архитектура компьютера и проектирование компьютерных систем» от Дэвида Паттерсона и Джона Хеннесси, причем соавтор предыдущего учебника Дэвид Паттерсон сам рекомендовал учебник от Харрисов как более продвинутый. Следуя новому учебнику, студенты строят реализацию подмножества архитектуры MIPS, используя платы с ПЛИС / FPGA, после чего сравнивают эту реализацию с индустриальными микроконтроллерами Microchip PIC32. Таким образом вводится вместе схемотехника, языки описания аппаратуры Verilog и VHDL, архитектура компьютера, микроархитектура (организация процессорного конвейера) и программирование на ассемблере — в общем все, что находится между физикой и высокоуровневым программированием.

Как загрузить? К сожалению, не одним кликом. Сначало надо зарегистрироваться в пользовательском коммьюнити Imagination Technologies, потом зарегистрироваться в образовательных программах на том же сайте, после чего наконец скачать:
Читать дальше →
Total votes 117: ↑114 and ↓3 +111
Comments 66

Как Яндекс строил дата-центр с нуля

Reading time 10 min
Views 96K
Этой весной мы получили разрешение на эксплуатацию нашего нового дата-центра. Первого, для которого всё, даже здание, команда Яндекса спроектировала и построила с нуля. За те 18 лет, которые люди ищут в интернете Яндексом, мы прошли большой путь от сервера под столом одного из наших разработчиков до постройки дата-центра, где используем оборудование собственной разработки. По дороге у нас появилось несколько дата-центров в России, в которые мы перестроили прекратившие когда-то свою работу заводы и цеха.



Когда мы выбирали место, где можно строить дата-центр с нуля, холодный климат был одним из важнейших факторов. Но именно в процессе этой стройки мы нашли технологическое решение, которое позволяет нам эксплуатировать ДЦ в более теплом климате. Сейчас мы планируем построить наш следующий дата-центр во Владимирской области. И теперь у нас есть все возможности создать в России дата-центр, который станет одним из самых передовых в мире.

В этом посте мы хотим рассказать, как мы проектировали ДЦ, с какими сложностями столкнулась наша команда в процессе строительства, как проходила пуско-наладка, в чем особенности дата-центров Яндекса и как устроена рекуперация тепла, о которой вы уже могли слышать.
Читать дальше →
Total votes 108: ↑104 and ↓4 +100
Comments 72

Среда веб-разработки на Android

Reading time 5 min
Views 106K

Прелюдия


Здравствуйте, уважаемые хабраюзеры.

На написание данной статьи меня сподвиг пост хабровчанина ilichmeДесктоп – давай, до свидания!. Поэтому, сегодня более детально поговорим о том есть ли жизнь на Марсе насколько возможно и удобно писать код на устройстве с Android на борту. Сразу оговорюсь — обсуждать буду только планшеты, так как о прелестях кодирования на смартфоне и так все ясно. Хоть и речь не о написании кода, а об организации рабочего пространства, которое будет максимально удобным для разработки в условиях, где нет любимых IDE и т.д.

Читать дальше →
Total votes 30: ↑25 and ↓5 +20
Comments 29

О чем молчит диаграмма Ганта или почему проекты всегда опаздывают

Reading time 4 min
Views 93K
Каждый раз, когда я смотрю на диаграммы Ганта [1], меня мучает один и тот же вопрос. Как? Вот как можно быть уверенным, что ресурс А, выполнит задачу Б за 5 дней? Нет, я понимаю, что есть исторические данные, есть, не побоюсь этого слова, статистика. Но вот как можно на основе всего этого делать уверенные прогнозы? Я не понимаю.
Если для вас термины «взаимозависимость событий» и «статистические отклонения» говорят что-то не только по отдельности, но и в совокупности, то статья вас вряд ли заинтересует. А вот если эти термины, употребленные в одном контексте, не говорят вам в чем проблема диаграмм Ганта, то приглашаю под кат, где на простом примере мы это и обсудим.
Читать дальше →
Total votes 55: ↑51 and ↓4 +47
Comments 46

Почему курсор мыши наклонён на 45°?

Reading time 1 min
Views 261K
Посетитель сайта вопросов-ответов StackExchange задал на первый взгляд глупый вопрос: а почему все курсоры во всех операционных системах немножко «кривые», то есть имеют определённый наклон, а не указывают прямо? В самом деле, почему курсор не располагается вертикально, ведь это наиболее удобно для выделения текста и прочих задач?



Ему отвечает эксперт, хорошо знакомый с историей компьютерной техники. Он подтверждает, что изобретатель мыши Дуглас Энгельбарт действительно изображал курсор в виде стрелки вверх, как наиболее логичный вариант выделения (см. скриншот вверху).
Читать дальше →
Total votes 477: ↑459 and ↓18 +441
Comments 125

Как я бросил университет ради разработки собственной игры. Часть 1

Reading time 4 min
Views 60K
image
Привет, Хабрахабр! Наверняка, многие из вас задумывались о разработке собственной игры, но, к сожалению, существует много факторов, которые, всё же, не позволяют нам начать работу над игрой своей мечты: учеба, работа, семья и т.д. Да и, к тому же, мы просто боимся бросить всё и осуществить свою мечту, ибо многих пугает неизвестность, которая нас поджидает, как только мы отклонимся от общепринятых стремлений. В данной статье я расскажу вам о своём нелегком пути к воплощению идеи, ради которой я поставил все на кон.
Читать дальше →
Total votes 89: ↑56 and ↓33 +23
Comments 102

Интервью с hidnplayr

Reading time 10 min
Views 7.1K
Предлагаем Вашему вниманию интервью с Jeffrey Amelynck aka hidnplayr (на Хабре hidnplayr), бельгийским разработчиком в проекте KolibriOS. Ранее о некоторых его разработках уже была статья. Поговорим о Google Summer of Сode, Бельгии, сетевом стеке и перспективах сетевых программ для KolibriOS.
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 2

Что лучше для стартапа: Вьетнам или Таиланд?

Reading time 4 min
Views 53K
Всем привет! Нас зовут Антон и Светлана, и мы вместе работаем над проектом «Я люблю ИП». Почти год назад мы впервые уехали на зимовку в Юго-Восточную Азию и прожили 6 месяцев в Таиланде и 4,5 месяца во Вьетнаме. Нас часто спрашивают, какая из этих стран лучше? В посте мы постараемся объективно рассказать о своём опыте, а выводы вы сделаете сами.


Читать дальше →
Total votes 74: ↑51 and ↓23 +28
Comments 166

Как IT-фрилансеру стать предпринимателем. Часть 3

Reading time 4 min
Views 36K
Всем привет! Мы продолжаем серию постов о том, как IT-фрилансеру стать предпринимателем. Вы уже знаете, почему ИП лучше, чем ООО и как зарегистрировать ИП самостоятельно. Сегодня мы расскажем, что ждёт предпринимателя после регистрации.



Краткий путеводитель для начинающих предпринимателей от «Я люблю ИП»
Читать дальше →
Total votes 29: ↑25 and ↓4 +21
Comments 46

Как IT-фрилансеру стать предпринимателем. Часть 2

Reading time 4 min
Views 56K
Всем привет! В предыдущем посте мы рассказали, зачем фрилансеру ИП и почему ИП лучше, чем ООО. Сегодня вы узнаете, как зарегистрировать ИП самостоятельно и что делать потом.



Всё для самостоятельной регистрации ИП на сайте «Я люблю ИП»
Читать дальше →
Total votes 38: ↑29 and ↓9 +20
Comments 120

Как IT-фрилансеру стать предпринимателем. Часть 1

Reading time 3 min
Views 93K
Всем привет! Это наш первый пост на Хабре, и мы расскажем, как IT-фрилансеру стать предпринимателем.

Вы узнаете, зачем фрилансеру ИП. Почему ИП лучше, чем ООО. Как зарегистрировать ИП самостоятельно. Что делать потом. Надеемся, опыт, который мы накопили за два года нашего проекта «Я люблю ИП», вам пригодится.



Читать дальше →
Total votes 108: ↑85 and ↓23 +62
Comments 258

4 мифа о дизайне Apple, от бывшего дизайнера Apple

Reading time 6 min
Views 157K


Перевод статьи-интервью с бывшим дизайнером Apple Марком Кавано.

Apple — синоним высококлассного дизайна, но о процессе дизайна в компании известно очень мало. Большинство собственных сотрудников Apple не имеют допуска во внутренние студии дизайна. Поэтому нам остаётся только собирать кусочки интервью или просто спекулировать о том, как всё происходит в Apple и каково это на самом деле — быть дизайнером этой компании.

И вот Марк Кавано. Перед основанием Storehouse, Кавано был senior-дизайнером в Apple на протяжении 7 лет, где он работал над Aperture и iPhoto. Позже, Кавано стал евангелистом User Experience в Apple, помогая сторонним разработчикам создавать iOS-приложения, которые правильно ощущались бы на платформах Apple… Кавано был в компании во время ключевого момента, когда Apple выпустила iPhone и создала мир приложений.

В интервью для Co.Design Кавано откровенно говорил о времени, проведённом в Apple — и особенно о тех мифах индустрии, которые ходят вокруг компании и её сотрудниках.
Читать дальше →
Total votes 127: ↑109 and ↓18 +91
Comments 54

Простые догмы при работе с цветом в интерфейсах

Reading time 5 min
Views 110K
image

Привет, username!

Хотел написать большую статью про биологию восприятия цвета, но решил для начала ограничиться простыми правилами для начинающего/продолжающего дизайнера интерфейсов. К сожалению, грамотная работа с цветом присутствует даже не во всех продуктах крупных компаний, поэтому данный текст имеет цель не только обучить новичков, но и напомнить более опытным дизайнерам обо всех тонкостях этого вопроса. Вопрос дальтонизма в статье не освещается.

Читать дальше →
Total votes 149: ↑131 and ↓18 +113
Comments 128

The Modal — правильные модальные окна

Reading time 2 min
Views 180K
Очень часто модальные окна и диалоги делаются при помощи плагинов jQuery. Например, SimpleModal или jqModal. К сожалению, все они, в варианте по умолчанию, работают неправильно.

Что же такое «правильно»?

Модальное окно по определению блокирует работу пользователя с родительским окном до тех пор, пока пользователь его не закроет. То есть:

  1. Пользователю нельзя позволять прокручивать страницу под ним.
  2. При этом, если содержимого в модальном окне очень много, нужно позволить прокручивать содержимое.


По этому принципу работает просмотр фото в Facebook и Вконтакте и, я считаю, что для модальных окон это правильный вариант.

Чтобы не мучать вас заранее деталями реализации, покажу сначала демо плагина jQuery: http://rmcreative.ru/playground/modals_plugin/demo.html.

Ну а теперь немного про реализацию.
Читать дальше →
Total votes 77: ↑67 and ↓10 +57
Comments 81

Вы можете развить свой интеллект: 5 способов максимально улучшить свои когнитивные способности

Reading time 17 min
Views 505K
Не стоит преследовать цели, которые легко достичь. Стоит нацеливаться на то, что удается сделать с трудом, приложив немалые усилия — Альберт Эйнштейн

Несмотря на то, что Эйнштейн не был нейробиологом, он точно знал все, когда говорил о способности человека добиваться чего-либо. Он интуитивно догадывался о том, что лишь сегодня нам удалось подтвердить с помощью данных, а именно: что заставляет когнитивные способности работать на максимально высоком уровне. По существу: То, что тебя не убивает, делает тебя умнее.
Читать дальше →
Total votes 167: ↑135 and ↓32 +103
Comments 108

Курс лекций «Стартап». Питер Тиль. Стенфорд 2012. Занятие 1

Reading time 11 min
Views 719K

Этой весной, Питер Тиль (Peter Thiel), один из основателей PayPal и первый инвестор FaceBook, провел курс в Стенфорде — «Стартап». Перед началом Тиль заявил: «Если я сделаю свою работу правильно, это будет последний предмет, который вам придется изучать».

Один из студентов лекции записывал и выложил транскипт. В данном хабратопике я делаю перевод первого занятия. Если пост покажется стоящим — продолжу переводить и выкладывать.

Конспект лекций — Питер Тиль (курс: CS183) Стартап — Стэнфорд, весна 2012 г.


Занятие 1: Вызов будущего
Занятие 2: Снова как в 1999?
Занятие 3: Системы ценностей
Занятие 4: Преимущество последнего хода
Занятие 5: Механика мафии
Занятие 6: Закон Тиля
Занятие 7: Следуйте за деньгами
Занятие 8: Презентация идеи (питч)
Занятие 9: Все готово, а придут ли они?
Занятие 10: После Web 2.0
Занятие 11: Секреты
Занятие 12: Война и мир
Занятие 13: Вы — не лотерейный билет
Занятие 14: Экология как мировоззрение
Занятие 15: Назад в будущее
Занятие 16: Разбираясь в себе
Занятие 17: Глубокие мысли
Занятие 18: Основатель — жертва или бог
Занятие 19: Стагнация или сингулярность?
Читать дальше →
Total votes 86: ↑76 and ↓10 +66
Comments 33

Information

Rating
Does not participate
Location
Сочи, Краснодарский край, Россия
Date of birth
Registered
Activity