Отсутствует обязательный параметр context id. Что такое ATTEMPT_.HLP и как его исправить? Дополнительные средства от взлома

Отсутствует обязательный параметр context id. Что такое ATTEMPT_.HLP и как его исправить? Дополнительные средства от взлома

26.07.2023

Однажды заглянул я в лог /var/log/messages на сервере под управлением FreeBSD. Лог оказался практически полностью оказался забитым следующими записями: kernel: Connection attempt to UDP 127.0.0.1:10441 from 127.0.0.1:53 kernel: Connection attempt to UDP 127.0.0.1:10441 from 127.0.0.1:53 kernel: Connection attempt to UDP 127.0.0.1:10445 from 127.0.0.1:53 kernel: Connection attempt to UDP 127.0.0.1:10445 from 127.0.0.1:53 kernel: Connection attempt to UDP 192.0.32.10:6881 from 188.85.194.61:24333 kernel: Connection attempt to UDP 127.0.0.1:10468 from 127.0.0.1:53 kernel: Connection attempt to UDP 127.0.0.1:10468 from 127.0.0.1:53 kernel: Connection attempt to UDP 127.0.0.1:10469 from 127.0.0.1:53 kernel: Connection attempt to UDP 127.0.0.1:10469 from 127.0.0.1:53 kernel: Connection attempt to UDP 127.0.0.1:10470 from 127.0.0.1:53

Что бы это значило?

Яндекс навёл на топик "Непонятное поведение bind"
Там на мой вопрос уже ответили:
Connection attempt to UDP 127.0.0.1:10445 from 127.0.0.1:53 Это строка переводится как: С сокета 127.0.0.1:53 попробовали послать зарос по UPD на сокет 127.0.0.1:10445, но порт 10445 адреса 127.0.0.1 никто не прослушивает. Соединение не состоялось. Посмотрим кто у нас висит на на 53 порту? Порт привилегированный (<1024) значит там должно быть что-то распространённое. # grep -w 53 /etc/services domain 53/tcp #Domain Name Server domain 53/udp #Domain Name Server А, это же порт DNS сервера. Кто на нём висит на самом деле? # sockstat -l | grep -w 53 USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS bind named 19021 514 udp4 127.0.0.1:53 *:*

Это DNS сервер BIND.

Зачем же он хочет соединиться с несуществующим сокетом? В том же топике приведен правильный ответ: Некая программа посылает BIND запрос на разрешение доменного имени. BIND отвечает так долго, что запросившая програма перестаёт ждать ответ. bind наконец-то посылает ответ, но его уже никто не ждёт. Ядро регистрирует неудачное соединение.

Что за программа делает так много долгих dns запросов?

Почему она не дожидается ответа?

Программа нашлась быстро # sockstat | grep -w 53 nobody spamilter 9801 11 udp4 127.0.0.1:60037 127.0.0.1:53 nobody spamilter 9801 12 udp4 127.0.0.1:60038 127.0.0.1:53

С DNS на одной машине работает почтовый сервер Sendmail с аниспамовыми\антивирусными фильтрами. spamilter - как раз антиспам-фильтр.

Электронная почта (особенно с современными наворотами типа DKIM) тесно завязана на DNS.

Поэтому я не удивился, такой активности.

В логах sendmail быстро нашёлся пример долгого dns запроса - попытка разрещить адрес rcom-ne.com

