• Как скрыть опасную функцию?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const { function1, function2 } = (function() {
      function unsafe() {}
    
      return {
        function1() {},
        function2() {},
      };
    })();
    Ответ написан
    Комментировать
  • Как работает двусторонее асиметричное шифрование?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Да, перейти на другой алгоритм шифрования.

    Ассиметричное шифрование и и расшифровка работают медленно. Поэтому этим методом передается только сгенерированный только что пароль сессии, а ассиметричное шифрование позволяет думать, что никто его не перехватил. Дальнейшая сессия шифруется симметричным быстрым алгоритмом.
    Ответ написан
    Комментировать
  • Что значит оборачивание функции в скобки (function() { ... })?

    copist
    @copist
    Empower people to give
    Короткий ответ
    (function() { ... })()
    Это определение анонимной функции без параметров и непосредственный вызов её, так же, без параметров

    Длинный ответ
    Зачем оборачивать значение в круглые скобки?

    Оборачивание функции в скобки, так же как и оборачивание константы в скобки - это просто способ показать интерпретатору, что это значение внутри скобок может быть использовано как возвращаемое значение.
    var var_a = 5
    (var_a) /* или */ (5) // не является ошибкой, возвращает значение переменной или выражения
    function func_b() { }
    (func_b) /* или */ (function func_b() { }) // не является ошибкой, возвращает ссылку на функцию
    var var_c = { key: "val" }
    (var_c) /* или */ ({ key: "val" }) // не является ошибкой, возвращает объект
    var var_d = [ "one", "two" ]
    (var_d) /* или */ ([ "one", "two" ]) // не является ошибкой, возвращает массив


    Ну а раз (func_b) - это ссылка на функцию func_b, то значит её можно сразу же вызвать.
    A если (var_c) - это объект, то значит можно сразу же использовать его
    Аналогично (var_d) - это массив, то значит можно сразу же использовать его

    (func_b)() или (function func_b() { })() вызвать функцию
    (var_c).key или ({ "key": "val" }).key использовать объект
    (var_d)[0] или ([ "one", "two" ])[0] использовать массив

    Синтаксической ошибкой было бы использование функции, массива, объекта без скобок ( )
    function func_b() { }() ошибка "Unexpected token )"

    Хотя нет ошибки, по крайней мере в Google Chrome
    { key: "val" }["key"]
    ["one", "two"][0]

    Для чего вообще придумали самовызывающиеся функции?
    Для того, чтобы изолировать переменные и функции, чтобы они не попадали в глобальную область видимости.

    Сравни
    var a = "test"
    alert(a)

    по завершении этого блока переменная a болтается в глобальной области видимости

    и
    (function(){
        var a = "test"
    })()
    
    alert(a) // недоступно, потому что она была локальной переменной внутри анонимной функции


    Почему скобки ( ) пустые?
    В данном случае у функции function() { ... }нет формальных параметров, значит и вызывать можно без параметров.

    Но вообще в самовызывающуюся функцию можно передавать параметры. Это общая практика передачи ссылок на глобальные объекты:

    (function (w, d, $) {
       // некоторым нравится сокращать код путём использования коротких имён переменных
       w['fizz'] = "buzz" // вот так можно принудительно зарегистрировать
                           // глобальную переменную fizz
       $('body').css({background: 'red'}) // вот так можно работать с jQuery через привычную $
                           // даже если библиотека была загружена в режиме noСonflict
    }(window, document, jQuery))


    Некоторым не нравится длинный вариант проверки на undefined и они специально предусматривают лишний параметр, который не инициализируют

    (function (message1, message2, empty) {
        // это и есть проверка на undefined
        if (message1 === empty)
            alert('message1 is undefined')
        else
            alert('message1 = ' + message1)
    
        if (message2 === empty)
            alert('message2 is undefined')
        else
            alert('message2 = ' + message2)
    })("test") // вызвана только с одним параметром, значит второй по имени message2
    //  будет пустой, а третий empty специально ввели в качестве образца
    //  данных с типом "undefined", для служебного использования

    Зачем функция анонимная?
    Аналогично - чтобы не регистрировать её имя в глобальной области видимости, если она нужна один раз.
    Ответ написан
    7 комментариев
  • Как открывать и закрывать ссылку по таймеру?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    После загрузки страницы запрашиваете на сервере текущее время и создаёте два таймера - на открытие ссылки и на её закрытие.
    Ответ написан
    3 комментария
  • Как из админ панели обновить главную страницу сайта?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Как из админ панели

    какой админ панели, от чего эта панель?

    как при клике на ссылку в админ панели чтоб обновилась главная страница сайта когда там есть посетитель

    вообще странная затея, опишите адекватно, что Вы хотите сделать и на чем сайт, как минимум. В целом обновление страницы пользователя возможно, для этого есть ajax или websocets. Собственно чат любой так работает. Есть событие при котором страница пользователя как-то реагирует на него. А что вызвало это событие это уже не важно, клик по ссылки или еще что-то.
    Ответ написан
    5 комментариев
  • Как соединить четыре SQL-запроса в один?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    1) читать про join
    2) читать про индексы тут, тут и тут.
    3) составить запрос и прогнать его через explain.
    4) Настроить индексы...
    5) Profit
    Ответ написан
    Комментировать
  • Как организовать поиск диалогов?

    @balamyt92
    ; select * from users; --
    Причем здесь PHP совершенно мне не ясно. Как вы храните данные конечно вы не скажите, потому мой хрустальный шар подсказал что в базе данных (если это не так начните с того что бы хранить все в БД).
    SLECT DISTINCT user.id, user.name FROM user 
    LEFT JOIN message ON user.id = message.user_id
    WHERE messages.target_user = $user_id$ OR messages.user_id = $user_id$
    -- $user_id$ это для какого юзера ищем список контактов
    -- messages.target_user - id юзера которому предназначается сообщение
    -- messages.user_id - id отправителя


    ну вот примерно таким запросом можно найти всех пользователей которым мы писали или которые нам писали.
    Ответ написан
    Комментировать
  • Как получить последний ключ массива?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    array_pop( array_keys( $arr))

    1. array_keys() вернет массив ключей;
    2. array_pop() вернет значение последнего элемента массива.
    Тест
    <?php
    
    $arr = [
      2 => 1,
      3 => 1,
      4 => 1,	
    ];
    
    echo array_pop( array_keys( $arr)) . PHP_EOL;  // 4
    Ответ написан
    Комментировать
  • Что делать при некорректном отображении HTML блоков, выведенных через PHP?

    @Yan-s
    Переверстать так, чтобы отображалось как вам требуется.
    Ответ написан
    Комментировать
  • Как сконвертировать дату в timestamp?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Комментировать
  • Каким образом куки помогают в оптимизации сайта?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Куки не используют для изображений. Для этого используется кеширование через заголовки сервера. Куки - используют только для хранения промежуточных данных: ID-сессии, настройки интерфейса, отслеживание посещений и т.д.
    Куки и LocalStorage - никак не помогают в оптимизации сайта.
    Ответ написан
    Комментировать
  • Почему нельзя расшифровать HTTPS?

    CityCat4
    @CityCat4 Куратор тега Цифровые сертификаты
    //COPY01 EXEC PGM=IEBGENER
    Слушайте больше тех, кто трет по ушам за то, что https нельзя расшифровать. "Что сделано одним человеком, завсегда другой может разломать" (С)
    Сертификат состоит из двух частей - собственно сертификата и ключа. Сертификат рассылается всем подряд, его рассылка безопасна. Им шифруют. Ключ должен хранится в секрете, утечка ключа - полная компроментация сертификата. Им расшифровывают.
    Защита https соединения основана на доверенных сертификатах. Когда Алиса хочет установить соединение с Бобом, она отправляем ему свой сертификат. Боб соответственно отправляет свой. И сейчас они уже могли бы установить соединение и сгенерить сессионный ключ, но возникает вопрос - а как Алиса удостоверится, что полученный ею сертификат принадлежит Бобу, а не хакеру Джону?
    Скажу сразу - путей убедиться в том, что сертификат принадлежит Бобу, основываясь только на сертификате - нет. Нужно либо использовать предварительно согласованный ключ, если Алиса и Боб когда-то встречались раньше, либо обратиться к некоему арбитру, доверие к которому абсолютно ("командир сказал - хорек! И никаких сусликов!"). Если арбитр подтверждает, что этот сертификат принадлежит Бобу - значит так оно и есть.
    И вот тут на сцену выступают доверенные корневые центры аутентификации. Это перечень арбитров, которые являются "абсолютной истиной" для данной системы. Если один из них, причем неважно какой сказал "это сертификат Боба" - система считает, что это сертификат Боба и переходит к генерации уникального сессионного ключа, который в теории не должен быть известен никому, кроме Боба. Не зная этого ключа соединение действительно расшифровать невозможно.
    Но "хитер демон в Аппсале, а Язон динАльт хитрее". Хакер Джон развертывает у себя удостоверяющий центр и убеждает/заставляет каким-нибудь образом установить сертификат своего CA в корневые. Что происходит после этого? А то, что любой сертификат, выпущенный хакером Джоном - будет считаться доверенным!
    Теперь Джону нужно "всего лишь" перехватить начальный пакет соединения Алисы к Бобу (не пропуская его к Бобу, конечно же). Джон выпускает себе сертификат с тем адресом, на который обратилась Алиса, а система Алисы посчитает этот сертификат доверенным - ведь он выпущен СA Джона, который у нее доверенный! Алиса установит соединение с Джоном, предполагая, что это Боб и отдаст ему сессионный ключ. Джон просмотрит урл, куда обратилась Алиса и, если ему это неинтересно, то он просто пропустит соединение через себя - отдаст сессионный ключ Бобу и дальше в соединение не вмешивается. Этот режим называется splice. Если же ему интересно, о чем там собираются они пообщаться, он инициирует соединение от своего имени, используя сессионный ключ Алисы и в дальнейшем так и сидит посередине, передавая пакеты справа налево и наоборот. Этот режим называется peek.
    Это классическая атака Man-in-the-Middle (человек посередине) и она применяется в любом прокси squid с включенным режимом бампинга.
    Остается только один вопрос - а как же Джон заставит Алису поставить сертификат своего СA в доверенные? Ну, здесь есть как минимум два варианта
    1. Алиса - сотрудник конторы, а Джон - ее директор и хочет знать, куда ходят его подчиненные в рабочее время. Поэтому он наряжает админов сделать так, чтобы сертификат конторского CA у всех стоял в доверенных. Это стандартный сценарий в любой мало-мальски крупной конторе.
    2. "Джон" является госструктурой, которую нарядили контролировать куда ходят граждане и она обязует всех провайдеров просто не пускать никуда, если на компе не стоит сертификата CA от "Джона". Это уже в реале сделано в Казахстане и скоро будет и в России.
    Ответ написан
    Комментировать
  • Что означает в PHP __NEWL__?

    PravdorubMSK
    @PravdorubMSK
    это объявленная программистом константа
    Ответ написан
    Комментировать
  • Можно ли как-то делать автопостинг в VK API без колесика рядом с датой, которое ведет на standalone приложение?

    Ahen
    @Ahen
    Универсальный дилетант
    Выполнять авторизацию, представляясь официальным приложением.
    https://vk.com/dev/auth_direct - суть в этом.

    Android:
    client_id: 2274003
    client_secret: hHbZxrka2uZ6jB1inYsH

    IPhone:
    client_id: 3140623
    client_secret: VeWdmVclDCtn6ihuP1nt

    IPad:
    client_id: 3682744
    client_secret: mY6CDUswIVdJLCD3j15n

    Windows desktop:
    client_id: 3697615
    client_secret: AlVXZFMUqyrnABp8ncuU

    Windows phone:
    client_id: 3502557
    client_secret: PEObAuQi6KloPM4T30DV
    Ответ написан
    4 комментария
  • Как разобраться в битовых масках или как их там?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Про двоичное представление чисел вы же в курсе?
    0 = 0000 0000
    1 = 0000 0001
    2 = 0000 0010
    3 = 0000 0011
    4 = 0000 0100
    5 = 0000 0101
    6 = 0000 0110
    7 = 0000 0111
    8 = 0000 1000
    9 = 0000 1001

    ... и так далее. До 232 или даже до 264 - зависит от системы, 32- или 64-битной и языка программирования.

    Позиции битов считаются справа налево. Крайний правый бит имеет позицию 0. Позиция бита – это степень двойки. Если бит установлен в 1, надо прибавить 2 в степени этой позиции.

    Например, число 3 = 0000 0011 означает 20 + 21 = 1 + 2 = 3.

    Примечательно, что степени двойки – 0, 1, 2, 4, 8, 16, 32, 64, ... – выражаются всего одним включённым битом, одной единичкой, остальные биты – нули.

    Битовые маски – это договорённость, что каждый бит (каждая позиция) значит что-то определённое, что может быть включено или выключено, 1 или 0. Как линейка выключателей.

    Например, с разрешениями ВКонтакте:
    1 - бит 0 - notify
    2 - бит 1 - friends
    4 - бит 2 - photos
    8 - бит 3 - audio

    У ВК линейка длинная, состоит из 32 «выключателей».

    Допустим, вашему приложению требуются разрешения photos и audio – биты 2 и 3 надо установить в 1, остальные 0. Это можно сделать простым сложением: 22 + 23 = 4+8 = 12. В двоичной системе: 12 = 0000 0000 0000 1100

    Для удобства вычисления ВК прямо пишут значения, которые надо прибавить, чтобы получить нужную битовую маску – итоговое число, которое вы передадите в метод АПИ для запроса разрешения.

    Ещё один пример, вам требуется стена wall и offline доступ в любое время. Смотрите в таблице, какие там числа: wall (+8192) и offline (+65536). Значит, вам нужно просить разрешения для маски 73728
    Ответ написан
    Комментировать
  • Как перевернуть fetch_assoc() на php?

    dzheka3d
    @dzheka3d
    При запросе в БД использовать сортировкуORDER BY `id` DESC Ну или по другому полю, по которому вы вибираете.
    Ответ написан
    Комментировать
  • Как поженить Express с Laravel?

    rshaibakov
    @rshaibakov
    Web-разработчик
    Не совсем понял для чего easyrtc. Но так как express и laravel - это фреймворки для разных ЯП, то нужно создать на express свой REST API сервер и общаться с ним. Обращаться к нему можно из Laravel через Curl.
    Ответ написан
    Комментировать
  • Почему уехал DIV?

    @PiggyPig
    Родителю (в данном случае <div class="crowns">) задать следующее:
    display: flex; 
    align-items: center;

    + font-size должен иметь измеряемую величину (%, px, em, rem и т.д.).
    + не используйте height: 100%, если у родителя не задана фиксированная высота, т.к. это не имеет смысла.
    Ответ написан
    2 комментария
  • Как экранировать переменную?

    @artem78
    <?php
    
    $a = '<div class="test">Кнопка</div>';
    
    echo $a;
    echo "<br />";
    echo "<code>" . htmlspecialchars($a) . "</code>";
    Ответ написан
    1 комментарий