Местоположение
Украина

Достижения

Все достижения (8)

Наибольший вклад в теги

Все теги (56)

Лучшие ответы пользователя

Все ответы (93)
  • Нужно ли защищать обработчик формы (PHP файл) от прямого доступа?

    Ninazu
    @Ninazu
    1. Создай единую точку входа, и оставь ее в корне сайта, остальные файлы вынеси за пределы (Это не только сделает твое приложении более гибким, понятным, и структурированным, но и в случае отваливания веб сервера, такое когда-то у меня было, после кривого обновлении до php7, исходный код показывался браузером)
    2. Не забудь про SQL иньекции. Никакой конкатенации или вставок PHP. Только плейсхолдеры и байндинг
    3. Если есть возможность загружать файлы, нужно исключить возможность исполнения в этой папке.
    Ответ написан
  • Почему PhpStorm требует установки расширения для curl и json?

    Ninazu
    @Ninazu
    Расширение - это дополнительные модули в PHP, они реализуют конкретно в вашем случае работу с CURL и JSON.
    Узнать подключенные модули
    https://www.php.net/manual/ru/function.extension-l...
    Список всех модулей
    https://www.php.net/manual/ru/extensions.alphabeti...

    Если на вашем сервере они установленны, то не факт что они будут установленны и на другом сервере. Поэтому PHPStorm рекоммендует добавить их в правила композера, чтоб в случае разворачивания на другом сервере, композер сообщил вам что расширения отсутсвуют

    Если бесит инспектор, то можете отключить это уведомление.
    5d4061ba05631701466003.png
    Ответ написан
  • Какой алгоритм предпочитаете для проверки целостности данных/файлов?

    Ninazu
    @Ninazu
    То что вы понимаете под
    можно "сломать" файл и хэш при этом не изменится

    Называется коллизией. Обычно такие атаки имеют крайне жесткие требования. Например оба файла должны быть сугубо указанного размера. Часть файла должна совпадать. И т.д. И это ускоряет перебор в какое-то количество раз. Но не значит что дает возможность модифицировать как угодно один файл, и подогнать результат к значению хеша.
    Если бы это было так. То всякие интернет казино, с преждевременными результатами и контролем честности, а также блоки биткоина. Сделал бы очень богатыми людей которые способны подбирать коллизии такие)
    Ответ написан
  • Можно ли исправить эту очень полезную функцию PHP?

    Ninazu
    @Ninazu
    Если уже переписываете, то переписывайте нормально. Избавляйтесь от глобального массива $CONF, рекурсии и функций без неймспейсов. Также у вас функция как записывает так и читает значения, что немного выносит мозг. Также считаю что исключению там не место, лучше заменить на значение по умолчанию

    class Config {
    
    	protected static array $register = [];
    
    	public static function get(string $name, $default = null) {
    		$keys = explode('.', $name);
    
    		$pointer = self::$register;
    
    		foreach ($keys as $key) {
    			if (!array_key_exists($key, $pointer)) {
    				/*Если ключа нет, выставить его*/
    				//self::set($name, $default);
    
    				/*Бросить исключение*/
    				//throw new Exception("No such key: {$name}");
    
    				/*Вернуть значение по умолчанию*/
    				return $default;
    			}
    
    			$pointer = &$pointer[$key];
    		}
    
    		return $pointer;
    	}
    
    	public static function set(string $name, $value = null) {
    		$arr = &self::$register;
    		$keys = explode('.', $name);
    
    		foreach ($keys as $key) {
    			$arr = &$arr[$key];
    		}
    
    		if (is_array($arr) && is_array($value)) {
    			$arr = array_replace_recursive($arr, $value);
    		} else {
    			$arr = $value;
    		}
    	}
    
    	public static function getTree() {
    		return self::$register;
    	}
    }
    
    Config::set("config", [
    	"name" => "test",
    ]);
    print_r(Config::get("config"));
    echo "(config)\n\n";
    
    Config::set("config.class.name", "A");
    print_r(Config::get("config.class.name"));
    echo "\n(config.class.name)\n\n";
    
    Config::set("config", [
    	"class" => [
    		"test" => "B",
    	],
    ]);
    print_r(Config::get("config.class"));
    echo "\n(config.class)\n\n";
    
    Config::set("config.class", null);
    print_r(Config::get("config.class"));
    echo "\n(config.class)\n\n";
    
    print_r(Config::get("config.fake.key.without.value", "UNDEFINED"));
    echo "\n(config.fake.key.without.value)\n\n";
    
    Config::set("config.nullable", null);
    print_r(Config::get("config.nullable", "NULL"));
    echo "\n(config.nullable)\n\n";
    
    print_r(Config::getTree());
    echo "\n(all)\n";


    Работает в PHP7.4
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (67)