Задать вопрос
  • В чем удобство ставить boolean константу/строку/число в начале выражения?

    VladimirAndreev
    @VladimirAndreev
    php web dev
    $result = $resource->delete();

    if(false = $result) {} // Parse error

    if($result = false) {} // плавающий баг, счастливой отладки...
    Ответ написан
    2 комментария
  • В чем удобство ставить boolean константу/строку/число в начале выражения?

    Negezor
    @Negezor
    Senior Shaurma Developer
    Это yoda style
    Ответ написан
    Комментировать
  • В чем удобство ставить boolean константу/строку/число в начале выражения?

    DevMan
    @DevMan
    чтоб по ошибке не написать = вместо ==/===
    ($media->delete() = false) - валидно
    (false = $resource->delete()) - не валидно

    других причин нет.
    Ответ написан
    2 комментария
  • Потеря соединения с Интернетом, "спасение" - перезагрузка маршрутиризатора, НО, не проблема ли эта провайдера?

    @SaM1808
    Исключите сначала проблему у себя, например:
    - Воткнуть инет напрямую в компьютер и мониторить его обрывы
    - Попробовать на время поменять маршрутизатор, помониторить на нем
    - В конце концов обновить прошивку своего маршрутизатора, попробовать другой блок питания (бывают проблемы)

    Если обрывы все равно сохраняются - это весомая аргументация Оператору.

    Ну и честно, написано несколько в сумбурном стиле... Почему то напомнило это...
    Спойлер

    Мне нужен совет.
    Заранее благодарю.
    Некоторое время назад я начал подозревать свою жену в хождении "налево".
    Все обычно.
    Если на телефонные звонки подхожу я - кладут трубку.
    Она стала часто встречаться "с подружками", когда я спрашиваю с кем именно, она отвечает, что я их все равно не знаю.
    Я всегда жду такси, на котором она возвращается домой, но она выходит за углом дома, так что я не вижу, что это за машина.
    Однажды я взял ее мобильник, чтобы посмотреть, сколько времени, так она так взбесилась и запретила мне к нему прикасаться.
    Так или иначе я никогда не заговаривал об этом с ней.
    Наверно, я никогда не хотел бы узнать правду, но прошлой ночью, когда она ни с того ни с сего куда-то ушла, я заинтересовался.
    Я решил спрятаться за своей машиной - оттуда открывается чудесный вид на всю улицу и я смогу видеть в какую машину она сядет.
    Я присел на корточки у своей машины и вдруг заметил, что тормозные диски на переднем колесе имеют какие-то пятна, похожие на ржавчину. Подскажите, можно ли ездить с такими дисками или надо их проточить, а если надо менять, то можно ли ставить не оригинал или если да, то какой лучше? Или это может быть из-за колодок, у меня стоит не оригинал "Нишинбо", покупал на рынке, есть подозрение, что это китайское палево.
    Может тогда просто поменять колодки?
    Очень надеюсь на вашу квалифицированную помощь в этом важном для меня вопрос
    Ответ написан
    1 комментарий
  • Как преобразовать растр в вектор?

    Djalina
    @Djalina
    дизайнер
    Вопрос некорректен.
    Если вам нужно просто поместить изображение в файл иллюстратора, то сохраняйте в psd и вставляйте в илл.
    Ответ написан
    Комментировать
  • Как работает приоритет выражений в php?

    p00h
    @p00h
    Фехтовальщик-стропальщик
    Код читается сверху вниз, слева направо. Интерпретатор делает из всего вашего дерева файлов одну огромную страницу кода и выполняет ее, опять же, сверху вниз, слева направо. Какое выражение встретится первым - то и выполнится.
    Ответ написан
    5 комментариев
  • Что почитать про безопасность?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Комментировать
  • Попросили проверить код, на что смотреть нужно?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    Смотря зачем)). Я когда делаю Code Review критерии следующие:

    * Безопасность:
    - Каждый аргумент метода простого типа должен проверяться на тип в случае его проксирования и на граничные значения в случае обработки. Чуть что не так - бросается исключение. Если метод с кучкой аргументов на 80% состоит из поверки из аргументов - это вполне норм))
    - Никаких trigger_error, только исключения.
    - Исключения ДОЛЖНЫ быть человеко-понятны, всякие "Something went wrong" можно отдавать пользователю, но в лог должно попасть исключение со стектрейсом и человеко-понятным описанием, что же там пошло не так.
    - Каждый аргумент (объект) метода должен быть с тайпхинтингом на этот его класс, или интерфейс.
    - За eval как правило шлю на **й.
    - @ допускается только в безвыходных ситуациях, например проверка json_last_error.
    - Перед работой с БД - обязательная проверка данных.
    - Никаких == и !=. Со swtich - единственное исключение, по ситуации.
    - Если метод возвращает не только bool, а еще что-то - жесткая проверка с ===, или !== обязательна.
    - Никаких условий с присваиваниями внутри. while($row = ...) - тоже идет лесом.
    - Магические геттеры/сеттеры разрешаются только в безвыходных ситуациях, в остальном - запрещены.
    - Конкатенации в sql - только в безвыходных ситуациях.
    - Параметры в sql - ТОЛЬКО через плейсхолдеры.
    - Никаких глобальных переменных.
    - Даты в виде строки разрешаются только в шаблонах и в БД, в пхп коде сразу преобразуется в \DateTimeImmutable (в безвыходных ситуациях разрешено \DateTime)
    - Конечно зависит от проекта, но как приавло должно быть всего две точки входа: index.php для web и console(или как-то по другому назваться) - для консоли.

    * Кодстайл PSR-2 + PSR-5 как минимум, + еще куча более жестких требований (для начала все то что в PSR помечено как SHOULD - становится MUST)
    - В PhpStorm ни одна строчка не должна подсвечиваться (исключением является typo ошибки, например словарик не знает какой-то из аббревиатур, принятых в вашем проекте). При этом разрешается использовать /** @noinspection *** */ для безвыходных ситуаций.
    - Если кто-то говорит, что пишет в другом редакторе и у него не подсвечивается, на эти отговорки кладется ВОТ ТАКЕЕЕНЫЙ мужской половой **й и отправляется на доработку)).

    * Организация кода:
    - Никаких глобальных функций.
    - Классы без неймспейса разрешаются только в исключительно безвыходных ситуациях.

    * Тестируемость (в смысле простота тестирования) кода должна быть высокая.
    - Покрытие кода обязательно для всех возможных кейсов использования каждого публичного метода с моками зависимостей.

    * Принципы MVC:
    - Никаких обработок пользовательского ввода в моделях, от слова совсем.
    - Никаких ***ть запросов в БД из шаблонов.
    - Никаких верстки/js/css/sql-ин в контроллерах.
    - В моделях НИКАКОЙ МАГИИ, только приватные свойства + геттеры с сеттерами.
    - В моделях разрешено использовать метод save(при наличии такого разумеется) только в исключительных ситуациях. Во всех остальных - либо insert, либо update.

    * Принципы SOLD:
    - Никаких божественных объектов умеющих во все.
    - Если метод для внутреннего пользования - private, никаких public.
    - Статические методы разрешаются только в случае безвыходности.

    * Принцип DRY разрешено нарушать в случаях:
    - Явного разделения обязанностей
    - В тестах (каждый тест должен быть независимым, на сколько это возможно)

    * Работа с БД:
    - Запрос в цикле должен быть РЕАЛЬНО обоснован.
    - За ORDER BY RAND() - шлю на***й.
    - Поиск не по ключам (конечно если таблица НЕ на 5 строк) запрещен.
    - Поиск без LIMIT (опять же если таблица НЕ на 5 строк) запрещен.
    - SELECT * - запрещен.
    - Денормализация БД должна быть обоснована.
    - MyISAM не используется (так уж)) )
    - Множественные операции обязательно в транзакции, с откатом если чо пошло не так.
    - БД не должна содержать бизнес логики, только данные в целостном виде.
    - Не должно быть нецелесообразного дерганья БД там, где без этого можно обойтись.

    * Кэш должен очищаться по двум условиям (не по одному из, а именно по двум):
    - Время.
    - Протухание по бизнес логике.
    Разрешается по только времени в безвыходных ситуациях, но тогда время - короткий период.
    - При расчете ключей кэша должна использоваться переменная из конфигурации приложения (на случай обновлений кэш сбрасывается кодом, а не флашем кэш-сервера). В случае использования множества серверов - это очень удобный и гибкий инструмент при диплое.

    * О людях:
    - "Я привык писать так и буду дальше" - не вопрос, ревью пройдешь только когда поменяешь свое мнение.
    - "Я пишу в vim-е и мне так удобно" - здорово, код консолью я тоже в нем пишу)) но есть требования к коду, если в них не сможешь - не пройдешь ревью.
    - "Я скопировал этот страшный метод и поменял 2 строчки" - это конечно замечательно, но по блейму автор всего этого метода ты, так что давай без говняшек, хорошо?
    - "Оно же работает!" - вот эта фраза переводится примерно так: "да, я понимаю, что пишу полную хрень, но не могу писать нормально потому, что руки из жо", я правильно тебя понял?))
    - "У меня все работает!" - рад за тебя, а как на счет продакшна?
    - "Там все просто" - не используй слово "просто", от слова "совсем". Вот тебе кусок кода (первого попавшегося с сложной бизнес логикой), где там ошибка (не важно есть она, или нет)? Ты смотришь его уже 2 минуты, в чем проблема, там же все "просто"))

    * Всякое:
    ActiveRecord (это я вам как в прошлом фанат Yii говорю) - полное говно, примите за исходную. По факту у вас бесконтрольно по проекту гуляют модельки с подключением к БД. Не раз натыкался на то, что в тех же шаблонах вызывают save, или update (за такое надо сжигать).
    То, что используется Laravel - это печально((. Что бы выполнить требования приведенные выше, приходится "воевать" с фреймворком.

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

    UPD

    Формализировал данные критерии по ссылочке: https://github.com/index0h/php-conventions
    Ответ написан
    55 комментариев
  • Что может сподвигнуть отображаемый в браузере текст игнорировать тег br?

    ThunderCat
    @ThunderCat Куратор тега CSS
    {PHP, MySql, HTML, JS, CSS} developer
    br { display: none; }
    или
    br { position:absolute; }
    или
    br { float:left; margin:0 0; }
    Ответ написан
    Комментировать
  • Возмжно ли перехватить пароли через HTTPS?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Дома с переломом ноги
    Возможно.

    Непросто, требует некоторых предварительных шагов, но возможно. Если перехватить сессионный ключ, то сессию можно расшифровать. И тогда весь трафик внутри туннеля видно.
    Ответ написан
    4 комментария
  • Возмжно ли перехватить пароли через HTTPS?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Кратко: Возможно.
    Шифруйте свой трафик своим протоколом внутри SSL.
    Ответ написан
    2 комментария
  • Возмжно ли перехватить пароли через HTTPS?

    nursultanya
    @nursultanya
    Увлекаюсь программированием
    При отправке формы, на стороне браузера всё шифруется публичным ключем. Потому провайдер не видит что отправляется, он видит бессмысленные символы. На сервере всё расшифровывается и уже используется. То же самое и при отправке данных с сервера, они все зашифрованы.
    При изменении сайта на фейковый, браузер не сможет ничего отобразить, так как сервер сертификации ему даёт определенный публичный ключ для расшифровки и он очевидно не будет подходить к фейковому сайту.
    Ответ написан
    4 комментария
  • Возмжно ли перехватить пароли через HTTPS?

    Jump
    @Jump
    Системный администратор со стажем.
    Да, это возможно.
    Хотя и непросто.
    Безопасность зависит в основном от вашей внимательности.
    Перехватывается HTTPS трафик так же легко как и HTTP, только его еще и расшифровать надо.
    Для дешифровки нужны ключи - но в открытом виде идут только публичные ключи, они годятся для шифрования, для дешифровки нужен приватный.
    Поэтому перехватить ключ у вас не получится - но вы можете просто подсунуть им свою пару ключей, вклинившись посередине канала.
    И спокойно будете читать весь трафик.
    Только вот внимательный пользователь увидит подмену сертификата - и прервет связь.
    А если пользователь невнимательный - без проблем.

    Более общий вопрос - может ли левый хост подменить весь сайт при подключении через HTTPS?
    Допустим у вас есть сайт vasyapupkin.com вы получили сертификат от доверенного центра, привязанный к домену vasyapupkin.com.
    Я хочу перехватить ваш трафик.
    Для этого я регистрирую домен vasyapubkin.com получаю сертификат от доверенного центра на этот домен.
    После чего ставлю прокси сервер и заворачиваю перехваченный трафик на него.
    Я подсовываю вам ссылку на vasyapubkin.com вы не замечаете что название немного не совпадает, ваш браузер подтверждает что все отлично, все зашифровано.

    Хотя затратно это, и не гарантирован результат, но если информация очень ценная сделать можно.
    Ответ написан
    4 комментария
  • Что мой провайдер знает обо мне?

    @nirvimel
    Когда я захожу на определенный сайт, провайдер видит URL?

    Да.

    А если я захожу на https?

    Известен IP сервера и имя домена. Больше ничего.

    Откуда провайдер узнает, что я скачиваю определенный фильм/программу через torrent?

    Торрент-клиент общается с трекером по HTTP. Все видно насквозь: конкретные торренты + вся статистика (когда начато скачивание, когда закончено, когда пошла раздача, сколько роздано). Возможно подключение к трекеру и по HTTPS, но rutracker.org такой возможности не дает (мне тоже интересно почему).

    Все пакеты которые я получаю и раздаю значит провайдер скачивает себе, чтобы узнать что это за фильм/программа?

    Провайдер не хранит у себя весь трафик. Это технически невозможно. Но трафик обрабатывается, классифицируется и ведутся логи о том какой тип трафика когда входил/уходил от абонента.

    Или он отслеживает факт скачивания .torrent файла, а затем делает вывод по идущим пакетам, что это скачивается?

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

    Когда я пользуюсь VPN, что видит провайдер?

    Видит шифрованный траффик на конкретный IP. По IP можно узнать, что этот диапазон продается под VPSы. Сам факт шифрованного трафика вешает абонента в списки тех, "кому есть что скрывать", а значит подозреваемых при любом розыске.

    Что я зашел на определенный IP и с него идут зашифрованные потоки?

    Дальнейшее направление трафика от VPN-сервера отследить невозможно (по крайней мере, на оборудовании провайдера в автоматическом режиме). Но при целенаправленной слежке за абонентом в принципе возможно по временным меткам сопоставить трафик абонента с трафиком любого сервера.

    OpenVPN будет работать через VPN IP и в браузере и при обновлении Windows, драйверов, ...?

    В зависимости от настройки. Но в общем случае, да, так.

    Читал, что в Windows есть такая особенность, что если провайдер как-то урезает пакет, то VPN отключается и сайту показывается мой реальный IP?

    Это не связанно с провайдером. Это особенность Windows. Когда VPN отваливается, весь трафик вылетает наружу в открытом виде. Опять же зависит от настроек. Но это еще одна цена "удобства" при использовании Windows.

    При этом провайдер видит на каком я сайте, что скачиваю?

    VPN отвалился - хацкер спалился.

    Таких фишек много?

    Смотря о чем речь. В сфере сетевой безопасности и анонимности различных нюансов вообще много.

    Как от них защитится?

    Учить мат.часть. Разбираться в сетевых протоколах и в устройстве ОС.

    Если пользуюсь каким-то расширением типа ZenMate, dotvpn, провайдер аналогично как и с VPN видит что что-то отправляется и приходит на определенный VPN IP?

    Расширения очень разные. Они могут базироваться на совершенно разных технологиях. Ни один специалист вам не скажет за все расширения. Не исключено, что многие из них, по сути - honeypot, то есть созданы с целью слежения за любителями анонимности, привлекают своим удобством и дают ложное чувство безопасности.

    При использовании Tor, кто-то пользуется моим IP, пока я пользуюсь чужим?

    Нет. Если у вас не сконфигурирован Exit Node.

    Что при этом видит провайдер, что я получаю потоки данных с определенных IP и каждый раз разный IP?

    У них есть система точного обнаружения использования Tor. Это факт остается в логах с теми же последствиями, что и для VPN.

    Провайдер видит URL?

    Через Tor и VPN - нет.

    Каким образом можно полностью управлять сетью на ПК, видеть что, куда и когда отправляется или приходит на ПК (Windows, Linux)?

    Видеть все: https://www.google.com/search?q=Wireshark
    Блокировать все лишнее: https://www.google.com/search?q=Comodo+Firewall
    Ответ написан
    22 комментария
  • Как работают переменные в Javascript?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    конечно выдает до onload, ведь onload это callback, он произойдет после загрузки изображения. У вас код тупо идет дальше.
    Ответ написан
    5 комментариев
  • Что делать при несовпадении координат на клиенте и сервере?

    @Mercury13
    Программист на «си с крестами» и не только
    Я об играх, где игрок управляет одним объектом: шутерах, гонках…
    Клиент и сервер держат несколько исторических положений.

    Координаты СЕБЯ, ЛЮБИМОГО — клиентские. Если серверные координаты в такт 1234 не совпадают с нашими — откатываемся к серверным, повторно прокрутив нужное количество тактов управления.
    Вещи неуправляемые/слабоуправляемые, вроде запаса жизни, берутся подтверждённые сервером.

    Координаты ВРАГОВ — серверные (возможно, каким-то образом экстраполированные).

    Для физики пуль пишется т.н. «компенсация пинга»: если клиент пишет, что в такт 1234 он стреляет, сервер восстанавливает, что КЛИЕНТ ВИДЕЛ в такт 1234, и сравнивает попадание именно с ТЕМ положением клиента. Для медленных снарядов компенсация обычно не пишется.
    Ответ написан
    Комментировать
  • Что делать при несовпадении координат на клиенте и сервере?

    jamakasi666
    @jamakasi666
    Просто IT'шник.
    Конкретно в Вашем случае ответ очень прост.
    Клиент предсказывает свое положение но сервер должен ответить координатами где клиент находится и этот ответ будет более приоритетным. Чтобы все это заработало правильно синхронизируйте клиента и сервера по тикам сервера а значит и храните последние N состояний мира на сервере и клиенте т.е. получится следующая схема:
    Клиент предсказывает свое положение и отправляет серверу что двигаюсь вправо тик 10
    Сервер принял пакет, смотрит тик, откатывает состояние мира до этого тика и задает движение вправо.
    Сервер отправляет клиентам состояние игрового мира с номером своего тика.
    Клиент приняв пакет со своими координатами и тиком сервера откатывает мир на этот тик и смотрит угадало ли предсказание координаты. Если угадало то ничего не меняешь, если не угодало то откат на эту позицию и слушать сервер дальше.
    Кроме того этот механизм сразу решит проблемы с выстрелами и взаимодействиями т.к. сервер может востановить картину что видел игрок в конкретный момент времени и мог ли он попасть в объект\игрока.

    По сути и простыми словами выглядит это так:
    Сервер всегда находится в настоящем времени но может заглядывать в прошлое.
    Клиент всегда видит прошлое состояние мира но сам(и объекты с предсказанием) находятся в настоящем.
    Ко всему сказанному сервер может(точнее обязательно должен! ) вводить искуственную задержку для клиентов(в пределах разумного, вычислять среднюю для всех клиентов или некую фиксированную), это гарантированно заставит всех клиентов видеть одинаковое состояние мира независимо от их задержки сети.

    Вот, это если вкратце и простыми словами.
    Ответ написан
    Комментировать
  • Что делать при несовпадении координат на клиенте и сервере?

    @napa3um
    Тема оооочень глубокая и сложная, тут простых ответов быть не может. Решение будет зависеть от геймплея, технических ресурсов сервера и клиентов, от желаемого качества того или иного аспекта реализации и т.д. Универсального ответа нет, есть лишь "бэст практики" для каких-то типовых проблем (а решать, являются ли они проблемами - вам в вашем конкретном проекте).

    https://habr.com/post/328702/
    https://habr.com/post/302394/
    https://habr.com/company/pixonic/blog/415959/
    Ответ написан
    Комментировать
  • Что делать при несовпадении координат на клиенте и сервере?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Всегда доводим интерполяционно торможение персонажа на клиенте, используя координаты сервера.
    1. Вправо отпустили
    2. На сервер отправили и получили координаты остановки
    3. Клиента медленно, в течение 10-15мс (если он двигается в этот момент) и 250-300мс (если замер на месте и не поворачивается) ставим на эту позицию.

    Если Вы держите полностью игровой мир на сервере, значит сервер всегда главный.

    UPD: Добавлю, что можно также позже проверить на сервере через расчёт координат с клиента и сделать реверс-тесты по контрольным точкам событий на сервере, чтобы дать заключение о корректности события, рассчитанного клиентом.

    Например, чтобы попадание было распознано как засчитанное с именно этих координат и именно из этого оружия, нужно проверить в обратную сторону (по временной линии событий) точку выстрела и возможность выстрела, путь перемещения и время между предыдущей проверкой и текущей.
    Т.е., восстановить на основе ряда факторов предыдущее состояние игрока, которое не было отправлено (или не успело ещё доставиться) на сервер между пакетами из-за длительности пинга.
    Ответ написан
    7 комментариев