Cos'è ATTEMPT_.HLP e come risolverlo? Manca il parametro "tag" richiesto. PHP Ulteriori strumenti anti-hacking

Ricevo questo errore. Il parametro richiesto "tag" manca nel tostapane Android, per favore aiutatemi, non riesco a trovare il mio errore qui sotto. Ho il codice utente Android e il codice del server php sopra. Sto utilizzando la libreria volley per httprequests.

StringRequest strReq = new StringRequest(Request.Method.POST, AppConfig.URL_REGISTER, new Response.Listener () ( @Override public void onResponse(String risposta) ( Log.d(TAG, "Registra risposta: " + risposta.toString()); hideDialog(); prova ( JSONObject jObj = nuovo JSONObject(risposta); errore booleano = jObj.getBoolean("error"); if (!error) ( // Utente memorizzato correttamente in MySQL // Ora memorizza l'utente in sqlite String uid = jObj.getString("uid"); JSONObject user = jObj.getJSONObject(" user"); String name = user.getString("name"); String email = user.getString("email"); String create_at = user .getString("created_at"); // Inserimento riga nella tabella utenti db.addUser (nome, email, uid, create_at); // Avvia l'attività di accesso Intent = new Intent(RegisterActivity.this, LoginActivity.class else ( // Si è verificato un errore nella registrazione. Ottieni l'errore // message String errorMsg); = jObj.getString("error_msg"); Toast.makeText(getApplicationContext(), errorMsg, Toast.LENGTH_LONG).show() ) catch (JSONException e) ( e.printStackTrace(); ) ) ), nuova risposta. ErrorListener() ( @Override public void onErrorResponse(errore VolleyError) ( Log.e(TAG, "Errore di registrazione: " + error.getMessage()); Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show(); nascondiDialogo(); ) )) ( @Sostituisci mappa protetta getParams() ( // Pubblicazione di parametri per registrare la mappa dell'URL parametri = nuova HashMap (); params.put("tag", "registro"); params.put("nome", nome); params.put("e-mail", e-mail); params.put("password", password); parametri di ritorno; ) @Sostituisci mappa pubblica getHeaders() genera AuthFailureError ( HashMap intestazioni = nuova HashMap (); headers.put("Tipo contenuto", "application/json; charset=utf-8"); intestazioni di reso; ) ); // Aggiunta di una richiesta alla coda delle richieste AppController.getInstance().addToRequestQueue(strReq, tag_string_req);

AppcontrollerClass qui

La classe pubblica AppController estende l'applicazione ( 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 sincronizzato 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(Richiesta req) ( req.setTag(TAG); getRequestQueue().add(req); ) public void cancelPendingRequests(tag oggetto) ( if (mRequestQueue != null) ( mRequestQueue.cancelAll(tag); ) ) )

questa è una rivista Android

08-07 14:35:36.552 19120-20088/com.example.panos.chatsmartapp D/Volley﹕ BasicNetwork.logSlowRequests: risposta HTTP per richiesta=< 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﹕ Risposta del registro: ("error":true,"error_msg":"Parametro richiesto "tag" mancante!" ) 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Toast﹕ checkMirrorLinkEnabled restituisce: false 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Toast ﹕ visualizzazione consentita 08-07 14:35:36.702 19120-19120/com.example.panos.chatsmartapp D/Volley﹕ Richiesta.finish: 4253 ms: http://192.168.1.3/android_login_api/ 0x355f917 NORMALE 1 08-07 14 :35:36.712 19120-19120/com.example.panos.chatsmartapp E/ViewRootImpl﹕ sendUserActionEvent() mView == null

questo è il codice php

$tag, "errore" => FALSE); // controlla il tipo di tag if ($tag == "login") ( // Il tipo di richiesta è check Login $email = $_POST["email"]; $password = $_POST["password"]; // controlla utente $utente = $db->getUserByEmailAndPassword($email, $password); if ($utente!= false) ( // utente trovato $response["errore"] = FALSE; $response["uid"] = $utente ["id_univoco"]; $risposta["utente"]["nome"] = $utente["nome"]; $risposta["utente"]["email"] = $utente["email"]; utente"]["created_at"] = $utente["created_at"]; $response["utente"]["updated_at"] = $utente["updated_at"]; echo json_encode($response) else (); // utente non trovato // echo json con errore = 1 $response["error"] = TRUE; $response["error_msg"] = "Email o password errati!"; echo json_encode($response) ) else if; == "registrati") ( // Il tipo di richiesta è Registra nuovo utente $nome = $_POST["nome"]; $email = $_POST["email"]; $password = $_POST["password"] ; // controlla se l'utente esiste già if ($db->isUserExisted($email)) ( // l'utente esiste già - risposta all'errore $response["error"] = TRUE; $response["error_msg"] = "L'utente esisteva già"; echo json_encode($risposta); ) else ( // memorizza l'utente $utente = $db->storeUser($nome, $email, $password); if ($utente) ( // utente memorizzato correttamente $response["errore"] = FALSE; $response[ "uid"] = $utente["id_univoco"]; $risposta["utente"]["nome"] = $utente["nome"]; "e-mail"]; $risposta["utente"]["created_at"] = $utente["created_at"]; $risposta["utente"]["updated_at"] = $utente["updated_at"]; ; ) else ( // l'utente non è riuscito a memorizzare $response["error"] = TRUE; $response["error_msg"] = "Si è verificato un errore nella registrazione"; echo json_encode($response); ) ) ) else ( // utente impossibile memorizzare $response["error"] = TRUE; $response["error_msg"] = "Valore "tag" sconosciuto. Dovrebbe essere "login" o "register""; else ( $response["error"] = TRUE; $response["error_msg"] = "Il parametro richiesto "tag" manca!"; echo json_encode($response); ) ?>

Myabe ho un problema con la stringa utf8 utilizzando json_encode/json_decode. Non lo so...


Un giorno ho guardato il registro /var/log/messaggi su un server che esegue FreeBSD. Il registro si è rivelato quasi completamente intasato con le seguenti voci: kernel: Tentativo di connessione a UDP 127.0.0.1:10441 dal kernel 127.0.0.1:53: Tentativo di connessione a UDP 127.0.0.1:10441 dal kernel 127.0.0.1:53: Tentativo di connessione a UDP 127.0 10445 dal kernel 127.0.1:53: Tentativo di connessione a UDP 127.0.1:10445 DA Kernel 127.0.1:53: Tentativo di connessione a UDP 192.0.32.10:6881 dal kernel: Tentativo di connessione a UDP 127.0.0.1 :10468 dal kernel 127.0.0.1:53: Tentativo di connessione a UDP 127.0.0.1:10468 dal kernel 127.0.0.1:53: Tentativo di connessione a UDP 127.0.0.1:10469 dal kernel 127.0.0.1:53: Tentativo di connessione a UDP 127.0. 0.1:10469 dal kernel 127.0.0.1:53: tentativo di connessione a UDP 127.0.0.1:10470 da 127.0.0.1:53

Cosa significherebbe?

Yandex ha sottolineato l'argomento "Comportamento incomprensibile del legame"
La mia domanda ha già avuto risposta lì:
Tentativo di connessione a UDP 127.0.0.1:10445 da 127.0.0.1:53 Questa riga si traduce come: Dal socket 127.0.0.1:53 hanno provato a inviare una richiesta tramite UPD al socket 127.0.0.1:10445, ma nessuno è in ascolto sulla porta 10445 dell'indirizzo 127.0.0.1 . La connessione non è riuscita. Vediamo chi è appeso alla porta 53? Porto privilegiato (<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 *:*

Questo è il server DNS BIND.

Perchè vuole connettersi ad una presa inesistente? La risposta corretta è data nello stesso argomento: un determinato programma invia a BIND una richiesta per risolvere un nome di dominio. BIND impiega così tanto tempo a rispondere che il programma richiedente smette di attendere una risposta. bind finalmente invia una risposta, ma nessuno la sta aspettando. Il kernel registra una connessione non riuscita.

Che tipo di programma effettua così tante richieste DNS lunghe?

Perché non aspetta una risposta?

Il programma è stato trovato velocemente #sockstat | grep -w 53 nessuno spamilter 9801 11 udp4 127.0.0.1:60037 127.0.0.1:53 nessuno spamilter 9801 12 udp4 127.0.0.1:60038 127.0.0.1:53

Il server di posta Sendmail con filtri antispam/antivirus è in esecuzione su una macchina con DNS. spamilter è solo un filtro antispam.

La posta elettronica (specialmente con i moderni fronzoli come DKIM) è strettamente legata al DNS.

Pertanto, non sono rimasto sorpreso da tale attività.

Nei log di sendmail è stato trovato rapidamente un esempio di una lunga richiesta DNS: un tentativo di risolvere un indirizzo rcom-ne.com

# scava +traccia rcom-ne.com ;<<>>DiG<<>> +trace rcom-ne.com ;; opzioni globali: 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. ;; Ricevuti 244 byte da 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. ;; Ricevuti 501 byte da 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. ;; Ricevuti 97 byte da 192.52.178.30#53(k.gtld-servers.net) in 55 ms ;; connessione Scaduta; non è stato possibile raggiungere alcun server La richiesta fallisce a causa di un timeout.

Maledetti spammer, loro scriveranno gli indirizzi e tu li controllerai.

COSÌ. Non succede niente di brutto. Ma è necessario cancellare il registro da questi messaggi, altrimenti intasano informazioni davvero importanti.

Trattare i sintomi

Un modo radicale è quello di disabilitare del tutto l'interruzione delle connessioni non riuscite. Attraverso sysctl:# sysctl -d net.inet.tcp.log_in_vain net.inet.udp.log_in_vain net.inet.tcp.log_in_vain: registra tutte le connessioni TCP in entrata net.inet.udp.log_in_vain: registra tutti i pacchetti UDP in entrata # sysctl net.inet. udp.log_in_vain=0 net.inet.udp.log_in_vain: 1 -> 0

Ma qui stiamo buttando via il bambino con l'acqua sporca. Voglio sapere chi sta entrando nei miei porti chiusi.

Cercare di allegare un filtro a syslog è difficile, aumenta la probabilità di fallimento del sistema di registrazione ed è semplicemente brutto. Forse puoi disabilitare la registrazione per l'interfaccia di loopback, è di particolare interesse?

Non l’ho trovato su Google, diamo un’occhiata alle fonti.

# fgrep -rIn "Tentativo di connessione a UDP" /usr/src/ /usr/src/sys/netinet/udp_usrreq.c:406: "Tentativo di connessione a UDP %s:%d da %s:%d\n", /usr/src/sys/netinet6/udp6_usrreq.c:341: "Tentativo di connessione a UDP [%s]:%d da [%s]:%d\n", # less +718 /usr/src/sys/ netinet/tcp_input.c interruttore (log_in_vain) ( caso 1: if ((thflags & TH_SYN) == 0) break; /* FALLTHROUGH */ caso 2: log(LOG_INFO, "Tentativo di connessione a TCP %s:%d " "da %s:%d flags:0x%02x\n", dbuf, ntohs(th->th_dport), sbuf , ntohs(th->th_sport), thflags); rottura;

predefinito: interruzione; ) Sembra che ci sia un solo interruttore e per tutte le interfacce contemporaneamente -

log_in_vano.

I sintomi non possono essere eliminati, curiamo la malattia.

Risolutore di apprendimento

Il messaggio si verifica quando il programma non attende una risposta dal DNS. È necessario che il DNS risponda più velocemente oppure che il programma attenda più a lungo.

Come posso far aspettare più a lungo un programma?

Per le query al DNS vengono utilizzate le funzioni libc: res_query, res_search, res_mkquery, res_send...

Altre funzioni come gethostbyname sono di livello superiore e alla fine utilizzano queste "primitive".

Il comportamento delle funzioni res_query è determinato dal file /etc/resolv.conf (il nome e il percorso di questo file sono codificati nel codice sorgente). Abbiamo due parametri tempo scaduto E

Abbiamo due parametri tentativi.

- tempo di attesa per una risposta dal server DNS. tentativi

- il numero di richieste ripetute al server DNS se la prima richiesta non ha ricevuto risposta.

Subito dopo aver atteso la prima richiesta, viene inviata la seconda richiesta e così via. Esempio

resolv.conf Nameserver 8.8.8.8 nameserver 8.8.4.4 opzioni timeout:7 tentativi:1 I valori predefiniti e i valori limite si trovano in/usr/include/resolv.h

/* * Definizioni e variabili globali per lo stub del risolutore. */ ...... #define RES_TIMEOUT 5 /* min. secondi tra i tentativi */ #define RES_MAXRETRANS 30 /* solo per resolv.conf/RES_OPTIONS */ #define RES_MAXRETRY 5 /* solo per resolv.conf/RES_OPTIONS */ #define RES_DFLRETRY 2 /* Predefinito #/tentativi. */ #define RES_MAXTIME 65535 /* Infinito, in millisecondi. */.....

Per impostazione predefinita abbiamo un'attesa di 5 secondi e 2 tentativi. Questo è per ogni server che proviamo a raggiungere.

Per l'esempio precedente, il tempo massimo di attesa per una risposta (se entrambi i server DNS falliscono) è 2 (server) x 7 (timeout) x (1+1 (tentativi)) = 28 secondi.

La mia configurazione era più semplice

# cat /etc/resolv.conf dominio myserver nameserver 127.0.0.1 Risulta 1x3x5 = 15. Controlliamo.

L'utilità più semplice: l'host utilizza le sue impostazioni integrate, quindi facciamo lo scavo avanzato.<<>>DiG<<>> rcom-ne.com ;; opzioni globali: printcmd ;; connessione Scaduta; nessun server è stato raggiunto real 0m15.009s user 0m0.000s sys 0m0.006s Verifichiamo la nostra ipotesi sul motivo del messaggio nel log.

Eseguiamolo in una console

# (data;ora dig rcom-ne.com;data) & venerdì 11 febbraio 2011 16:46:49 (MSK);<<>>DiG<<>> rcom-ne.com ;; opzioni globali: printcmd ;; connessione Scaduta; nessun server è stato raggiunto real 0m15.009s user 0m0.000s sys 0m0.006s venerdì 11 febbraio 2011 16:47:04 (MSK) E in un altro, in parallelo, vediamo quale porta viene utilizzata scavare#sockstat | grep dig root dig 71322 20 udp4 *:52170 *:* # grep 52170 /var/log/messages Mar 4 16:47:20 myserver kernel: tentativo di connessione a UDP 127.0.0.1:52170 da 127.0.0.1:53

dig attende 15 secondi per una risposta e la risposta arriva dopo (16:47:20 - 16:46:49 = 31 ~ 30) 30 secondi.

Ora aumentiamo il tempo di risposta a 30 secondi o anche di più.

Il tempo per dig è il timeout da resolv.conf

#data; time dig +time=12 rcom-ne.com;date venerdì 4 marzo 2011 17:07:46 (MSK);<<>>DiG<<>> +time=12 rcom-ne.com ;; opzioni globali: printcmd ;; Ho ricevuto la risposta: ;; ->>INTESTAZIONE<<- 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)

scavare ha ottenuto la risposta per 30 secondi, anche se avrebbe potuto aspettare fino a 1x3x12=36.

Apparentemente, 30 secondi sono un timeout per BIND stesso. Ricordiamolo.

stato: SERVFAIL significa che il server DNS non è stato in grado di elaborare la richiesta a causa di problemi con il server DNS (RFC 1035, RFC 2929).

"Beh, non l'ho fatto, non l'ho fatto", ci dice il server, anche se sappiamo che semplicemente non ha aspettato una risposta dai server DNS del dominio rcom-ne.com.

Approccio personale

Le impostazioni in resolv.conf si applicano a tutti i programmi.

Non voglio aumentare il tempo massimo di richiesta da 15 a 30 secondi (2 volte) per tutti i programmi sul server.

Forse puoi regolare i timeout del risolutore per i singoli programmi?

vedere confTO_RESOLVER_RETRANS e confTO_RESOLVER_RETRY.

Ma prima dobbiamo configurare lo spamilter. Ma non ha tali impostazioni. Anche la modifica di resolv.conf sembrava non avere alcun effetto su di esso.

Ho provato a modificare il codice sorgente, ma non sono riuscito a ottenere alcun risultato.

Nota: dopo aver risolto il problema, sperimentando resolv.conf e tcpdump, ho scoperto che resolv.conf ha sicuramente influenzato lo spam. Solo che periodicamente inviava 2 richieste contemporaneamente, invece di inviarle dopo secondi di timeout. Apparentemente questo è un problema tecnico nell'architettura multi-thread di Spamilter, sebbene il risolutore stesso sia descritto in man come thread-safe.

Cari 30 secondi

Ho dovuto pensare a come correggere il tempo di risposta di BIND. Ho trovato una domanda simile su Internet, ma senza risposta.

Frustrato, ho cercato il prezioso numero 30 nel codice sorgente e ho avuto fortuna.

La cronologia delle modifiche mi dice: /usr/src/contrib/bind9/CHANGES .................... --- Rilasciato 9.2.3rc1 --- .... .............. 1122. Timeout di risoluzione ridotto da 90 a 30 secondi. .................... --- 9.2.2 rilasciato --- .................... . .

La descrizione corrisponde a quello che cercavo.

Ho scaricato entrambe le versioni di BIND menzionate, ho creato un diff e l'ho guardato a lungo finché non l'ho trovato.

-/* $Id: risolutore.c,v 1.218.2.12.4.4 2003/02/18 03:32:01 marka Esp $ */ +/* $Id: risolutore.c,v 1.218.2.18 2003/07/18 04:35:51 marka Exp $ */ @@ -2234.7 +2229.7 @@ /* * Calcola un tempo di scadenza per l'intero recupero. */ - isc_interval_set(&intervallo, 90, 0); /* Costante XXXRTH */ + isc_interval_set(&intervallo, 30, 0); /* Costante XXXRTH */ iresult = isc_time_nowplusinterval(&fctx->expires, &interval); if (iresult != ISC_R_SUCCESS) ( ERRORE_UNEXPECTED(__FILE__, __LINE__,

Ho provato a ridurre il parametro della funzione isc_interval_set a e evviva: le risposte di BIND hanno iniziato ad arrivare in un massimo di 20 secondi.

# 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/ denominato # make obj && make depend && make && make install # /etc/rc.d/named restart

Ma in produzione non ho modificato nulla, chissà quali problemi potrebbe causare. Non per niente gli sviluppatori impostano questo parametro in modo così rigoroso.

Tutto da capo

Quindi, dopo aver trascorso molto tempo, non sono ancora riuscito a risolvere il problema.

Alla fine, ho deciso di esaminare con quali richieste specifiche lo spamilter bombarda il DNS e che tipo di indirizzi BIND impiega molto tempo per risolvere?

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

Apriamo dns.pcap in Wireshark e controlla le richieste non riuscite.

Si è scoperto che nelle mie ipotesi ero molto lontano dalla verità.

Il 90% delle richieste senza risposta riguardavano domini list.dsbl.org multihop.dsbl.org unconfirmed.dsbl.org

Interrogazione standard A 146.152.225.99.list.dsbl.org

Utilizzando query DNS, lo spamilter ha cercato gli indirizzi dei server di posta nei database degli spammer. Questa è la tecnologia DNSBL.

Sono andato su dsbl.org e ho scoperto che era defunto da molto tempo.

Dopo aver cercato tra le configurazioni, ho trovato questi indirizzi nel file /var/db/spamilter/db.rdnsbl e li ho commentati.

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

La valanga di richieste fallite è scomparsa. Problema risolto.

Imparare dagli errori

Da un lato sono rimasto seriamente fregato quando, invece di indagare a fondo sul problema, guardare vari registri, analizzare il traffico, ho subito fatto delle ipotesi e, sulla base di esse, ho iniziato a cercare soluzioni. Di conseguenza, ho trascorso molto tempo e fatto molte ricerche non necessarie. D'altra parte, ho imparato molte cose interessanti sul lavoro del risolutore e il DNS è il primo posto da controllare quando si verificano vari ritardi nel funzionamento dei programmi, quindi c'è ancora un vantaggio.

Dopo che la valanga di connessioni DNS incomplete è scomparsa, il log è rimasto intasato di connessioni alla porta 6881.

Kernel: tentativo di connessione a UDP 192.0.32.10:6881 da 188.85.194.61:24333

La base di conoscenza globale suggerisce che UDP 6881 è molto probabilmente un client torrent che tenta di stabilire una connessione DHT. Una versione molto probabile è che un client torrent sia stato eseguito sul server per molto tempo e, sebbene sia stato cancellato da tempo, il suo ricordo potrebbe non morire mai nel cuore di altri compagni.

Dobbiamo catturare i pacchetti in arrivo sulla porta 6881. Utilizzo Packet Filter pf(4) come firewall/NAT. Immediatamente dopo la regola di blocco predefinita, aggiungeremo una regola per bloccare e registrare le connessioni upd in entrata sulla porta 6881. Parametro presto provoca l'interruzione dell'elaborazione di altre regole se il pacchetto corrisponde a quello corrente.

# ee /etc/pf.conf blocca nel log rapido su em0 proto udp da qualsiasi porta 192.0.32.10 6881 # pfctl -oonvf /etc/pf.conf # pfctl -oovf /etc/pf.conf

Entro pochi minuti scriveremo i risultati in un file per Wireshark.

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

Apriamo il file in Wireshark e diamo un'occhiata. Sfortunatamente, DHT non è ancora supportato dal programma. Pertanto, tutto ciò che puoi fare è cercare una firma sul pacchetto.

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

La ricerca dei primi byte del pacchetto porta a discutere dell'estensione DHT per Bittorrent. Ciò significa che questi sono effettivamente echi del funzionamento a lungo termine del client torrent sul server.

Va tutto bene. Hai solo bisogno di cancellare il registro di tali voci.

Per fare ciò, di' a pf di eliminare silenziosamente i pacchetti che arrivano sulla porta 6881 aggiungendo il parametro gocciolare e rimuovendo tronco d'albero.

Questo breve post riguarda il plugin Limit Login Attempts, che ti consente di proteggere i pannelli di amministrazione dei blog WordPress. Un plugin che ti consente di limitare il numero di tentativi da parte degli hacker del blog: hacker che tentano di accedere al pannello di amministrazione e prendere il controllo del blog. Esistono molti metodi e plugin per proteggersi dagli hacker e alcuni di essi sono molto seri. Ma un blog giovane, con poco traffico e autorità, di regola, non è in pericolo. Per ora. Ma impostare un limite ai tentativi di accesso non è nemmeno possibile per un blog molto "interessante", che attualmente considero la mia modesta risorsa web.

Rimarrai sorpreso, ma dopo aver installato questo plugin, sono rimasto sorpreso di scoprire che un utente malintenzionato sotto il nome di admin ha tentato di penetrare nel mio blog e, dopo tentativi falliti, è stato bloccato utilizzando il plugin per 24 ore. E sono passate solo poche ore dalla sua installazione!

Di seguito è riportato uno screenshot di parte della lettera che ho ricevuto ieri nella mia email:

Non ho potuto fare a meno di ricordare come ho scoperto e risolto un "buco" nell'argomento del blog. Cosa succede se lascio tutto visibile o scelgo il login di amministratore e un utente malintenzionato indovina la password?

Spero di avervi convinto, cari webmaster, che un plugin così semplice ma leggero non interferirà con il vostro blog.

Brevemente sull'installazione e la configurazione del plugin Limit Login Attempts

Tutto è assolutamente semplice: basta trovare il plugin cercando nel pannello di amministrazione il nome corrispondente, installarlo e attivarlo.

Quindi dalle Opzioni, selezionando il plugin, vai alle impostazioni. In linea di principio non è necessario modificare nulla qui, ma ti consiglio di selezionare la casella che consente a una delle funzioni Limita tentativi di accesso di inviare messaggi sui tentativi di intrusione degli hacker sulla tua casella di posta. Questa funzionalità del plugin ti consentirà di ricevere un rapido riepilogo dei tentativi di hacking.

Come funziona il plugin Limita tentativi di accesso

si basa sulla limitazione dell'accesso al pannello di amministrazione del sito quando si immettono login e password. In altre parole, crea un limite al numero di tentativi di autorizzazione, compreso il supporto dei cookie, in base all’indirizzo IP dell’utente Internet. Far sì che l'amministratore del sito si disconnetta ogni volta dal pannello e cancelli costantemente i cookie è un compito estremamente ingrato. In questo caso, il plugin Limit Login Attempts è semplicemente insostituibile.

Il plugin, tra le altre cose, fornisce l’indirizzo IP dell’hacker e può essere utilizzato per identificare e punire l’hacker con tutti i mezzi disponibili.

Ulteriori misure anti-hacking

Questo articolo, come ho indicato sopra, non è più l’unico sulla sicurezza dei siti WordPress. Nel mio manuale precedente, ma più dettagliato, sulla sicurezza dei siti web - ““, - ho anche toccato l'argomento dei plugin progettati per una funzione simile. In particolare, circa altri due plugin che possono funzionare insieme. Si tratta dei plugin Login LockDown + Anti-XSS attack (probabilmente la combinazione Limit Login Attempts + Anti-XSS attack funzionerà in modo simile), del cui lavoro parla Alexey Kozymaev nel suo video tutorial. Ho deciso di pubblicare il video in questa pagina.

Come ulteriore rimedio contro gli attacchi al sito consiglio anche un plugin, di cui non ho mai parlato nei miei messaggi. È chiamato Blocca query errate (BBQ); Questo plugin protegge automaticamente il tuo sito da richieste URL dannose. L'installazione avviene tramite ricerca nel pannello di amministrazione, non sono richieste impostazioni.

(Visitato 43 volte, 1 visite oggi)

Il plugin WP Limit login Attempts è uno dei plugin più necessari, poiché protegge il sito da tecniche di hacker come gli attacchi di forza bruta.

L'essenza di questa tecnica è che l'aggressore tenta di penetrare nell'area di amministrazione indovinando una coppia login-password.

Probabilmente tutti si sono già imbattuti nell'avviso: "Ti restano tre tentativi" che appare quando si accede con una password. Questo è esattamente il lavoro svolto da questo plugin.

Dopo averlo installato e attivato, nella console, nella sezione parametri, apparirà una riga con il nome di questo modulo.

Dopo averlo seguito ci troveremo nella pagina delle impostazioni.

Le impostazioni qui sono semplici e in russo. L'immagine mostra le impostazioni predefinite. Vediamo cosa può essere cambiato qui.

Il primo campo imposta il numero di tentativi aggiuntivi. ne ho tenuti 3

Nella seconda viene fissata la durata del primo isolamento. Penso che 20-30 minuti vadano bene.

Il campo successivo imposta il numero di isolamenti, dopodiché il tempo di isolamento verrà aumentato a 24 ore o più, a tua discrezione.

Ne ho lasciato 1 perché chi altro se non un attaccante commetterebbe un errore tre volte, e poi, dopo mezz'ora, altre tre volte. Devi essere completamente sclerotico per fare qualcosa del genere senza intenzione.

Lasciamo la connessione al sito come “Connessione diretta”.

Elabora i cookie di accesso. "Sì" in questa riga viene selezionato se esegui tutto il lavoro sul sito in un browser. Ad esempio, utilizzo quattro browser ed è per questo che ho scelto "No".

Per segnalare l'isolamento, è meglio selezionare entrambe le caselle, anche se la posta per ora non sembra essere di alcuna utilità, ma non farà male. In futuro, se continuerai ad interessarti alla programmazione, questi indirizzi potranno essere analizzati.

Questo è tutto per le impostazioni del plugin Limita i tentativi di accesso finito. Ora, se ritorni alla stessa pagina dopo un giorno o due, vedrai la seguente immagine nella sezione delle statistiche.

Ciò significa che qualcuno ha tentato in tutti i modi di entrare nella tua area di amministrazione utilizzando uno script speciale, ma non ci è riuscito. È possibile "Cancella registro".

Plugin per la sicurezza in questo file .


Giro


A volte ATTEMPT_.HLP e altri errori di sistema HLP possono essere dovuti a problemi nel registro di Windows. Diversi programmi possono utilizzare il file ATTEMPT_.HLP, ma, quando tali programmi vengono disinstallati o modificati, possono rimanere voci del registro di sistema HLP "orfane" (errate).

Fondamentalmente, ciò significa che anche se il percorso effettivo del file potrebbe essere cambiato, la sua posizione precedente errata è ancora registrata nel registro di Windows. Quando Windows prova a cercare questi riferimenti a file errati (le posizioni dei file sul tuo PC), si possono verificare errori ATTEMPT_.HLP. Inoltre, un'infezione da malware potrebbe contenere voci del registro di sistema associate a FreeBSD 2.2.1. Pertanto, queste voci di registro HLP danneggiate devono essere riparate per risolvere il problema alla radice.

La modifica manuale del registro di Windows per rimuovere le chiavi ATTEMPT_.HLP non valide non è consigliata a meno che tu non sia un professionista dell'assistenza PC. Gli errori commessi durante la modifica del registro possono rendere il PC inutilizzabile e causare danni irreparabili al sistema operativo. Infatti, anche una virgola inserita nel posto sbagliato può impedire l'avvio del computer!

A causa di questo rischio, per controllare e riparare qualsiasi problema del registro di sistema relativo a ATTEMPT_.HLP, è fortemente consigliabile utilizzare uno strumento di pulizia del registro di sistema fidato, come WinThruster (sviluppato da Microsoft Gold Certified Partner). Utilizzando uno strumento di pulizia del registro, puoi automatizzare il processo di rilevamento di voci di registro danneggiate, riferimenti a file mancanti (come quello che causa l'errore ATTEMPT_.HLP) e collegamenti interrotti all'interno del registro. Prima di ogni scansione, viene creata automaticamente una copia di backup, consentendoti di annullare eventuali modifiche con un clic e proteggendoti da possibili danni al tuo computer. La parte migliore è che l'eliminazione degli errori di registro può migliorare notevolmente la velocità e le prestazioni del sistema.


Avvertimento: A meno che tu non sia un utente PC esperto, NON consigliamo di modificare manualmente il registro di Windows. L'utilizzo errato dell'editor del Registro di sistema può causare seri problemi che potrebbero richiedere la reinstallazione di Windows. Non garantiamo che i problemi derivanti dall'uso errato dell'editor del Registro di sistema possano essere corretti. L'utilizzo dell'editor del Registro di sistema è a tuo rischio e pericolo.

Prima di ripristinare manualmente il registro di Windows, è necessario creare un backup esportando la porzione di registro associata a ATTEMPT_.HLP (ad esempio, FreeBSD 2.2.1):

  1. Fare clic sul pulsante Inizio.
  2. Accedere " comando"V barra di ricerca... NON FARE ANCORA CLIC ACCEDERE!
  3. Tenendo premuti i tasti CTRL-Maiusc sulla tastiera, premi ACCEDERE.
  4. Verrà visualizzata una finestra di dialogo per l'accesso.
  5. Clic .
  6. La scatola nera si apre con un cursore lampeggiante.
  7. Accedere " regedit" e premere ACCEDERE.
  8. Nell'Editor del Registro di sistema, seleziona la chiave relativa a ATTEMPT_.HLP (ad esempio, FreeBSD 2.2.1) di cui desideri eseguire il backup.
  9. Sul menu File Selezionare Esportare.
  10. Sulla lista Salvare seleziona la cartella in cui vuoi salvare il backup della chiave di FreeBSD 2.2.1.
  11. Nel campo Nome del file Inserisci un nome per il file di backup, ad esempio "Backup FreeBSD 2.2.1".
  12. Assicurati il ​​campo Intervallo di esportazione valore selezionato Ramo selezionato.
  13. Clic Salva.
  14. Il file verrà salvato con estensione .reg.
  15. Hai ora un backup della voce del registro di sistema relativa a ATTEMPT_.HLP.

I seguenti passaggi per modificare manualmente il registro non verranno descritti in questo articolo, poiché potrebbero danneggiare il sistema. Se desideri maggiori informazioni sulla modifica manuale del registro, consulta i collegamenti seguenti.