query sull'URL fornito dall'utente, quali sono le migliori pratiche? [chiuso]

0

Ho un'applicazione web che importa dati da siti Web di terzi accettando un URL da un utente, interrogando quell'URL e quindi analizzandolo per i dati. Sono piuttosto preoccupato per lo strumento che viene abusato, quindi mi sto chiedendo quali sono le migliori pratiche che dovrei implementare per mitigare gli abusi. Attualmente lo strumento è disponibile solo per le persone che hanno creato un account, quindi qualsiasi abuso deve essere tracciabile su un determinato account.

In particolare, mi chiedevo se la richiesta che invio al sito Web di terze parti includesse intestazioni come includere un indirizzo IP del richiedente originale (simile a una richiesta proxy).

    
posta Tim Tisdall 10.10.2017 - 16:02
fonte

3 risposte

2

Cose che ti vengono subito in mente per proteggere altri siti -

  • Verifica gli utenti - al minimo tramite la verifica della posta elettronica.
  • Limitazione della tariffa per dominio. Sia per utente che per limiti globali.
  • Limiti di utilizzo per utente. Puoi anche trasformarlo in un monetizzatore - utilizzo più pesante a pagamento
  • Controlla Robots.txt sul dominio remoto e, se ti chiede di non eseguire quella richiesta specifica, non farlo o chiedi all'utente di confermare l'autorizzazione del proprietario del dominio.
  • Metti in chiaro nel tuo ToS che i dettagli dell'utente vengono trasmessi ai siti in cui si è verificato un abuso e si ritirano i servizi all'utente.
  • Forse offrire un opt-out per i proprietari del dominio in modo che il loro sito non possa essere scansionato. Se lo fai assicurati di verificare che siano proprietari del dominio.

Devi anche proteggerti. Ricorda che tutti i contenuti estratti da un URL possono essere forniti dall'utente (potrebbero possedere il dominio) e in quanto tale potrebbe essere un tentativo di sfruttare la tua applicazione.

    
risposta data 10.10.2017 - 16:19
fonte
2

Ci sono alcune cose che mi vengono in mente qui.

Limita i siti a cui è possibile accedere
Nel migliore dei casi è possibile creare una whitelist di siti approvati da cui i dati possono essere importati. È quindi possibile controllare l'URL inserito nel proprio elenco e assumere che sia probabilmente valido.
Se ciò non è possibile, alcuni indirizzi dovrebbero essere nella lista nera (si pensi a localhost, 0.0.0.0, ..). Soprattutto gli indirizzi locali (IPv4 e IPv6) potrebbero essere utilizzati per eseguire una scansione del server stesso per accedere ai servizi disponibili solo dalla macchina locale.
Forse c'è un pannello di amministrazione accessibile dal localhost. O un sistema di database in esecuzione localmente su una determinata porta a cui è possibile accedere.

Limita lo schema URL
Assicurati che solo "http: //" e "https: //" possano essere utilizzati negli URL forniti. Un altro schema che potrebbe essere utilizzato da un utente malintenzionato è ad es. 'file: //' per caricare un file locale dal tuo server. Altri schemi come ad es. "data" o "ftp" possono anche essere utilizzati per avviare comportamenti indesiderati.

Richieste in uscita con limite di velocità Per evitare un numero elevato di richieste in uscita verso altri siti, dovrebbe essere applicato un rigoroso limite di velocità. Per un utente un rallentamento di dieci secondi non dovrebbe essere un problema. Se qualcuno volesse utilizzare il tuo servizio per nascondere la sua identità mentre esegue un altro servizio, un ritardo di dieci secondi lo renderà inefficace.

Includi un'intestazione di contatto illecito
Puoi includere un'intestazione con informazioni su come gli amministratori possono raggiungerti se si sentono abusati dalle richieste inviate dal tuo servizio. Ciò rende ragionevolmente facile interrompere qualsiasi comportamento errato contattandoti.

Non eseguire script
Raccomanderei di non interpretare alcun script come il codice JavaScript sul sito che stai richiedendo.

Esci dall'URL A seconda dello strumento (se esiste) che usi per interrogare il contenuto del sito, assicurati di eseguire correttamente l'escape dell'URL per impedire qualsiasi tipo di contenuto o di attacchi di tipo command injection sul tuo server.

    
risposta data 10.10.2017 - 16:32
fonte
-1

Vorrei utilizzare un certificato che può essere rilasciato dall'utente all'utente simile a un pki se non si desidera utilizzare un vero pki. Così ogni utente che si connette deve avere il certificato.

    
risposta data 10.10.2017 - 18:45
fonte

Leggi altre domande sui tag