# dig +trace rcom-ne.com ; <<>> DiG <<>> +trace rcom-ne.com ;; global options: printcmd . 172099 IN NS j.root-servers.net. . 172099 IN NS k.root-servers.net. . 172099 IN NS l.root-servers.net. . 172099 IN NS m.root-servers.net. . 172099 IN NS a.root-servers.net. . 172099 IN NS b.root-servers.net. . 172099 IN NS c.root-servers.net. . 172099 IN NS d.root-servers.net. . 172099 IN NS e.root-servers.net. . 172099 IN NS f.root-servers.net. . 172099 IN NS g.root-servers.net. . 172099 IN NS h.root-servers.net. . 172099 IN NS i.root-servers.net. ;; Received 244 bytes from 127.0.0.1#53(127.0.0.1) in 0 ms com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. ;; Received 501 bytes from 192.58.128.30#53(j.root-servers.net) in 52 ms rcom-ne.com. 172800 IN NS ns1.rcom-ne.com. rcom-ne.com. 172800 IN NS ns2.rcom-ne.com. ;; Received 97 bytes from 192.52.178.30#53(k.gtld-servers.net) in 55 ms ;; connection timed out; no servers could be reached Запрос отваливается по таймауту.

Чёртовы спаммеры, понапишут адресов, а ты их проверяй.

Итак. Ничего страшного не происходит. Но надо очистить лог от этих сообщений, а то они забивают действительно важную информацию.

Лечим симптомы

Радикальный способ - вообще отключить проколирование неудачных соединений. Через sysctl: # sysctl -d net.inet.tcp.log_in_vain net.inet.udp.log_in_vain net.inet.tcp.log_in_vain: Log all incoming TCP connections net.inet.udp.log_in_vain: Log all incoming UDP packets # sysctl net.inet.udp.log_in_vain=0 net.inet.udp.log_in_vain: 1 -> 0

Но тут с водой мы выплёскиваем ребёнка. Я хочу знать, кто ломится ко мне на закрытые порты.

Попробовать прикрутить к syslog"у фильтр - сложно, повышается вероятность отказа системы протоколирования, да и просто некрасиво. Может можно отключить протоколирование для loopback интерфейса, он особого интереса на представляет?

В гугле не нашёл такого, посмотрим в исходниках.

# fgrep -rIn "Connection attempt to UDP" /usr/src/ /usr/src/sys/netinet/udp_usrreq.c:406: "Connection attempt to UDP %s:%d from %s:%d\n", /usr/src/sys/netinet6/udp6_usrreq.c:341: "Connection attempt to UDP [%s]:%d from [%s]:%d\n", # less +718 /usr/src/sys/netinet/tcp_input.c switch (log_in_vain) { case 1: if ((thflags & TH_SYN) == 0) break; /* FALLTHROUGH */ case 2: log(LOG_INFO, "Connection attempt to TCP %s:%d " "from %s:%d flags:0x%02x\n", dbuf, ntohs(th->th_dport), sbuf, ntohs(th->th_sport), thflags); break; default: break; }

Похоже, рубильник только один и на все интерфейсы сразу - log_in_vain.

Симптомы устранить не получается, давайте лечит болезнь.

Изучаем resolver

Сообщение возникает, когда программа не дожидается ответа от DNS. Надо чтобы либо DNS отвечал быстрее, либо программа ждала дольше.

Как заставить программу ждать дольше?

Для запросов к dns используются функции libc - res_query, res_search, res_mkquery, res_send...

Другие функции типа gethostbyname являются более высокоуровненвыми и в конечном счёте используют именно эти "примитивы".

Поведение функций res_query определяется файлом /etc/resolv.conf (имя и путь этого файла жёстко прописаны в исходниках).

У нас есть два параметра timeout и attempts.

timeout - время ожидания ответа от dns сервера.

attempts - количество повторных запросов к dns серверу, если на первый запрос не ответили.

Сразу после окончания ожидания первого запроса посылается второй запрос и т.д.

Пример resolv.conf

Nameserver 8.8.8.8 nameserver 8.8.4.4 options timeout:7 attempts:1 Значения по умолчанию, и предельные значения можно посмотреть в /usr/include/resolv.h /* * Global defines and variables for resolver stub. */ ...... #define RES_TIMEOUT 5 /* min. seconds between retries */ #define RES_MAXRETRANS 30 /* only for resolv.conf/RES_OPTIONS */ #define RES_MAXRETRY 5 /* only for resolv.conf/RES_OPTIONS */ #define RES_DFLRETRY 2 /* Default #/tries. */ #define RES_MAXTIME 65535 /* Infinity, in milliseconds. */ .....

