Pull to refresh
0
0

User

Send message

Сервисы автопостинга для ВКонтакте

Reading time 2 min
Views 395K
Хабрапривет всем! С недавнего времени я веду свое сообщество ВКонтакте — Music Zone. Долгое время всё было гладко, я постил ~2 записей в день, однако однажды отправившись в другой город по делам (интернета там конечно же нету), я задумался об автопостинге. Немного погуглив, я нашёл несколько сервисов, позволяющих это реализовать.
Читать дальше →
Total votes 30: ↑17 and ↓13 +4
Comments 29

Вредные советы: как нужно заказывать сайты

Reading time 1 min
Views 2.5K
Вдохновившись топиком про вредные советы, предлагаю свой вариант вредных советов о том, как клиентам нужно заказывать сайты.

Если ваш директор (глупый!)
Поручил вам сайт создать,
Ты не бойся обратиться
К другу детства своего.

С другом лучшим в детсаду
Вы водили хоровод,
А теперь твой лучший друг
Возглавляет Web-Завод.

Вместе весело живется
В дружном детском хороводе,
Друг твой быстро наживется
Сделав сайт вам на Народе.

Читать дальше →
Total votes 96: ↑74 and ↓22 +52
Comments 42

Новые возможности XMLHttpRequest2

Reading time 9 min
Views 83K
Одним из незамеченных героев вселенной HTML5 является XMLHttpRequest 2. Строго говоря XHR2 не является частью HTML5 и не является самостоятельным объектом. XHR2 это тот же XMLHttpRequest, но с некоторыми изменениями. XHR2 является неотъемлемой частью сложных веб-приложений, поэтому ему стоит уделить большее внимание.

Наш старый друг XMLHttpRequest сильно изменился, но не многие знают о его изменениях. XMLHttpRequest Level 2 включает в себя новые возможности, которые положат конец нашим безумным хакам и пляскам с бубном вокруг XMLHttpRequest: кросс-доменные запросы, процесс загрузки файлов, загрузка и отправка двоичных данных. Эти возможности позволяют AJAX уверенно работать без каких-либо хаков с новейшими технологиями HTML5: File System API, Web Audio API, и WebGL.

В этой статье будут освещены новые возможности XMLHttpRequest, особенно те, которые можно использовать при работе с файлами.
Читать дальше →
Total votes 133: ↑129 and ↓4 +125
Comments 32

Особенности загрузки файлов на HTML5

Reading time 5 min
Views 58K
После некоторого, опыта решил написать небольшую статью-шпаргалку о загрузке файлов с использованием возможностей HTML5, а именно File API.

Читайте далее:
  1. Поддержка браузерами.
  2. Загрузка через Form Data.
  3. Загрузка через File Reader.

Читать дальше →
Total votes 52: ↑49 and ↓3 +46
Comments 25

PHPExcel и большие файлы

Reading time 4 min
Views 99K
PHPExcel — отличная библиотека с огромным функционалом по работе с форматами xls, xlsx. Можно считывать, записывать, менять форматирование, задавать формулы, а из xlsx можно и картинки вытаскивать.

На хабре уже был пост про эту библиотеку - Универсальное чтение ячеек в PHPExcel. Я остановлюсь только лишь на главном минусе PHPExcel — вечно памяти не хватает, все время сыпятся ошибки «Fatal error: Out of memory». Этот пост о том, как это обойти.

Читать дальше →
Total votes 33: ↑25 and ↓8 +17
Comments 23

Практическое применение MSP430 для web-разработчика

Reading time 8 min
Views 55K
На хабре предостаточно статей для начинающих о том, какой волшебный и замечательный этот MSP430 LaunchPad от Texas Instruments. Однако дальше стандартной мигалки светодиодом обычно никто не заходит. Пора исправлять эту ситуацию.
Работая в команде, мы пользуемся старым добрым SVN для контроля версий. Казалось бы, причём тут микроконтроллеры?
Как раз для сигнализации очередного коммита в репозиторий я и приспособил эту дивную штуковину.

Читать дальше →
Total votes 37: ↑29 and ↓8 +21
Comments 37

Основные положения предстоящей иммиграционной реформы США

Reading time 3 min
Views 86K
Буквально час назад в сети появилась черновая версия основных положений предстоящей иммиграционной реформы США.

www.scribd.com/doc/136230105/Outline-of-the-Border-Security-Economic-Opportunity-and-Immigration-Modernization-Act-of-2013

Поскольку некоторая часть этих положений касается иммиграции в США для программистов, думаю, что хабрасообществу будет интересно услышать их. Сразу замечу, что закон еще не принят и ему предстоит еще долгий путь.

Читать дальше →
Total votes 101: ↑87 and ↓14 +73
Comments 116

PHP класс для удобной и безопасной работы с MySQL

Reading time 9 min
Views 116K
После написания статьи про защиту от инъекций я взялся за написание класса, реализующего изложенные в ней идеи.
А точнее, поскольку ключевой функционал уже использовался в рамках рабочего фремворка, я занялся выделением его в самостоятельный класс. Пользуясь случаем, хочу поблагодарить участников PHPClub-а за помощь в исправлении нескольких критических ошибок и полезные замечания. Ниже я постараюсь описать основные особенности, но сначала небольшой
дисклеймер
Есть несколько способов работы с SQL — можно использовать квери-билдер, можно ORM, можно работать с чистым SQL. Я избрал последний вариант, потому что мне он ближе. Я совсем не считаю первые два плохими. Просто лично мне всегда было тесно в их рамках. Но я ни в коем случае не утверждаю, что мой вариант лучше. Это просто ещё один вариант. Который можно использовать, в том числе, и при написании ORM-а. В любом случае, я считаю, что наличие безопасного способа работать с чистым SQL не может принести какой-либо вред. Но при этом, возможно, поможет последним оставшимся приверженцам использования mysql_* в коде приложения, отказаться, наконец, от этой порочной практики.

