Прикручиваем Paypal для оплаты

Одной из самых популярных платежных систем в буржунете является Paypal. Поэтому желающие прикрутить ее к своему сайту для оплаты товаров и услуг встречается очень часто на любом фрилансерском сайте, например, на RentACoder. Но так, как россиянам Paypal разрешает иметь только send only аккаунты, у нас эта платежная система не прижилась.

Сделать кнопку «Buy now» совсем не сложно, это простейшая форма вот такого вида:













Когда пользователь произведет оплату, он будет перенаправлен на URL, указанный в параметре return. После этого Пейпал сам отправит уведомление о поступившем платеже на notify_url, только эти данные подлежат тщательной проверке, поскольку любому злоумышленнику не составит особого труда сформировать POST-запрос на notify_url. Поэтому полученные данные надо перезапросить у paypal еще раз, добавив к запросу параметр cmd со значением _notify-validate. И если paypal подтвердит совершенный платеж, транзакцию можно считать завершенной.

Для сторонних разработчиков Paypal предусмотрел специальный сервис Paypal Sandbox, который позволяет тестировать весь процесс приема платежей, с одним небольшим ограничением. В paypal sandbox не работает IPN (Instant Payment Notification), когда уведомление о платеже отправляется на notify_url. Для отладки скриптов по обработке IPN в песочнице сделали отдельный инструмент Instant Payment Notification (IPN) simulator.

О пользе nginx

Вот уже болльше 2-х лет я пользуюсь хостингом от FirstVDS и MiniVDS, причем для моих небольших нужд вполне хватает самых дешевых тарифов, на которых дается всего 64 Мб RAM. Свободной памяти у меня практически никогда не бывает, но все сервисы стабильно работают.

Я всерьез задумался, а есть ли смысл включать nginx. Кроме статики, у меня еще есть куча скриптов; причем php работает как модуль apache. Да и сам nginx тоже будет висеть в памяти и есть ресурсы.

Удивительно, но после того, как я у себя включил nginx, apache стал есть меньше памяти. И как выяснилось, это заслуга nginx.

Зачастую апач генерит страницу быстрее, чем отдает ее клиенту; особенно, если клиент имеет не очень хороший канал. И пока он ее отдает, процесс висит в памяти и жрет системные ресурсы. Вот тут и приходит на помощь nginx, который работает как прокси. Он мухой забирает все, что сгенерил апач, и отдает все это добро клиенту. Апач же, законив свою грязную работу, спокойно умирает.

Включить nginx в панели ISPmanager можно одним кликом мыши, и уже через пару-тройку минут можно будет видеть результат. У меня, правда, процесс не совсем корректно отработал, nginx стартовал, а апаче почему-то нет. Пришлось апач запустить вручную. И еще, если автоматически созданные поддомены сделаны вручную через mod_rewrite, возможно некорректное отоборажение картинок на сабах. В этом случае придется вручную править правила раздачи картинок с поддоменов для nginx

Как сбросить пароль в mysql

Иногда бывают ситуации, когда рутовый пароль на базу MySQL проебали где-то потерялся, и его надо срочно перезадать. Если есть доступ к shell на сервере, то сделать это достаточно просто:

1. Останавливаем mysqld:

/etc/init.d/mysqld stop

2. Запускаем mysqld без проверки прав доступа:

mysqld_safe –skip-grant-tables &

3. Заходим под рутом и перебиваем пароль:

mysql -u root -D mysql
mysql> update user set password=password(‘new_password’) where user=’root’;

4. Обновляем права доступа:

flush privileges;

5. Выходим, убиваем mysqld и запускаем его снова:

mysql> exit;
/etc/init.d/mysqld stop
/etc/init.d/mysqld start

Парсинг поисковых систем

Yahoo! Logo

Обычно поисковые системы не позволяют себя парсить простым смертным. Например, великий и ужасный Google банит айпишник на несколько часов, если делать запросы слишком часто. А еще гугл иногда выдает свою аццкую капчу, и иногда меняет форматирование своей выдачи, что осложняет жизнь нашим коллегам.

Однако, есть и дружелюбные поисковики, которые вполне официально разрешают себя парсить. Всего лишь надо зарегистрировать аккаунт на Yahoo, получить app id key и настроить свой парсер, благо API под него доступно там же на самых популярных языках программирования.

Никаких пауз между запросами, никакой подделки юзерагента или сбрасывания cookie делать не надо, все работает быстро и надежно. Выдачу можно забирать в XML, что значительно упрощает парсинг. Однако не стоит забывать, что в термсах Yahoo прописаны ограничения: не более 5000 запросов с одного IP. Как видите, ничто не запрещает использовать все доступные IP адреса для получения желаемого результата.

RentACoder: удаленная работа для программиста

Rent A Coder

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

Обязательное условие — приличное владение английским языком, поскольку большинство заказчиков англоязычные. Регистрируемся здесь как кодер, настраиваем свое резюме, предпочтения, опыт работы и обязательно подписываемся на RSS сообщения с новыми бидами.

Система работает так. Заказчик выставляет свою задачу, и описывает ее например так:

Hello,

We currently have a functioning school management website. We need a coder who will take all static text on the website and make it to be loaded from the database. We have a page in admin where we have ‘pages’, we need this to be extended to include all text on the entire website. Additionally, it should be possible to add new pages and they appear in a top menu.

Further, there are two tiny changes we also need:

1. We have a comment text field. It should be made bigger using CSS
2. The list of ‘events’ displays on the frontpage. Currently about 10 are displayed. We need this list expanded to show 40

Заказчик выбирает ценовую категорию для проекта (например, Project Type: Very Small Business Project: under $100(USD)) и может выставить максимальный приемлемый для себя бид (в данном случае Max Accepted Bid: $60.00 (USD)).

Кодеры читают задачу, и если их она устраивает, отвечают на нее своим бидом. Заказчик смотрит на биды кодеров, историю их работы, рейтинги и прочие факторы, и решает, а работать ли дальше. Он может отказаться от своего предложения (cancel), либо выбрать чей-то бид.

Как правило, другие подробности работы заказчик описывает кодеру после того, как кодер принял бид. Заказчик переводит деньги в пользу RentACoder (escrow), и они после выполнения работы и принятия ее заказчиком, переходят в пользу кодера (за вычетом комиссии системы).

Есть несколько тонкостей в работе. Если кодер в течение 24 часов после принятия бида заказчиком понимает, что по какой-то причине не сможет справиться с задачей, он обязан уведомить заказчика об этом и подать заявку на отказ от задачи. Это так называемый grace period, в течение которого кодер может безболезненно для себя и для заказчика отказаться от работы, не получив негативного рейтинга. Заказчику при этом возвращаются все переведенные в пользу RentACoder деньги.

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

Если же закачик или кодер чем-то недовольны, все споры решаются независимым арбитражом.

Комиссия системы составляет 15%, но не менее 3 USD. Выплаты производятся по тому графику, который выбирает кодер (устанавливается минимальная сумма для выплаты (например, $100), и выбирается график выплат — в начале следующего месяца либо по окончании двухнедельного срока).

Выплаты производятся 4-мя способами:

  • перевод на банковский счет (этот способ годится и для россиян)
  • перевод Western Union
  • выплаты на карту Payoneer Prepaid Mastercard (если ее нет, они ее сделают и вышлют)
  • выплаты в Paypal (для граждан бывшего СССР этот способ оплаты не подойдет)
  • Система очень удобная, довольно много соотечественников уже работает с ней. Категории задач встречаются самые разные, от настройки серверов до разработки крупных порталов, от перевода статей на другие языки до SEO-задач.

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

    В общем, регистрируйтесь и пробуйте, наверняка сервис понравится и вам.

    Blogger на своем домене и настройки firewall

    Платформа Blogger
    Платформа Blogger умеет вести блоги не только на blogspot.com, но и на своих доменах. Публикация постов представляет собой заливку готовых html-файлов на хостинг с помощью FTP или SFTP. А чтобы отсечь любителей подбирать пароли FTP, Blogger опубликовал IP-адреса серверов, с которых он может проводить публикацию постов:

    66.102.15.83
    216.34.7.186
    64.233.166.192-207
    64.233.178.192-207

    Т.е. достаточно в firewall.conf дописать всего 5 строчек, чтобы отсечь брутфорсеров паролей:

    add allow tcp from 66.102.15.83 to me 21
    add allow tcp from 216.34.7.186 to me 21
    add allow tcp from 64.233.166.192/28 to me 21
    add allow tcp from 64.233.178.192/28 to me 21
    add reset tcp from any to me 21

    Как подружить SonyEricsson K750i и OpenSuSe 10.3

    Готовлюсь к длительной поездке в глушь, где доступ в интернет будет возможен только через GPRS от МТС. Как оказалось, подключить мой мобильник SE K750i в качестве GPRS-модема совсем не сложно.

    Для этого надо соединить телефон с помощью USB-кабеля с ноутбуком, и проверить, видит ли его система как модем:

    # lsusb

    Создаем /etc/wvdial.conf:


    [Dialer Defaults]
    Init1 = ATZ
    Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
    Init3 = AT+CGDCONT=1,”IP”,”internet.mts.ru”
    Modem = /dev/ttyACM0
    Phone = *99***1#
    Idle Seconds = 300
    Modem Type = USB Modem
    Stupid Mode = 1
    Compuserve = 0
    Baud = 115200
    Auto DNS = on
    New PPPD = Yes
    Dial Command = ATDT
    Ask Password = 0
    ISDN = 0
    Password = mts
    Username = mts

    Можно поиграться с настройками скорости соединения. Выше 115200 у меня она не поднималась, обычно она в районе 57600 baud.

    Вот и все, дозваниваемся до оператора с помощью команды wvdial, отключаемся от интернета нажатием CTRL+C.

    И для удобства, чтобы не запускать wvdial под рутом, можно сделать:
    #chmod u+s /usr/bin/wvdial

    Как создать самоподписной SSL-сертификат

    Практически все сайты, работающие с конфиденциальной информацией, используют протокол HTTPS. По своей сути, это HTTP-протокол, работающий с использованием шифрованных транспортных механизмов TLS и SSL; и предназначен в первую очередь для защиты от снифферов.

    Для того, чтобы Apache смог работать с использованием этого протокола, необходим SSL-сертификат. Их можно купить у доверенных организаций (VeriSign, Thawte и др.), или создать свои собственные (самоподписные).

    Если в системе установлен OpenSSL, то сгенерировать корневой сертификат в общем-то несложно:

    0. Cоздаем запароленyый ключ:
    sudo openssl genrsa -des3 -out server.key 1024

    1. :елаем вариант ключа для использования без паролей (для вебсервера, например)
    sudo openssl rsa -in server.key -out server.key.insecure

    2. Cоздаем сертификат для сервера на 10 лет
    sudo openssl req -new -days 3650 -key server.key -out server.csr

    3. Подписываем его ключом сервера
    openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

    В свойства виртуалхоста для порта 443 прописать:

    SSLEngine on
    SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
    SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
    SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
    

    Проектирование и настройка домашней сети.

    Задача: есть несколько компьютеров дома; есть выделенная линия (ADSL-модем) с выходом в интернет. Требуется объединить компьютеры в локальную сеть, чтобы каждый из пользователей мог выходить в интернет.

    Первый способ:

    Домашняя сеть, вариант №1

    Плюсы:

    Здесь все компьютеры объединяются в сеть с одинаковой маской; любой из них может включаться и выключаться по своему желанию, никому при этом не мешая.

    Минусы:

    Затруднен контроль за трафиком каждого компьютера. Кроме того, система получится весьма дырявой, если все компьютеры будут объединены с помощью точки доступа WiFi.
    При неграмотной настройке беспроводного соединения (доступ без пароля или включение WEP-шифрования) соседи по квартире запросто смогут пользоваться интернетом за ваш счет.

    Про доступ без пароля и так все ясно; а вот WEP-шифрование уже давно не является гарантией безопасности. Ровно год назад была опубликована статья о том, что исследователям из Германии удалось извлечь 104-битный ключ WEP за 3 секунды путем перехвата беспроводных пакетов в течение нескольких минут. Так что, если вы все-таки решили настроить сеть с беспроводным соединением, ставьте мощность передатчика на минимум и ставьте шифрование WPA/WPA2. И все равно такая сеть не будет защищенной от проникновения извне, т.к. нет гарантий того, что никто не подберет пароль.

    Второй способ:

    Домашняя сеть, правильный вариант

    Плюсы:

    Можно контролировать все в одном месте, на сервере.

    Минусы:

    Сервер постоянно должен быть включен, иначе у остальных компьютеров не будет доступа в интернет.

    Этот вариант намного безопаснее и интереснее предыдущего, но требует специальной настройки сервера. Там придется поднять прокси-сервер, настроить маршрутизацию и желательно поднять VPN или OpenVPN. Это очень пригодится, если появятся клиенты, которые будут соединяться через беспроводное соединение WiFi. OpenVPN поверх беспроводного соединения значительно осложнит жизнь потенциальным взломщикам; даже если они подберут пароль на соединение, у них не будет ключа шифрования.

    Как автоматически создавать поддомены

    Задача: при обращении к поддомену сервер должен отдавать контент из соответствующей поддиректории для заданного VirtualHost.

    Есть 2 способа решения задачи, и какой из них лучше – решайте сами.
    В любом случае, сначала надо настроить WildCard DNS на домене, иначе ничего работать не будет.

    Если Ваш проект хостится у firstvds или у minivds, то при добавлении домена на Ваш аккаунт файл зоны будет выглядеть примерно так:


    $TTL 3600
    domain.com. IN SOA ns1.minivds.com. root.mylogin.minivds.com. (2007041702 10800 3600 604800 86400)
    ;
    domain.com. IN NS ns1.minivds.com.
    domain.com. IN NS ns2.minivds.com.
    domain.com. IN MX 10 mail
    domain.com. IN MX 20 mail
    domain.com. IN A XXX.YYY.ZZZ.WWW
    www IN A XXX.YYY.ZZZ.WWW
    ftp IN A XXX.YYY.ZZZ.WWW
    mail IN A XXX.YYY.ZZZ.WWW
    smtp IN A XXX.YYY.ZZZ.WWW
    pop IN A XXX.YYY.ZZZ.WWW
    domain.com. IN TXT "v=spf1 a mx ~all"

    Чтобы включить WildCard DNS, достаточно в файл зоны добавить всего одну строчку и поменять цифры в serial number зоны. После исправлений файл доменной зоны будет выглядеть так:


    $TTL 3600
    domain.com. IN SOA ns1.minivds.com. root.mylogin.minivds.com. (2007041703 10800 3600 604800 86400)
    ;
    domain.com. IN NS ns1.minivds.com.
    domain.com. IN NS ns2.minivds.com.
    domain.com. IN MX 10 mail
    domain.com. IN MX 20 mail
    domain.com. IN A XXX.YYY.ZZZ.WWW
    www IN A XXX.YYY.ZZZ.WWW
    ftp IN A XXX.YYY.ZZZ.WWW
    mail IN A XXX.YYY.ZZZ.WWW
    smtp IN A XXX.YYY.ZZZ.WWW
    pop IN A XXX.YYY.ZZZ.WWW
    * IN A XXX.YYY.ZZZ.WWW
    domain.com. IN TXT "v=spf1 a mx ~all"

    Через некоторое время можно попробовать пингануть домены abc.domain.com, asfwsegws.domain.com – доменное имя 3-го уровня должно определяться с тем же IP-адресом, что и доменное имя 2-го уровня.
    Вот теперь можно переходить к настройке сабдоменов.

    Способ номер 1: вносим изменения в httpd.conf
    Выглядит это примерно так:


    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.domain.com
    RewriteCond %{HTTP_HOST} !^cgi-bin\.domain\.com$ # запрещаем перенаправление для cgi-bin
    RewriteCond %{HTTP_HOST} ^(www\.)?(([^\.]+)\.){1}domain.com$
    RewriteCond /home/domain/data/www/domain.com/%3 -d
    RewriteRule ^/(.*) /%3/$1

    Перезапускаем apache и все – любая поддиректория, созданная в /home/domain/data/www/domain.com/ будет доступна как поддомен. Это самый правильный вариант создания поддоменов.

    Но такой способ не будет работать на виртуалхостингах, поскольку доступ пользователю к httpd.conf никто не даст.

    Способ номер 2: поддомены через .htaccess:


    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^subdomain1.domain.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www.subdomain1.domain.com$
    RewriteRule ^(.*)$ http://www.domain.com/subdomain1/ [R=301,L]
    RewriteCond %{HTTP_HOST} ^subdomain2.domain.com$ [OR]
    RewriteCond %{HTTP_HOST} ^www.subdomain2.domain.com$
    RewriteRule ^(.*)$ http://www.domain.com/subdomain2/ [R=301,L]

    В этом случае при обращении к subdomain1.domain.com или к www.subdomain1.domain.com пользователь будет перенаправлен на URL http://www.domain.com/subdomain1/ и он это заметит.