По умолчанию у нас 5 секунд ожидания и 2 повторных попытки. Это для каждого сервера, к которому мы пытаемся обратиться.

Для примера выше, максимальное время ожидания ответа (если отвалятся оба dns-сервера) 2 (сервера) x 7 (таймаут) x (1+1 (попыток)) = 28 секунд.

У меня конфиг был попроще

# cat /etc/resolv.conf domain myserver nameserver 127.0.0.1 Получалось 1x3x5 = 15. Проверим.

Самая простая утилита - host использует свои встроенные настройки, поэтому возьмём продвинутую dig.

# time dig rcom-ne.com ; <<>> DiG <<>> rcom-ne.com ;; global options: printcmd ;; connection timed out; no servers could be reached real 0m15.009s user 0m0.000s sys 0m0.006s Проверим нашу гипотезу о причине возникновения сообщения в логе.

В одной консоли запустим

# (date;time dig rcom-ne.com;date) & пятница, 11 февраля 2011 г. 16:46:49 (MSK) ; <<>> DiG <<>> rcom-ne.com ;; global options: printcmd ;; connection timed out; no servers could be reached real 0m15.009s user 0m0.000s sys 0m0.006s пятница, 11 февраля 2011 г. 16:47:04 (MSK) А в другой, пареллельно посмотрим, какой порт использует dig # sockstat | grep dig root dig 71322 20 udp4 *:52170 *:* # grep 52170 /var/log/messages Mar 4 16:47:20 myserver kernel: Connection attempt to UDP 127.0.0.1:52170 from 127.0.0.1:53

15 секунд dig ждёт ответа, а ответ приходит через (16:47:20 - 16:46:49 = 31 ~ 30) 30 секунд.

Теперь увеличим время ожидания ответа до 30 секунд или даже больше.

Time для dig - это timeout из resolv.conf

# date; time dig +time=12 rcom-ne.com;date пятница, 4 марта 2011 г. 17:07:46 (MSK) ; <<>> DiG <<>> +time=12 rcom-ne.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 61974 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;rcom-ne.com. IN A ;; Query time: 5998 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Fri Feb 11 17:08:16 2011 ;; MSG SIZE rcvd: 29 real 0m30.006s user 0m0.005s sys 0m0.000s пятница, 11 февраля 2011 г. 17:08:16 (MSK)

dig получил ответ за 30 секунд , хотя ждать мог целых 1x3x12=36.

Видимо, 30 секунд это таймаут самого BIND. Запомним это.

status: SERVFAIL означает, что dns сервер не смог обработать запрос из-за проблем с dns-сервером (RFC 1035 , RFC 2929).

"Ну не шмогла, я не шмогла" - говорит нам сервер, хотя мы-то знаем, что он просто не дождался ответа от dns серверов домена rcom-ne.com.

Персональный подход

Параметры в resolv.conf действуют на все программы.

Увеличивать максимальное время запроса с 15 до 30 секунд (в 2 раза) для всех программ на сервере не хочется.

Может можно подправить таймауты резольвера для отдельных программ?

смотрите confTO_RESOLVER_RETRANS и confTO_RESOLVER_RETRY.

Но нам нужно настроить в первую очередь spamilter. А у него таких настроек нету. Правка resolv.conf на него тоже как будто не действовала.

Я пробовал править исходники - но результата добиться не смог.

Примечание: Уже после решения проблемы, экспериментируя с resolv.conf и tcpdump я выяснил, что resolv.conf конечно влиял на spamilter. Только он периодически посылал 2 запроса одновременно, вместо того, чтобы послать их через timeout секунд. Видимо это глюк многопоточной архитектуры spamilter, хотя сам resolver в man описан как thread-safe.

Заветные 30 секунд

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

