Комментарии 31
Если чисто для отправки СМС, то это самый работоспособный метод. В сети также можно найти bash-скрипт, который делает тоже самое – отправляет СМС на латинице и в PDU и изначально я использовал его, но у него нет плюшек типа flash и replacemessage.
Если же PDU не требуется, то можно вообще отправлять через терминал AT-командами и тогда ни какие доп. скрипты не понадобятся
Объясни пожалуйста, что делает этот код?
function XSS_secure() { function replace($arr) { $filter = array("<", ">"); $filter_replace = array("<", ">"); for ($i=0; $i < count($filter) ; $i++) { $str = str_replace($filter[$i], $filter_replace[$i], $arr); } return $str; } if ($_GET) $_GET = replace($_GET); if ($_POST) $_POST = replace($_POST); }
С виду — ничего. Заменяет «<» на «<» и «>» на «>». А что если я передам ?a[b][c]=hello? Код либо сломается, либо станет опасно.
Параметры из реквеста прямо в код. Хорошо, что prepared statements используются еще.
Ну и вообще, глядя на код, ощущение, что я вернулся на 10 лет назад. Очень небрежно.
Советовать другим сделать так же для отправки — это прям таки грех)
Советовать другим сделать так же для отправки — это прям таки грех) – для этого в конце статьи есть комментарий от меня как раз касательно кода. Я не программист с большим стажем и некоторых вещей могу не знать. Я сделал рабочий концепт и предоставил его общественности без каких либо требований и каждый может этот код доработать. Также вы можете предложить как это сделать и помочь решить видимые вам проблемы, чтобы довести продукт до максимально безопасного вида. Код в открытом доступе.
Я на самом деле буду благодарен, если вы скажете, что можно поправить и где… Заранее спасибо!
UPD Проверил, если вы передадите smsc.php?a[b][c]=hello?, то получите в ответ:
{«error_code»:403,«error_message»:«Forbidden»,«description»:«Check your login and password»}
Передай ключ для апи еще)
Хорошо. str_replace в 3 аргументе будет обрабатывать только корневые элементы. Если там массив — он их проигнорирует. Я не очень понимаю, зачем нужна такая замена, но выглядит так, что в какой-то версии php это вывалит ошибку
- Нужно валидировать те параметры, которые используются в апи.
- PSR. Классы с нижними подчеркиваниями использовали в php до 5.3 (кажется) версии, которые эмулировали namespace. autoload и прочее — лучше использовать это, т.к. такой код станет более понятен другим php-разработчикам
- cron — это привязка к железу. Запуск каждые 10 секунд таким образом — зачем? Запустите демона, который будет в цикле раз в 10 секунд вычитывать сообщение. А лучше отправляйте через очереди. Вы получите легкую возможность масштабирования и избавитесь от лага в 10 сек на отправку
Со всем этим вам поможет справиться какой-нибудь небольшой фреймворк или пара пакетов из composer.
10 секунд на отправку это не лаг — это время необходимое Gammu на формирование команд и отправку сообщение. Таким образом это минимальное время, которое нужно, чтобы сообщение ушло.
Пытаться отправить чаще можно только при большем количестве модемов. Это было рассмотрено в первой части.
Что касается такой замены < на lt, это позволяет избавиться от возможности, например запустить скрипт, но при этом если этот символ реально нужен в тексте, то он визуально не изменится. Если бы мы меняли < на _/, к примеру, это бы изменило суть сообщения.
Пример текста сообщения — "Температура > 25 гр, влажность > 75%".
Символы нужны, но это не попытка атаки
А если у пользователя пароль с такой последовательностью символов? Он всегда будет получать ошибку
в паролях надо другие правила/ограничения использовать
Валидацию допишу, спасибо
Так если никто не скажет, что плохо, то новичок не станет лучше писать. Вот мне указали, что есть проблема, но что именно, не сказали (имена файлов не рассматриваю, т.к это субъективная красота, у каждого свой порядок)
Как новичку, такому как я, начать писать код лучше?
Статья живая, код на гитхаб. Пишите в комментариях советы, делитесь. Я сразу поправлю на гитхабе и код будет актуальный. И когда новичку попадется эта статья, он почитает комментарии, то он увидит о чем было обсуждение, увидит наглядные вещи и научится. Если у статьи просто поставлен минус — он ничему не научится… Ни он, ни автор.
Если человек хочет учиться, то любую конструктивную критику принимает не с обидой, а с благодарностью, т.к это для него бесплатный урок
Надо научиться делится информацией и знаниями в российской части интернета так, как это принято на stacko...
Пользователь отправляет запрос с параметрами:
.../smsc.php?login={user_name}&pass={user_password}&tel={phone_number}&msg={message}&flash=1&replacemessages_id=1
И светит данными авторизации всем кто между ним и сервером.
Юзайте POST метод.
При использовании https никто ничего не светит. То что вы видите строку которую сформировали, так там данные ваши, чего их скрывать?
В статье про это сказано, что прийдется использовать и post, и get. Если запрос отправляется с какого-то веб-сервиса, то лучше использовать post, а если с микроконтроллера atmega? Здесь легче использовать get. Просто опять таки задачи разные и решения разные.
Думаю, тут имеется в виду access_log сперли - пароли вместе с ними
Для примера приведу api известного шлюза, вполне себе платного, у них точно такая же реализация – _https://smsc.ru/api/
Еще момент, на который мне кажется не обращают внимание – это суть статьи. Здесь рассматривается создание собственного шлюза для личных нужд, а не промышленного, к которому имеет доступ неограниченный круг лиц.
С приемом SMS на модем было трудней. Все входящие SMS сохранялись в базу данных SQLite на модеме.
А готовое решение в виде gammu smsd не рассматривали?)
Но каждый вправе решать поставленную перед ним задачу по своему. Любая статья – не руководство к действию, а информация, которой автор хотел поделиться
Свой личный SMS-шлюз. Часть 2 – создаём API и форму отправки