Ответы пользователя по тегу PHP
  • Как организовать безопасную работу MySQL + PHP для игры на Unity?

    Если злоумушленник, декомпилировав игру получит прямые ссылки к скриптам PHP, может ли он в теории чего нибудь натворить плохого?

    Эти скрипты PHP должны быть выполнимыми не должны быть скачиваемыми (обычно дефолтно настроенный веб-сервер так и делает). То есть при запрос скрипта, веб-сервер не отдаст его как текстовый файл, а выполнит все инструкции пхп и потом вернёт только то, что пхп выведет. Например, всё, что заключено в <?php .... ?> будет скрыто, кроме того, что выводится функциями echo, print и подобными.

    Вы не скинули файл register.php целиком, но подозреваю, что он весь внутри <?php тега, поэтому можно не переживать, что обратившийся к скрипту пользователь увидит параметры коннекта к базе.

    По безопасности в целом — есть два подхода:
    1) Сделать обычную регистрацию и авторизацию внутри Юнити приложения. Как я понимаю, у вас сейчас так и сделано. После регистрации Юнити получает токен и использует его для всех последующих запросов. Токен желательно делать протухающим со временем.
    2) Сделать регистрацию и авторизацию на сайте, пройдя которую человек может получить доступ к странице, в которую встроено Юнити приложение. И при рендеринге приложения ему сразу же передаётся такой же токен для запросов, что и в пункте выше.

    Вопрос лишь в том, хотите вы давать доступ в приложение только зареганным у вас на сайте людям или хотите распространять приложение самостоятельно, а сайт будет невидимым бэкендом для него.
    Ответ написан
    5 комментариев
  • Как перевести js переменную в php?

    Пётр, уточните вопрос. Что вы хотите сделать более глобально?

    Краткий ответ на текущий вопрос — этого сделать нельзя, так устроен веб. Упрощённо:
    - браузер пользователя запрашивает страницу
    - веб-сервер получает запрос, просит php-модуль обработать запрошенный файл и вернуть html/js/css
    - php проходится по файлу, выполняет те команды, которые написаны в <?php ?> тегах, возвращает html/js/css
    - веб-сервер возвращает это браузеру пользователю
    - браузер отрисовывает страницу, где аналогично php-модулю, вычленяет и выполняет все вставки яваскрипта
    Ответ написан
    Комментировать
  • Какие проверки делать phpunit когда возвращается url?

    1. Как проверить, что пришла ссылка:
    https://www.php.net/manual/ru/filter.examples.vali...
    <?php
    $email_a = 'joe@example.com';
    $email_b = 'bogus';
    
    if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
        echo "E-mail адрес '$email_a' указан верно.\n";
    }
    if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) {
        echo "E-mail адрес '$email_b' указан верно.\n";
    } else {
        echo "E-mail адрес '$email_b' указан неверно.\n";
    }
    ?>


    2. Как проверить, что ссылка указывает на валидный документ — это вне обязанностей юнит-тестов. Они тестят только код на уровне метода. Вам нужно либо написать unit-тест на тот кусок кода, который эту ссылку и генерит, либо функциональный тест, который будет тестировать код как черный ящик:
    - отправить запрос в ваш метод
    - получить ссылку
    - перейти в документ по этой ссылке
    - проверить, что документ тот, что ожидается
    Тут можно посмотреть в сторону behat/selenium. Также в фреймворках для этих целей часто есть свои пакеты типа SymfonyWebTest.
    Ответ написан
    Комментировать
  • Почему версии php в phpinfo() и php -i расходятся?

    Установлены две версии php.
    Одна — см. путь до php.ini в браузере
    Вторая — сделать `php --ini` в консоли.

    В теории, можно сделать так, чтобы веб-сервер использовал консольный пхп или наоборот, чтобы в консоли в $PATH был путь до вашего веб-серверного php.
    Ответ написан
    Комментировать
  • E_NOTICE: type 8 -- Undefined offset: -1 -- at line 11. В чем проблема?

    Код не запускал, но скорее всего в строке
    replacement(count($attachmentsArray[1]), $attachmentsArray, $result);

    `$attachmentsArray[1]` пустой. Поэтому внутрь функции передаётся $count=0, ну и дальше обращение к массиву с индексом $count - 1, то есть -1.

    Проверьте, что preg_replace_all возвращает то, что нужно. И добавьте условие с проверкой до вызова функции, что $attachmentsArray именно того формата, что вам нужен.
    Ответ написан
    1 комментарий
  • Как проверить существует ли такой пользователь в базе данных, чтобы можно было валидировать регистрацию пользователей на сайте?

    Ещё один запрос перед вставкой:

    $stmt = $pdo->prepare('SELECT COUNT(id) FROM users WHERE email=:email OR login=:login');
    $stmt->execute([
      'email' => $email,
      'login' => $login,
    ]);
    if ($stmt->fetch() > 0) {
      // Такой пользователь уже существует.
    }


    Вопрос: зачем вам юзернейм и логин.
    Ответ написан
    Комментировать
  • Как отправить длинный base64 POST?

    А ошибка какая-то есть? В явном виде или в логах веб-сервера/фреймворков?
    План по локализации проблемы:
    1) Попробуйте отправить такой же curl, но с консоли. Так вы исключите проблему в скрипте-отправителе.
    2) Скрипт-получатель замените на что-то простое, а-ля `echo $_POST['img'];`. Ответ выводится для всех отправок? Так вы исключите проблему в инфраструктуре (настройках пхп и веб-сервера) на приём данных.
    3) Если оба пункт выше не показали проблем и всё стабильно доходит, значит проблема в обработке полученной картинки. Тут уже можно экспериментировать, комментируя и возвращая строки последовательно.

    Но вообще кажется, что сама обработка данных неверна. По идее это должна быть обычная обработка формы, без плясок вокруг str_replace'ов.
    Ответ написан
    Комментировать
  • Почему echo date('Y-m-d H:m:s'); из разных скриптов выводит разные результаты?

    Проблема часового пояса в настройках php или конкретного скрипта.

    Первое, выполните `php -i | grep timezone` в консоли. Там будет скорее всего UTC стоять. Если так, то вам нужно будет заменить на Europe/Moscow: `php --ini` покажет в консоли путь до php.ini файла, его нужно отредактировать (часто под рутом/администратором) строчку date.timeone = "Europe/Moscow"

    Второе, что может быть, часовой пояс где-то выставлен в самом скрипте, тут нужно поискать по коду команду https://www.php.net/manual/ru/function.date-defaul...

    Третье, может быть, вы эти скрипты запускаете разными php? Скажем, один в консоли, второй через веб-сервер (php-fpm)? Тогда у каждого из них свой php.ini и их нужно отредактировать по 1му варианту выше.
    Ответ написан
    Комментировать
  • Настройка виртуальных хостов на локальном сервере?

    Может вам не подойдет, но я бы посоветовал установить Mamp Pro. Там эта задача решается тремя действиями:
    1) добавить новый хост
    2) указать нужное имя
    3) указать физический путь до корня проекта.

    p.s: только после Мамп Про смог полностью насладиться разработкой под маком, а то до этого все перепробовал и выходили танцы с бубном похлеще, чем в линуксе.
    Ответ написан
    2 комментария
  • Онлайн соревнования по программированию?

    @pluseg Автор вопроса
    codeforces.ru — то, что нужно.
    spoj.pl и аналог timus.ru — интересные, сам об этом задумался после RCC;)

    Огромное спасибо!
    Ответ написан
    Комментировать
  • про обучение пхп "с нуля"

    Очень интересный вопрос. Я уже неоднократно задумывался, смогу ли я обучить, например, свою маму (технарь, химик, но с компьютером — на среднее между ты-вы) и сколько времени на этой уйдет.
    Думаю, что месяца три прилежного обучения достаточно для вашего друга (тут еще возраст важен и гибкость ума). Главное, чтобы он был в этом заинтересован и чтобы это ему хоть сколько-нибудь нравилось. Если он решится, то попросите его создать блог — будет очень интересно почитать;)

    p.s^ имхо, все эти курсы для начинающих полная лажа (не встретил ни одного исключения). Часто преподают их люди, которые сами только недавно задавали вопросы «что такое пхп?» Заинтересовать профессионального пхп-программиста (да еще умеющего преподавать) преподаванием основ абсолютным новичкам нереально крайне сложно. Пусть читает книги и обращается к вам за помощью.
    Ответ написан
    1 комментарий
  • Создание глобального регистра в PHP приложении?

    Может быть базы данных?
    Ответ написан
    Комментировать
  • PHP Framework с широкими настройками дополнительных параметров модели?

    А разве в моделях Symfony запрещён PHP? к тому же, может быть, стоить все эти «дополнительные данные» вынести в контроллер или вообще в отображения?
    Ответ написан
    3 комментария
  • Безопасный кроссдоменный обмен данными между AJAX и PHP?

    Заинтересовался вашим вопросом и решил разобраться.
    Как оказалось, авторизация вконтакте организована с помощью своего Open API и напоминает openID. Здесь написано о нём.
    Собственно, на данный момент могу только помочь советом (почитайте про openID и Open API). В ближайшее время постараюсь сам в этом разобраться и отпишусь сюда, если вопрос будет актуален.
    Ответ написан
    1 комментарий
  • Безопасный кроссдоменный обмен данными между AJAX и PHP?

    если уж вы смотрели в сторону RSA, то можно сделать шифрование с открытом ключом. Как я понимаю, вы хотите передавать данные с одного своего домена на другой свой же? Тогда этот тип шифрования подойдет. Но это лишь предположение, как можно решить задачу, наверняка есть и более лёгкие способы.
    Ответ написан