В двух словах, класс строится вокруг набора функций-хелперов, позволяющих выполнять большинство операций с БД в одну строку, обеспечивая при этом (в отличие от стандартных API) полную защиту от SQL инъекций, реализованную с помощью расширенного набора плейсхолдеров, защищающих любые типы данных, которые могут попадать запрос.
В основу класса положены три базовых принципа:
  1. 100% защита от SQL инъекций
  2. При этом защита очень удобная в применении, делающая код короче, а не длиннее
  3. Универсальность, портабельность и простота освоения

Остановлюсь чуть подробнее на каждом из пунктов.
Читать дальше →
Total votes 92: ↑51 and ↓41 +10
Comments 103

Защита от 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

Самый частый шаблон SQL инъекций в РНР — бесполезное экранирование символов

Reading time 2 min
Views 35K
По роду своей деятельности, мне приходится выполнять аудиты безопасности исходного кода веб-приложений.
Много веб-приложений и много кода…

В этой статье я хотел бы поделиться одной простой (очень простой) истиной и статистикой, которые вывел и многократно проверил в течении трех последний лет просмотра тонн РНР кода.

Не секрет, что уязвимости внедрения операторов СУБД (SQL injections) являются самыми распространенными из всех серверных уязвимостей веб-приложений. Есть платформы и фреймворки, где такие вещи практически полностью исключены, например ORM'ом и прочим. Но статистика упорно говорит нам об абсолютном преобладании на просторах Интернета веб-приложений с простыми конкатенированными SQL запросами. Кроме того, есть случаи, где ORM вообще применим быть не может. Например, когда от пользовательских данных должны зависеть не только параметры выражений, но и сама логика запроса на уровне операторов.
Читать дальше →
Total votes 90: ↑78 and ↓12 +66
Comments 148

Пишем свой 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

Простой импорт/экспорт в CSV для PHP & MySQL

Reading time 3 min
Views 99K

В ходе разработки сервиса по расчете статистики по управлению запасами для интернет-магазинов возникла задача быстро организовать импорт/экспорт таблиц между разными MySQL серверами. Поскольку надо было сделать просто и прозрачно — оптимизация будет впереди — решил воспользоваться авторскими рекомендация из документации по MySQL 5.0.
Читать дальше →
Total votes 22: ↑13 and ↓9 +4
Comments 6

Сделано на 95%

Reading time 4 min
Views 33K
Вам надо срочно добраться куда-то за 1000км. Вас вызвался довезти человек, за немалую сумму денег, но другого выбора нет. Доехать надо точно, а этот человек вроде как известный водитель, репутация и все такое, сказал, значит вроде должен сделать. Успеть надо доехать за сутки, вы договариваетесь с запасом на 14 часов в дороге и водитель говорит, что не проблема и соглашается.

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

На дороге его останавливает каждый гаишник, он постоянно норовит куда-то свернуть с прямой дороги до места, рассказывая что так быстрее, но постоянно приходится возвращаться потому что «быстрая дорога» ведет в тупик

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

Через 20 часов езды вы все-таки заехали в окрестности того места, куда нужно добраться, но за 50км до цели, водитель высаживает вас в какой-то глухой деревушке и требует отдать ему 95% денег потому что он старался, тратил время, ехал и даже почти доехал, просто чуть-чуть не успел. Сейчас ему надо в другое место срочно, но завтра он обязательно вернется и довезет вас.

Часто сталкивались с такими водителями?
Читать дальше →
Total votes 194: ↑141 and ↓53 +88
Comments 351

Архитектура CMS. Модель данных. Часть 1

Reading time 8 min
Views 6K
Система управления содержимым (CMS) обязана предоставить гибкие всеохватывающие функциональные возможности для управления содержимым сайта, облегчить работу администратора-конфигуратора и способствовать созданию удобного в использовании сайта. Содержимым сайта можно назвать новости, размещенные на нём, а также статьи, комментарии, фотографии. Содержимым также являются целые структуры информации: новостные ленты, каталоги, форумы, блоги. Обобщенно: содержимое – это данные, размещенные на сайте.

CMS может просто передавать данные по запросу клиентскому приложению, например сетевой программе, flash-клипу или AJAX-приложению. Но чаще всего, CMS предоставляет клиенту уже подготовленные для отображения данные в HTML формате. В этом случаи, для обеспечения доступности, легкости восприятия и удобства пользования содержимым, выполняется стилизация и объединение его с элементами оформления (темы, шаблоны), навигации (меню, ссылки) и управления (формы и ссылки тоже), и всем этим тоже нужно управлять.

Идея


Окружающий мир воспринимается нами объектным, мы мыслим «объектами», в наших умах выстраивается объектная модель мира. Поэтому нам не составит труда создать объектную модель содержимого сайта и управлять ею. Новости, товар в каталоге, сообщения на форуме и сами форумы, и все другое можно представить в виде объектов. Устанавливая связи между объектами, можно создавать структуры данных любой сложности, от добавления комментариев к статьям до создания социальных сетей и более.

Объекты, классы и связи данных – это информация, которую нужно уметь создавать, хранить, использовать, изменять и удалять. В нашем распоряжении реляционная база данных для хранения информации. Действия же совершаемые с информацией – часть логики функционирования CMS, которая в большей части будет реализована модулем данных Data.
Читать дальше →
Total votes 53: ↑44 and ↓9 +35
Comments 102

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity