Сообщество - Программирование на PHP
Добавить пост
53 поста 1 847 подписчиков

Популярные теги в сообществе:

4388

Про взлом сайта

Вспомнил историю, хочу поделиться. Может кому то интересно, что значит "взлом сайта" и как это делают.

Был у меня малюсенький сайт в годах примерно 2010-2014. Сайт - интернет магазин, где я продавал свои же php скрипты и давал возможность любому продавать на нём свои скрипты и брал за это 10%. Сайт был не прибыльным, но и содержание его мне ни чего не стоило. И написал я его полностью сам, совершенствуя навык программирования. Был этот сайт полностью автоматизирован.. Т.е. пополнение баланса через webmoney, покупка, продажа, вывод денег, оповещения о продажах по смс... Всё проходило автоматически и без моего участия. К сайту был привязан кошелек, на котором лежало около 3000р.

Однажды мне позвонил какой-то паренек.. 17 лет ему было. И представился как человек, взломавший мой сайт.

И действительно, парень вывел на свой кошелек все деньги с кошелька сайта. Он их мне вернул и рассказал про уязвимость.

А уязвимость просто наитупейшая... Немного об алгоритме программы: при покупке какого-то товара, программа проверяла, если на счету покупателя денег больше чем цена товара, то из его счета вычиталась эта сумма и отдавался товар. Так вот. В программе при добавлении товара на сайт я не сделал проверку на отрицательную цену. Чувак просто добавил товар с отрицательной ценой, допустим -500р. Потом с другого аккаунта стал покупать свой же товар. Программа проверила, что на его нулевом счету денег больше, чем -500 и вычла из нуля минус пятьсот... Минус на минус дало плюс и его счет увеличился на 500р при покупке товара. Потом он заказал вывод средств и программа в автоматическом режиме перевела деньги на его кошелек.

К тому времени я уже забросил этот сайт.. Больше года им не занимался, и решил просто отдать его тому парню... Он согласился, но видимо ему сайт быстро надоел и уже через пару месяцев он перестал существовать.

Показать полностью
1126

Дельный совет в книге по PHP

Дельный совет в книге по PHP
244

Бесплатная книга «Заметки по PHP»

У меня есть сайт, где я публикую свои заметки по программированию. Решил попробовать сделать раздел по PHP в виде книги (формат PDF). В итоге по объёму получилось 72 страницы.


Все статьи уникальны, т.е. написаны мною.


Скачать книгу можно по этой ссылке: https://yadi.sk/i/aSudVcy-3KucBN

77

История одной галочки

Это - галочка.  Я сделал ее лет 17 назад, когда мне самому было 15 и я только начал изучать PHP.

История одной галочки Администрация, PHP, Программирование, Рукожоп, Uspeli, Бунт

Галочка позволяла закрывать контент 18+ или личные комментарии на сайте.

Галочка была сделана за 10 минут.

И представляла собой просто значение в базе 0 - 1.


Галочку сделал практически школьник. Но она и сейчас спасла бы Пикабу от бунта и от потери 50 000 человек.

@admin, у вас правда нет программиста, который может добавить 1 поле в базу и чекбокс к комментариям?


Просто же:

<input type="checkbox" name="NSFW">


Вот и все. Осталось поймать значение и записать в базу единичку!

<?php

if (isset($_POST["NSFW"])){ /* Магия записи в базу */ }

?>


Я уже молчу о чем-то более сложном - как определение контента 18+ по тем же  дубликатам, например. Эх. Уже просто нет слов.

Показать полностью
76

Как в PhpStorm убрать лого при каждой загрузке

Сижу программирую. Вылазит сообщение - PhpStorm обновился. Обновляю

Как в PhpStorm убрать лого при каждой загрузке PHP, Программирование, Web-программирование

При каждом входе вижу вот такое цветастое лого - бесит.

Написал в поддержку, получил ответ:

Как в PhpStorm убрать лого при каждой загрузке PHP, Программирование, Web-программирование

Текстом: Откройте Help -> Edit Custom VM Options... -> и добавьте -Dnosplash=true строку. После этого логотип больше не будет показываться.

Показать полностью 1
29

Хитрый Сергей)

Хитрый Сергей)
28

Как подружить Ежа с Ужом или отправить с сайта заявку в 1С

Наступил час Х, директор вызвал меня и объявил, что хочет, что бы заказы с сайта падали в 1С. Деваться некуда пришлось браться за столь весёлую и увлекательную задачу. Так как 1С я видел только из далека на компьютере главного бухгалтера, первая моя мысль была поймать нашего 1С-ника работающего на удалёнке и объяснить ему задачу. Поймал, объяснил, что хочу мол в 1С POST запросы отправлять для формирования заявки. 1Сник очень удивился, сказал: "Моя твоя не понимать", но обещал подумать. Через пару часов позвонил и сказал, что в 1С есть уже готовая система для приёма заявок с сайта. Но как она работает он не знает, так что разбирайся сам. Приехали.


Что делать, пришлось сесть и читать про CommerceML 2. При первом знакомстве с документацией на сайте 1С, чтение сего мануала вызывало боль, отвращение и мысли о суициде. Такой охуенной документации я давно не читал. После первого прочтения решил позвонить в одну известную в нашем городе 1С контору и спросить, сколько будет стоить сопряжение нашего сайта с 1С, менеджеры долго совещались и через сутки вынесли вердикт 30 000 рублей.


Ох уж эти 1С-ники, им только денег дай. Можно было конечно у директора попросить денег, он бы дал, но тут видимо во мне взыграли амбиции и решил я таки разобраться сам.


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


А что дальше? Проверяем как работает веб сервер и отправляем ему запрос в браузере:


http://xxx.xxx.xxx.xxx/'Имя сервиса'/ws/SiteExchange?wsdl


Получаем XML-ную партянку, охуеваем и от количества параметров. Где наша не пропадала? Лезем читать мануалы и тут нас ждёт горькое разочарование. Нет никакой информации, какие параметры обязательны для отправления, как будет привязываться товар  к справочнику номеклатуры. Как это всё работает в целом?


Попытки отправить XML запрос вызывали ошибки на стороне 1С, она ругалась не понятными словами. А дальше пару дней я просто читал всё что связанно с оформлением заявок с сайта в 1С.


Ничего дельного я не нашёл. Но пару раз меня выкидывало на форум 1С, но там нужна была регистрация, а регистрироваться в этой богадельне мне не хотелось, но на конец второго дня я понял, что видимо придётся. Регистрация давалась на 7 дней, если ты не являешься клиентом ))).


Регистрация пройдена и о чудо в одной из веток я обнаружил обсуждение данного вопроса и там то я и подсмотрел как правильно формировать XML запрос.


Выкладываю его сюда может ещё кому пригодится:


function Connect1C(){

if (!function_exists('is_soap_fault')){

print 'Не настроен web сервер. Не найден модуль php-soap.';

return false;

}

try {

$client1C = new SoapClient('http://xxx.xxx.xxx.xxx/'Имя веб-сервиса'/ws/SiteExchange?wsdl',

array('login' => 'woodman02',

'password' => 'password',

'soap_version' => SOAP_1_2,

'cache_wsdl' => WSDL_CACHE_NONE, //WSDL_CACHE_MEMORY, //, WSDL_CACHE_NONE, WSDL_CACHE_DISK or WSDL_CACHE_BOTH

'exceptions' => true,

'trace' => 1));

}catch(SoapFault $e) {

trigger_error('Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.', E_ERROR);

}

if (is_soap_fault($client1C)){

trigger_error('Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.', E_ERROR);

return false;

}

return client1C;

}

function GetData($idc, $param){

if (is_object($idc)){

try {

$ret1c = $idc->LoadOrders($param);

} catch (SoapFault $e) {

echo "Ошибка</br>";

var_dump($e);

var_dump($ret1c);

}

}

else{

echo 'Не удалось подключиться к 1С<br>';

}

return $ret1c;

}

$OrdersData = Array(

"ВерсияСхемы" => "2.05",

"ДатаФормирования" => "2020-05-29T11:56:10",

"Документ" => Array(

"Ид" => null,

"Номер" => null,

"Дата" => "2020-05-29",

"ХозОперация" => "ЗаказНаПродажу",

"Валюта" => "руб",

"Курс" => "1",

"Сумма" => "6945",

"Контрагенты" => Array(

"Контрагент" => Array(

"Ид" => null,

"Наименование" => "Иванов",

"ПолноеНаименование" => "Иван",

"Роль" => "Покупатели",

"Адрес" => Array(

"Представление" => "Тест",

"Комментарий" => "Тест"

)

)

),

"Время" => "15:30:15",

"СрокПлатежа" => "0001-01-01",

"Комментарий" => "Заказ с сайта",

"Налоги" => Array(

"Налог" => Array(

"Наименование" => "НДС",

"УчтеноВСумме" => "false",

"Сумма" => "0"

)

),

"Товары" => Array(

"Товар" => Array(

"Ид" => null,

"Артикул" => null,

"Наименование" => "Грабля электронная",

"БазоваяЕдиница" => Array(

"Код" => "796",

"НаименованиеПолное" => "Штука",

"МеждународноеСокращение" => "PCE"

),

"СтавкиНалогов" => Array(

"СтавкаНалога" => Array(

"Наименование" => "НДС",

"Ставка" => "0",

)

),

"ЗначенияРеквизитов" => Array

(

"ЗначениеРеквизита" => Array

(

"0" => Array

(

"Наименование" => "ВидНоменклатуры",

"Значение" => "Товар"

),

"1" => Array

(

"Наименование" => "ТипНоменклатуры",

"Значение" => "Запас"

)

)

),

"ЦенаЗаЕдиницу" => "6945",

"Количество" => "1",

"Резерв" => "1",

"Сумма" => "6945",

"Единица" => "шт",

"Коэффициент" => "1"

)

),

"ЗначенияРеквизитов" => Array

(

"ЗначениеРеквизита" => Array

(

"0" => Array

(

"Наименование" => "Организация",

"Значение" => "ИП Чоршамбе Нет Отчества"

),

"1" => Array

(

"Наименование" => "Вид цен",

"Значение" => "1-2 Единая оптовая"

),

"2" => Array

(

"Наименование" => "Склад",

"Значение" => "Склад №1 для торговли"

),

"4" => Array

(

"Наименование" => "Дата отгрузки",

"Значение" => "2020-05-29"

),

"5" => Array

(

"Наименование" => "Статус заказа",

"Значение" => "Подготовка КП"

),

)

),

)

);

$params = Array();

$params["OrdersData"] = $OrdersData;

// Загружаем заказ с сайта.

//$result = $client->LoadOrders($params);

$idc = Connect1C();

$ret1c = GetData($idc,$params);

var_dump($ret1c->return);


Сразу отвечу на один вопрос, который занимал меня. Как 1С будет привязывать к своей номенклатуре мою заявку. Это потрясающее решение от компании 1С, мне такое даже в голову не могло прийти. При получении заявки 1С смотрит по названию (по названию Карл!??, не по Id, не по штрихкоду, а по названию) есть у неё в номенклатуре такой товар или нет, если нет, она тупо его создаёт, 1С-ники умеют поражать. Так что будьте внимательны названия в заявке должно строго соответствовать названию в 1С, иначе наплодите товаров в номенклатуре.


Ура! Пол дела было сделано. Далее я настроил проброс портов на нашем Mikrotik-е, что бы к 1С серверу можно было обратиться только с IP адреса Web-сервера и определенного порта (не скажу какого).


Дописал скрипты и вот наш интернет магазин сделанный на Joomla + Seblod отправляет заявки в 1С. Всё теперь я то же могу брать 30 т.р. за подключение сайт к 1С ))))

Показать полностью
22

Почему мы не любим Legacy?

Всем ку! Не так давно я задался вопросом, а почему мне нравится такая нудная работа? На самом деле, ответ кроется не на поверхности. Чтобы понять всю суть любви к программированию, нужно копнуть немного глубже, нежели просто придерживаясь тех фактов, что у программистов высокая заработная плата (хотя, по секрету, это не совсем так).

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

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

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

И ведь действительно, большинство наработок, используемых в бизнес-проектах, уже достаточно стары (возьмем банальные Java 8, PHP 3 или 5, C++7). Почему же так происходит? Все дело в том, что бизнесу не нужны новомодные решения (если речь не о стартапах) - бизнесу нужна стабильность, чтобы она стабильно приносила деньги с минимальными затратами, то есть для бизнеса лучше написанная система 2003 года, зато стабильная. Когда речь доходит до обновления какой-либо системы или сервиса с legacy-кодом, то процесс затягивается надолго, ибо бизнес начинает просчитывать риски, бюджет, время. Нельзя обновить систему так, чтобы она приносила убытки - это, как минимум, глупо.

В программировании достаточно часто встречаются такие проекты-динозавры, которые придерживаются принципа "работает - не трогай". И, чаще всего, джун, изучающий самые новые технологии, после успешно пройденного собеседования, сильно огорчачется, ведь ему приходится перелопачивать код, который в последний раз до него трогал только дед Василий в 1998 году, не закончивший пару фич из-за наступления маразма. И вот паренек (или девушка) трогает код динозавров с функциональным стилем, на старой CRM alpha-версии, используя при этом технологии, которые джун не изучал, ведь... он думал, что сфера ИТ никогда не стоит на месте, а шутки про legacy всегда были смешными, но смешно все, пока с этим не столкнешься.

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

Сфера IT действительно не стоит на месте, сервисы обновляются чуть ли не каждый день, каждый день появляется новый фреймворк, обновление для языка и т.д., но все забывают главное - бизнес должен быть стабильным. Просто крупным компаниям совершенно невыгодно переписывать базу, да и зачем, если это просто займет время и толком ничего не изменит (лишь на 0.0003 мс быстрее станет). Legacy делаются с упором на то, что никто и никогда не будет в него лезть, код должен быть максимально непонятным, держащимся на костылях и goto.

Почему мы не любим Legacy? Программирование, Legacy, Код, PHP, Разработка, Длиннопост

Никаких обновлений - на кой черт они нам нужны, правда? На самом деле, если написать код, оставив комментарии, распределив должным образом модели, расписав контроллеры с возможностью масштабирования и очистить базу от ненужного, то систему можно смело отправлять в Legacy, не боясь мысли о том, что ее придется обновить лет так через 15.

Показать полностью 4
Отличная работа, все прочитано!