Задать вопрос
  • Как подключать include через ajax или get, post запросы?

    @kaasius
    Для начала вытрясти из головы все какашки и задавать вопросы нормально.
    Ответ написан
    6 комментариев
  • Как вы работаете с некачественным чужим кодом?

    @AlexP11223
    This question already has an answer here: Работа с плохим кодом. Методы борьбы. Best Practices

    marked as duplicate by НЛО Feb 30 2025 at 12:34
    This question has been asked before and already has an answer.
    Ответ написан
    3 комментария
  • Где хранится пароль VK.com в официальном приложении vkapp в IOS?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    клиенты не должны хранить пароли.
    Ответ написан
    Комментировать
  • Насколько безопасна Java?

    egor_nullptr
    @egor_nullptr
    Если кратко, то нет. Под безопасностью в данном случае подразумевается контроль над теми действиями, которые могут потенциально навредить системе, в которой запущена виртуальная машина.
    Ответ написан
    Комментировать
  • Как отправить USSD запрос (через 3g модем) с помощью программирование на C?

    @rowdyro
    Открыть документацию по модему.
    Открыть порт, на котором сидит модем.
    Написать туда АТ команду инициализации модема и отсылки USSD запроса.
    ???
    PROFIT

    Раз Вы задаете такие вопросы лучше Вам погуглить готовые решения.
    Ответ написан
    Комментировать
  • Как считать из файла символы до пробела C++?

    risik
    @risik
    Программист
    в файле точно целые числа?
    int a;
    ifs >> a;
    ...
    Ответ написан
    Комментировать
  • Интересная реализация слайдера?

    ozoned
    @ozoned
    Кладете слайдер в див-айпад, там и листается. Текст меняется отдельно, меняется по событию afterTransition, можно вытаскивать его даже из текущего слайда.
    Ответ написан
    1 комментарий
  • Интересная реализация слайдера?

    @artishok
    кратко
    Как хочет заказчик

    Вы взяли заказ, хотите чтобы хабр сделал а вы получили оплату?
    Ответ написан
    1 комментарий
  • Как создать консольный терминал на C++?

    tsarevfs
    @tsarevfs Куратор тега C++
    C++ developer
    @grigorkh
    не используйте reinterpret_cast без крайней необходимости.

    предлагаю создать интерфейс и реализовать для каждой команды:
    class command_t
    {
    public:
    	virtual void apply(std::vector< std::string > const &args) = 0;
    	virtual std::string get_help() = 0;
    };
    
    class add_command_t : command_t
    {
    public:
    	void apply(std::vector< std::string > const &args)
    	{
    		int ans = atoi(args[1].c_str()) + atoi(args[2].c_str());
    		std::cout << ans;
    	}
    
    	std::string get_help()
    	{
    		return "add arg1 arg2\n";
    	}
    };
    
    //аналогично mul_command и.т.д


    Затем запихнуть экземпляры вместо функций в map.
    typedef std::map< std::wstring, command_t * > command_map_t;
    typedef command_map_t::iterator command_iter;
    
    //////////////////////////////////////////
    
    command_map_t commands;
    commands['add'] = new add_command_t();
    //...
    
    while (true)
    {
    	std::string x;
    	std::getline(cin, x);
    	std::vector< std::string > words = split(x); //напиши split сам
    
    	command_iter iter = commands.find(words[0]); 
    	if (iter != commands.end()) //если такая команда есть
    	{
    		iter->apply(words);
    	}
    	else
    	{
    		std::cout << "Wrong command!\n";
    	}
    }


    Так ты сможешь реализовать команды не только с 2 int-овыми параметрами. В конструктор help_command можно передать указатель на commands и в зависимости от аргументов выдавать справку по всем командам, или по конкретной указанной.
    Не забудь почистить память в конце.
    Ответ написан
    Комментировать
  • PHP сессии и авторизация

    mannaro
    @mannaro
    Умею профессионально гуглить
    Да, это безопасно, так как

    Сессия это хеш который хранится в куках у пользователя, при обращение пользователя к скрипту, пхп сверяет хеш и берет из файла данные этой сессии.


    Но, советую проверять IP пользователя, дабы хоть немного защититься от подмены сессий.
    И да, session_regenerate_id(); совсем не нужно.

    session_start();
    $ip = $_SESSION['userIP'];
    
    if (!$ip) {
        $_SESSION['userIP'] = $_SERVER['REMOTE_ADDR'];
    } elseif ($ip != $_SERVER['REMOTE_ADDR']) {
        session_destroy();
        session_start();
    }
    Ответ написан
    Комментировать
  • PHP сессии и авторизация

    ScorpLeX
    @ScorpLeX
    Сессия это хеш который хранится в куках у пользователя, при обращение пользователя к скрипту, пхп сверяет хеш и берет из файла данные этой сессии.
    В общем ответ: безопасно.

    Только вот зачем вы делаете session_regenerate_id(); не понятно, оно не нужно.
    Ответ написан
    Комментировать
  • Как реализовать список в БД?

    @Masterme
    1000 записей - ни о чём. делайте на любой СУБД, всё будет работать нормально
    Ответ написан
    Комментировать
  • Почему после переименования проекта так снизилось качество и вопросов и ответов?

    popcorn2d
    @popcorn2d
    Гар-гар-гар
    Полностью согласен, порой просто взрывает от тупизны вопросов, один только вопрос :D Как они узнали о тостере? :D
    Ответ написан
    1 комментарий
  • В чём преимущество асинхронных серверов перед PHP/nginx?

    AMar4enko
    @AMar4enko

    Если коротко, то ошибка закралась вот тут:
    В асинхронном сервере в единый момент времени обрабатывается столько запросов, сколько есть воркеров

    Представьте себе, что у вас на сервер приходит запрос, связанный с выборкой данных из БД.
    Он отрабатывает, предположим, за 150 мс, из которых 130 это работа с базой данных.

    В случае с PHP у вас воркер будет заблокирован эти 150 мс для обработки других запросов.
    В случае с асинхронным сервером, он, пока запрос 1 ждет данные от БД в течение 130 мс, сможет принять и начать обрабатывать другие запросы. Предположим, что у нас один PHP-воркер. В этом случае таких запросов, как из примера, он сможет обработать семь штук за секунду.

    Асинхронному же, допустим, прилетят 20 запросов. Он обработает каждый до взаимодействия с БД, допустим за 10 мс, полетят 20 запросов к БД, пройдут, допустим, за 500 мс, и сервер сформирует ответ. И это все практически параллельно. Итого меньше чем за секунду мы таким образом обработаем 20 запросов.

    Можно, конечно, увеличить пул FastCGI, но оверхед при обработке запроса каждым воркером будет несоизмеримо выше, чем при обработке асинхронным сервером.

    Ответ написан
    4 комментария
  • Как в iptables блокировать все соединения SYN_RECV?

    DerBlogger
    @DerBlogger

    SYN_RECV - это состояние tcp-соединения во время three-handshake, означающее что сервер принял пакет с установленным флагом SYN (запрос на соединение), отправил SYN/SYN-ACK клиенту и ожидает от клиента пакет с флагом ACK.

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

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

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

    Если говорить обобщенно, то в Вашем случае, я думаю, проблему можно решить с помощью модуля recent в iptables. Уверен, его функционала Вам будет достаточно. Сможете обойтись несколькими правилами. Алгоритм следует применить примерно такой:

    1. Сначала разрешаете входящий tcp-трафик по соединениям в состояниях ESTABLISHED и RELATED (модуль conntrack).

    iptables -I INPUT 1 -p tcp -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

    2. Открываете нужные порты, разрешая пропуск пакетов по этим правилам только в случаях если:
    - установлен флаг SYN (опция --syn);
    - соединение находится в состоянии NEW (модуль conntrack);
    - не превышен лимит соединений с одного ip-адреса (модуль recent).
    Примерно так:
    iptables -A INPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -m recent --name webtraffic --update --seconds 5 --hitcount 16 -j DROP
    
    iptables -A INPUT -p tcp -m multiport --dports 80,443 --syn -m conntrack --ctstate NEW -j ACCEPT


    Первое правило будет применено только к пакетам с установленным флагом SYN, которые приходят с отдельно взятого IP-адреса со скоростью более 16 пакетов в течение 5 секунд. Этим правилом будет отброшен флуд.

    Второе правило пропустит пакеты, не подошедшие под предыдущее правило (легитимный трафик).

    Разумеется, все нужно адаптировать под Ваши условия и нагрузку. Подробности по модулям смотрите в man iptables-extensions. Настоятельно рекомендую ознакомиться с описанием модуля recent для лучшего понимания.

    3. Дропаете весь остальной tcp-трафик либо отдельным правилом, либо политикой по-умолчанию.

    Также, дабы легитимных пользователей не откидывало при попытке подключения, Вы можете увеличить очередь SYN-пакетов в sysctl, в соответствии с имеющимися системными ресурсами. За это отвечает параметр net.ipv4.tcp_max_syn_backlog, и уменьшить таймаут для соединений в состоянии SYN_RECV, за что отвечает параметр net.netfilter.nf_conntrack_tcp_timeout_syn_recv.
    Рекомендуемые параметры индивидуальны для каждой системы. У меня используются такие:
    net.ipv4.tcp_max_syn_backlog = 262144
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 20

    Ответ написан
    1 комментарий
  • Клуб анонимных Дедов морозов

    negasus
    @negasus
    Developer
    1. Акция уже совсем скоро начнется. Подписывайтесь на habraadm, чтобы не пропустить.
    2. Прошлогодние провинившиеся допущены будут. Но уже в следующей акции — не факт. Прочитаете в топике-анонсе, который скоро будет.
    3. С наступающим!
    Ответ написан
    2 комментария
  • Почему исчезли автор и его статья про возврат Windows при покупке компьютера?

    @alivanich
    По поводу топика — извините, я тогда хотел по горячим следам написать, но напугался суровости хабры, а сейчас уж и подавно. Слишком тоталитарная секта, так что опишу в комментарии.
    Да и уж время прошло, не помню детали, но помню общий алгоритм.
    0. Позвонил в техподдержку самсунга (до покупки), спросил, что мне сделать, чтобы вернуть деньги за винду. Мне сказали, что покупаете в любом магазине и несёте в сервис-центр, где вам удаляют винду.

    1. Купил ноут в плеерру (23.07.12), курьер мне его привёз, я его проверил не включая (то есть проверил просто факт наличия всего и серийные номера). Ноутбук не включаем, установку винды не запускаем.

    2. Сразу отвёз в авторизованный сервис центр. Ко мне ближайший был 3G (примерное название) недалёко от метро Новые Черёмушки в Москве. Там мне не были рады и вообще хмуро отнеслись. По всем признакам я понял, что они знают про эту процедуру, но я первый. Однако в формализм играть не стали и согласились сделать всё сразу, так что даже повторно ехать не пришлось. Выдали через часик заключение о правильном удалении винды. То есть ноут готов для любых манипуляций.

    3. Дальше я сам не спешил и только 6.08.13 написал в техподдержку самсунга (что спросил — не вспомню, а копию на почту не прислали, но по ответу вполне можно примерно догадаться). Мне миленько ответили (ссылка из письма до сих пор актуальна и полезна):
    «Добрый день.

    Готовы компенсировать Вам стоимость операционной системы.

    Ознакомьтесь пожалуйста, с информацией по ссылке (http://www.samsung.com/ru/support/compensation/CompensationforWindowsOS.html) заполните Заключение — указав все необходимые реквизиты и отправьте нам заказным письмом.

    В случае возникновении вопросов Вы можете связаться с Информационным центром для потребителей, контактное лицо – Курганова Наталья.

    Просим корреспонденцию в адрес компании направлять по адресу: 117105, МОСКВА, А/Я 4, ООО «СРСС» Кургановой Н.Ю.»

    4. Отправил по указанному адресу заказным письмом заявление с указанием реквизитов (обычные банковские реквизита от счёта, к которому привязана карточка. Банк был или авангард или ткс, не важно абсолютно.

    5. Через неделю (а может две) получил деньги на счёт. Всё!
    Ответ написан
    3 комментария