Расстроенный я поискал в исходниках заветную цифру 30 и мне повезло.

История изменений сообщила мне: /usr/src/contrib/bind9/CHANGES ..................... --- 9.2.3rc1 released --- ..................... 1122. Resolution timeout reduced from 90 to 30 seconds. ..................... --- 9.2.2 released --- .....................

По описанию похоже на то, что я искал.

Я скачал обе упомянутые версии BIND, сделал diff и долго в него всматривался пока не нашёл.

-/* $Id: resolver.c,v 1.218.2.12.4.4 2003/02/18 03:32:01 marka Exp $ */ +/* $Id: resolver.c,v 1.218.2.18 2003/07/18 04:35:51 marka Exp $ */ @@ -2234,7 +2229,7 @@ /* * Compute an expiration time for the entire fetch. */ - isc_interval_set(&interval, 90, 0); /* XXXRTH constant */ + isc_interval_set(&interval, 30, 0); /* XXXRTH constant */ iresult = isc_time_nowplusinterval(&fctx->expires, &interval); if (iresult != ISC_R_SUCCESS) { UNEXPECTED_ERROR(__FILE__, __LINE__,

Я попробовал уменьшить параметр функции isc_interval_set до и ура - ответы от BIND стали приходить максимум через 20 секунд.

# ee /usr/src/contrib/bind9/lib/dns/resolver.c # cd /usr/src/lib/bind # make obj && make depend && make && make install # cd /usr/src/usr.sbin/named # make obj && make depend && make && make install # /etc/rc.d/named restart

Но на продакшене я не стал ничего править, кто знает какие проблемы это может вызвать. Не зря же разработчики так жестко уставили этот параметр.

Всё сначала

Итак, потратив кучу времени я так и не смог решить проблему.

Наконец, я решил посмотреть какими конкретно запросам spamilter бомбардирует DNS, какие именно адреса долго разрешает BIND?

Tcpdump -i lo0 -s 0 -w dns.pcap "udp port 53"

Откроем dns.pcap в Wireshark и посмотрим неудачные запросы.

Оказалось, что в своих предположениях я был очень далёк от истины.

90% безответных запросов были к доменам list.dsbl.org multihop.dsbl.org unconfirmed.dsbl.org

Standard query A 146.152.225.99.list.dsbl.org

Через DNS запросы spamilter пробивал адресы почтовых серверов по базам спаммеров. Это технология DNSBL.

Я пошёл на dsbl.org и обнаружил, что он давным-давно уже не работает.

Поискав по конфигам я нашёл эти адреса в файле /var/db/spamilter/db.rdnsbl и закоментировал их.

#relays.ordb.org |http://www.ordb.org |Reject |Rcpt #list.dsbl.org |http://www.dsbl.org |Reject |Rcpt #multihop.dsbl.org |http://www.dsbl.org |Reject |Rcpt #unconfirmed.dsbl.org |http://www.dsbl.org |Reject |Rcpt

Лавина неудачных запросов исчезла. Проблема решилась.

Учиться на ошибках

С одной стороны, я сильно лопухнулся, когда вместо того, чтобы тщательно провести расследование проблемы, посмотреть различные логи, поанализировать траффик, я сразу сделал предположения и на их основе стал искать решения. В результате потратил кучу времени и проделал кучу не нужных исследований. C другой стороны, я узнал много интересного про работу resolver"а. А DNS это первое место, которое надо поверять, когда возникают различные задержки в работе программ. Так что, польза всё равно есть.

После исчезновение лавины несовершённых подключений DNS, лог остался забит подключениями на порт 6881.

Kernel: Connection attempt to UDP 192.0.32.10:6881 from 188.85.194.61:24333

Всемирая база знаний подсказала, что UDP 6881 - это, скорее всего, торрент клиенты пытающие установить DHT соединение. Весьма вероятная версия, на сервере долгое время работал torrent, клиент и хотя он давно уже удалён, память о нём может неумирать в серцах других боевых товарищей.

Нужно захватить прибывающие на 6881 порт пакеты. В качестве firewall/NAT у меня используется Packet Filter pf(4). Сразу после правила блокировки по умолчанию добавим правило блокировки и логирования входящих upd соединений на 6881 порт. Параметр quick заставляет прекратить обработку других правил, если пакет подошёл под текущее.

# ee /etc/pf.conf block in log quick on em0 proto udp from any to 192.0.32.10 port 6881 # pfctl -oonvf /etc/pf.conf # pfctl -oovf /etc/pf.conf

В течении нескольких минут запишем результаты в файл для Wireshark.

# tcpdump -i pflog0 -s 0 -w 6881.pcap

Откроем файл в Wireshark и посмотрим. К сожалению, DHT ещё не поддерживается программой. Поэтому всё что можно сделать - посмотреть пакет на предмет сигнатуры.

d1:ad2:id20 :+_,i<\^2e1:q4:ping1:t4:H1:v4:UTb1:y1:qe

Поиск по по первым байтам пакета наводит на обсуждение DHT-расширения для Bittorrent. Значит это действительно отголоски долгой работы торрент клиента на сервере.

Всё нормально. Нужно просто очистить лог от подобных записей.

Для этого скажем pf молча отбрасывать пакеты приходящие на 6881 порт, добавив параметр drop и убрав log.


Иногда ошибки ATTEMPT_.HLP и другие системные ошибки HLP могут быть связаны с проблемами в реестре Windows. Несколько программ может использовать файл ATTEMPT_.HLP, но когда эти программы удалены или изменены, иногда остаются "осиротевшие" (ошибочные) записи реестра HLP.

В принципе, это означает, что в то время как фактическая путь к файлу мог быть изменен, его неправильное бывшее расположение до сих пор записано в реестре Windows. Когда Windows пытается найти файл по этой некорректной ссылке (на расположение файлов на вашем компьютере), может возникнуть ошибка ATTEMPT_.HLP. Кроме того, заражение вредоносным ПО могло повредить записи реестра, связанные с FreeBSD 2.2.1. Таким образом, эти поврежденные записи реестра HLP необходимо исправить, чтобы устранить проблему в корне.

Редактирование реестра Windows вручную с целью удаления содержащих ошибки ключей ATTEMPT_.HLP не рекомендуется, если вы не являетесь специалистом по обслуживанию ПК. Ошибки, допущенные при редактировании реестра, могут привести к неработоспособности вашего ПК и нанести непоправимый ущерб вашей операционной системе. На самом деле, даже одна запятая, поставленная не в том месте, может воспрепятствовать загрузке компьютера!

В связи с подобным риском мы настоятельно рекомендуем использовать надежные инструменты очистки реестра, такие как WinThruster (разработанный Microsoft Gold Certified Partner), чтобы просканировать и исправить любые проблемы, связанные с ATTEMPT_.HLP. Используя очистку реестра , вы сможете автоматизировать процесс поиска поврежденных записей реестра, ссылок на отсутствующие файлы (например, вызывающих ошибку ATTEMPT_.HLP) и нерабочих ссылок внутри реестра. Перед каждым сканированием автоматически создается резервная копия, позволяющая отменить любые изменения одним кликом и защищающая вас от возможного повреждения компьютера. Самое приятное, что устранение ошибок реестра может резко повысить скорость и производительность системы.


Предупреждение: Если вы не являетесь опытным пользователем ПК, мы НЕ рекомендуем редактирование реестра Windows вручную. Некорректное использование Редактора реестра может привести к серьезным проблемам и потребовать переустановки Windows. Мы не гарантируем, что неполадки, являющиеся результатом неправильного использования Редактора реестра, могут быть устранены. Вы пользуетесь Редактором реестра на свой страх и риск.

Перед тем, как вручную восстанавливать реестр Windows, необходимо создать резервную копию, экспортировав часть реестра, связанную с ATTEMPT_.HLP (например, FreeBSD 2.2.1):

  1. Нажмите на кнопку Начать .
  2. Введите "command " в строке поиска... ПОКА НЕ НАЖИМАЙТЕ ENTER !
  3. Удерживая клавиши CTRL-Shift на клавиатуре, нажмите ENTER .
  4. Будет выведено диалоговое окно для доступа.
  5. Нажмите Да .
  6. Черный ящик открывается мигающим курсором.
  7. Введите "regedit " и нажмите ENTER .
  8. В Редакторе реестра выберите ключ, связанный с ATTEMPT_.HLP (например, FreeBSD 2.2.1), для которого требуется создать резервную копию.
  9. В меню Файл выберите Экспорт .
  10. В списке Сохранить в выберите папку, в которую вы хотите сохранить резервную копию ключа FreeBSD 2.2.1.
  11. В поле Имя файла введите название файла резервной копии, например "FreeBSD 2.2.1 резервная копия".
  12. Убедитесь, что в поле Диапазон экспорта выбрано значение Выбранная ветвь .
  13. Нажмите Сохранить .
  14. Файл будет сохранен с расширением.reg .
  15. Теперь у вас есть резервная копия записи реестра, связанной с ATTEMPT_.HLP.

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

Я получаю эту ошибку. Обязательный параметр "тег" отсутствует в тостере android, пожалуйста, помогите, я не могу найти свою ошибку ниже. У меня есть код пользователя Android и код сервера php выше. Я использую библиотеку volley для httprequests.

StringRequest strReq = new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener() { @Override public void onResponse(String response) { Log.d(TAG, "Register Response: " + response.toString()); hideDialog(); try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); if (!error) { // User successfully stored in MySQL // Now store the user in sqlite String uid = jObj.getString("uid"); JSONObject user = jObj.getJSONObject("user"); String name = user.getString("name"); String email = user.getString("email"); String created_at = user .getString("created_at"); // Inserting row in users table db.addUser(name, email, uid, created_at); // Launch login activity Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); startActivity(intent); finish(); } else { // Error occurred in registration. Get the error // message String errorMsg = jObj.getString("error_msg"); Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Registration Error: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); hideDialog(); } }) { @Override protected Map getParams() { // Posting params to register url Map params = new HashMap(); params.put("tag", "register"); params.put("name", name); params.put("email", email); params.put("password", password); return params; } @Override public Map getHeaders() throws AuthFailureError { HashMap headers = new HashMap(); headers.put("Content-Type", "application/json; charset=utf-8"); return headers; } }; // Adding request to request queue AppController.getInstance().addToRequestQueue(strReq, tag_string_req);

AppcontrollerClass здесь

Public class AppController extends Application { public static final String TAG = AppController.class.getSimpleName(); private RequestQueue mRequestQueue; private static AppController mInstance; @Override public void onCreate() { super.onCreate(); mInstance = this; } public static synchronized AppController getInstance() { return mInstance; } public RequestQueue getRequestQueue() { if (mRequestQueue == null) { mRequestQueue = Volley.newRequestQueue(getApplicationContext()); } return mRequestQueue; } public req, String tag) { req.setTag(TextUtils.isEmpty(tag) ? TAG: tag); getRequestQueue().add(req); } public void addToRequestQueue(Request req) { req.setTag(TAG); getRequestQueue().add(req); } public void cancelPendingRequests(Object tag) { if (mRequestQueue != null) { mRequestQueue.cancelAll(tag); } } }

это журнал андроидов

08-07 14:35:36.552 19120-20088/com.example.panos.chatsmartapp D/Volley﹕ BasicNetwork.logSlowRequests: HTTP response for request=< http://192.168.1.3/android_login_api/ 0x355f917 NORMAL 1> , , , 08-07 14:35:36.662 19120-19120/com.example.panos.chatsmartapp D/RegisterActivity﹕ Register Response: {"error":true,"error_msg":"Required parameter "tag" is missing!"} 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Toast﹕ checkMirrorLinkEnabled returns: false 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Toast﹕ showing allowed 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Volley﹕ Request.finish: 4253 ms: http://192.168.1.3/android_login_api/ 0x355f917 NORMAL 1 08-07 14:35:36.712 19120-19120/com.example.panos.chatsmartapp E/ViewRootImpl﹕ sendUserActionEvent() mView == null

это php-код

$tag, "error" => FALSE); // check for tag type if ($tag == "login") { // Request type is check Login $email = $_POST["email"]; $password = $_POST["password"]; // check for user $user = $db->getUserByEmailAndPassword($email, $password); if ($user != false) { // user found $response["error"] = FALSE; $response["uid"] = $user["unique_id"]; $response["user"]["name"] = $user["name"]; $response["user"]["email"] = $user["email"]; $response["user"]["created_at"] = $user["created_at"]; $response["user"]["updated_at"] = $user["updated_at"]; echo json_encode($response); } else { // user not found // echo json with error = 1 $response["error"] = TRUE; $response["error_msg"] = "Incorrect email or password!"; echo json_encode($response); } } else if ($tag == "register") { // Request type is Register new user $name = $_POST["name"]; $email = $_POST["email"]; $password = $_POST["password"]; // check if user is already existed if ($db->isUserExisted($email)) { // user is already existed - error response $response["error"] = TRUE; $response["error_msg"] = "User already existed"; echo json_encode($response); } else { // store user $user = $db->storeUser($name, $email, $password); if ($user) { // user stored successfully $response["error"] = FALSE; $response["uid"] = $user["unique_id"]; $response["user"]["name"] = $user["name"]; $response["user"]["email"] = $user["email"]; $response["user"]["created_at"] = $user["created_at"]; $response["user"]["updated_at"] = $user["updated_at"]; echo json_encode($response); } else { // user failed to store $response["error"] = TRUE; $response["error_msg"] = "Error occured in Registartion"; echo json_encode($response); } } } else { // user failed to store $response["error"] = TRUE; $response["error_msg"] = "Unknow "tag" value. It should be either "login" or "register""; echo json_encode($response); } } else { $response["error"] = TRUE; $response["error_msg"] = "Required parameter "tag" is missing!"; echo json_encode($response); } ?>

Myabe У меня проблема с utf8 string, используя json_encode/json_decode. Я не знаю...

Этот небольшой пост о плагине Limit Login Attempts, позволяющем защитить админпанели блогов на вордпресс. Плагине, позволяющем ограничить количество попыток взломщиков блогов — хакерам, пытающимся войти в админпанель и овладеть блогом. Способов и плагинов, для защиты от взлома довольно много и среди них есть очень серьезные. Но молодому блогу, с низкой посещаемостью и авторитететом как правило, ничто не угрожает. До поры — до времени. А вот установить Limit Login Attempts можно даже еще не для очень «крутого» блога, каким я отношу, на данный момент, и свой скромный вебресурс.

Вы удивитесь, но после того, как я установил себе этот плагин, я с удивлением обнаружил, что в мой блог пытался проникнуть взломщик под именем admin, который после неудачных попыток, был с помощью плагина был заблокирован на 24 часа. А прошло всего несколько часов после его установки!

Ниже — скрин части письма, которое я получил вчера на свою электронную почту:

Невольно вспомнилось то, как я обнаружил и устранял «дыру» в теме блога . А если бы я все оставил видимым или выбрал логин admin и взломщик подобрал бы пароль?

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

Кратко про установку и настройки плагина Limit Login Attempts

Все абсолютно просто: плагин достаточно найти поиском в админпанели по соответствующему названию, установить и активировать.

Затем из Параметров, выбрав плагин, перейти в настройки. В принципе, менять здесь ничего не нужно, но я рекомендую установить «галочку», позволяющую одной из функций Limit Login Attempts отправлять на ваш e-meil сообщения о попытках проникновения хакеров. Эта функция функция плагина позволит получать оперативную сводку о попытках взлома.

Принцип работы плагина Limit Login Attempts

основан на ограничении доступа входа в админпанель сайта при вводе логина и пароля. Иначе говоря, он создает лимит количества попыток авторизации, включая поддержку куки, по IP адресу пользователя интернетом. Совершать администратору сайта каждый раз выход из панели, да еще постоянно чистить куке-файлы — крайне неблагодарная функция. В данном случае, плагин Limit Login Attempts — просто незаменим.

Плагин, кроме всего прочего, предоставляет IP-адрес взломщика и по нему возможно вычислить и наказать хакера всеми доступными средствами.

Дополнительные средства от взлома

Эта статья — как я указывал выше, уже не единственная о безопасности сайтов на Вордпресс. В своем, более раннем, но более подробном мануале о безопасности сайтов -« «, — я так же затронул тему плагинов, предназначенных для подобной функции. В частности, об еще двух плагинах, которые могут работать в связке. Это плагины Login LockDown + Anti-XSS attack (наверное аналогично будет работать и связка Limit Login Attempts + Anti-XSS attack), о работе которых рассказывает Алексей Козымаев в своем видео уроке. Ролик я решил разместить и на этой странице.

Как дополнительное средство от посягательств на сайт, попутно рекомендую плагин, о котором я ни разу не упоминал в своих сообщениях. Называется он Block Bad Queries (BBQ); этот плагин автоматически защищает сайт от вредоносных запросов URL. Установка — через поиск в админпанели, настроек не требует.

(Visited 43 times, 1 visits today)

WP плагин Limit login Attempts – это один из самых необходимых плагинов,так как защищает сайт от такого хакерского приёма, как brute-force атака.

Суть этого приёма в том, что злоумышленник пытается проникнуть в админку, путём подбора пары логин-пароль.

Все уже, наверное, сталкивались с предупреждением: «У Вас осталось три попытки», возникающем при входах с введением пароля. Вот именно эту работу и делает данный плагин.

После его установки и активации, в консоли, в разделе параметры, появиться строка с названием этого модуля.

Пройдя по по ней мы окажемся на странице настроек.

Настройки тут простые, да и на русском языке. На картинке показаны настройки по умолчанию. Давайте посмотрим, что тут можно изменить.

В первом поле выставляется количество дополнительных попыток. Я у себя оставил 3.

Во втором — ставится продолжительность первой изоляции. Думаю 20-30 минут нормально.

В следующем поле выставляется число изоляций, после которого время изоляции будет увеличено до 24 часов, или более, на Ваше усмотрение.

Я оставил 1, потому, что кто же кроме злоумышленника будет ошибаться трижды, а потом, через полчаса — ещё трижды. Нужно быть конченым склеротиком, чтоб без умысла такое проделать.

Подключение к сайту оставим «Прямое подключение».

Обрабатывать куки логина. «Да» в этой строке, выбирается в том случае, если Вы всю работу по сайту выполняете в одном браузере. Я же, к примеру, использую четыре браузера, и по этому выбрал «Нет».

Сообщать об изоляции — лучше поставить обе галочки, хотя mail пока вроде ни к чему, но и не повредит. В дальнейшем, если Вы продолжите интересоваться программированием, эти адреса можно будет подвергнуть анализу.

На этом настройки плагина Limit login Attempts закончены. Теперь, если через день или два вернуться на эту же страницу, можно увидеть следующую картинку в разделе статистика.

Это будет означать, что кто-то усиленно пытался проникнуть в Вашу админку при помощи специального скрипта, но это у него не получилось. Можно «Очистить лог».

Плагины для обеспечения безопасности в этом .


Перемена

© 2024 soundpad-voice.ru - Компьютер. Ноутбуки. ОС. Программы