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

    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 Куратор тега Цифровые сертификаты
    Внимание! Изменился адрес почты!
    Слушайте больше тех, кто трет по ушам за то, что 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 комментарий