it-swarm-eu.dev

C'è un modo per nascondere il codice sorgente HTML ma mantenerlo efficace?

Ho un sito Web con un modulo di contatto HTML sul lato client creato manualmente (non come output di un costruttore HTML come PHP):

<form action="mailto:[email protected]">
    Email Adress:<br>
    <input type="email" name="email_address" value="" maxlength="100" />
    <br>
    <input type="submit" value="Submit" />
</form>

Vorrei nascondere quel mailto:[email protected] da tutti i codici sorgente HTML che lo includono, in modo che gli utenti non possano trovare direttamente l'indirizzo e-mail anche nel codice sorgente;
In questo modo, in genere solo i clienti che mi hanno inviato un'e-mail e ottenuto una risposta --- conoscono l'indirizzo e-mail (a meno che l'utente non annulli l'operazione di occultamento).

C'è un modo per nascondere il codice sorgente HTML ma mantenerlo efficace?

Aggiornare

Dal leggere tutte le risposte con calma, sembra che la mia domanda abbia avuto un falso presupposto: mi sono perso un sacco di tempo che mailto alla fine mostrerà sempre l'e-mail così come appare nel client di posta elettronica di un utente (e forse anche prima di quello in anteprima in il bordo inferiore sinistro della porta dello schermo del browser); Penso di essermi perso perché una distorsione cognitiva della combinazione di risposte che suggerisce offuscamento del codice sorgente e una frase ridondante secondo me come La domanda non ha nemmeno senso a livello concettuale; che ho provato a rimuovere in una modifica (che è stata parzialmente approvata, purtroppo). Ora capisco che qualunque cosa farò, non importa come offuscherò il codice sorgente; l'e-mail che ho inserito in mailto apparirà sempre alla fine in un client di posta elettronica utente applicato a un browser (se presente, altrimenti non ci sarebbe alcun effetto di invio e-mail).

23
user123574

Non puoi. La domanda non ha nemmeno senso a livello concettuale. A mailto: link è semplicemente un modo conveniente per comunicare a un utente finale a cui può inviare e-mail. Se il tuo collegamento mailto funziona, l'utente finale per definizione saprà dove sta andando l'e-mail, allo stesso modo in cui l'utente finale per definizione saprà dove si trova un collegamento fare clic su verrà visualizzato.

Dovrai chiederti quale problema stai cercando di risolvere; se vuoi nascondere il nome dei destinatari puoi farlo creando indirizzi di posta elettronica oscuri o anche temporanei sul tuo server di posta e inoltrando la posta ai destinatari effettivi da questi, in modo simile a come gli accorciatori di URL possono essere usati per oscurare il - effettivo destinazione di un collegamento, ma un utente sempre vedrà l'indirizzo e-mail a cui sta inviando perché è così che funziona l'e-mail.

56
Cubic

Non puoi nascondere l'HTML e aspettarti che il browser sia in grado di interpretarlo. Il browser richiede l'accesso completo all'HTML per visualizzare tutte le parti del sito. Non appena il browser ha accesso ad esso, l'utente può anche accedervi.

Inoltre, JavaScript non è in grado di "nascondere" il contenuto del sito e di renderlo comunque accessibile al browser, e quindi all'utente finale, per lo stesso identico motivo.

130
MechMK1

Bene, IMHO è l'unico modo affidabile per impedire all'utente di conoscere l'indirizzo e-mail per inviare la posta lato server anziché lato client. Detto diversamente, il client fornisce solo il proprio indirizzo e-mail e il proprio testo, viene caricato sul server dal modulo e la posta viene inviata dall'applicazione server che è l'unica parte a conoscere l'indirizzo del destinatario.

Questo è comunemente usato nei centri di assistenza per impedire agli utenti di utilizzare direttamente i loro indirizzi interni.

101
Serge Ballesta

Non puoi. E neanche Javascript. Hai tre opzioni e dipendono tutte da una lingua di backend. Hai due opzioni, una giusta e due folli se non hai un server:

Nel modo giusto: Si invia un modulo a un server e il server gestisce questa e-mail tramite SMTP.

Nel modo giusto: Ti invii a un altro dominio o API che può gestirlo sul lato server.

The crazy way: Scrivi un'applicazione desktop registrata nel tuo protocollo URL personalizzato e i parametri includono il corpo del modulo. Il consumatore installa questa applicazione desktop e gestisce silenziosamente questa e-mail su SMTP invece di aprire il proprio client di posta elettronica. La posta di destinazione può essere codificata all'interno di quell'applicazione e non possono ottenerla se non si decompilano o eseguono un dump della memoria. Invece di "mailto: email.com" diventa "custom-mail:" senza posta.

Questo è "mailto". È un protocollo registrato con il sistema operativo. Tuttavia, tieni presente che se fai affidamento sul loro client e "mailto", non importa cosa fai. Lo vedranno non appena apriranno i loro clienti, quindi non hai risolto nulla qui.

15
The Anathema

Puoi codificarlo in HTML, in questo modo:

<form action="&#x6d;&#x61;&#x69;&#x6c;&#x74;&#x6f;&#x3a;&#x73;&#x6f;&#x6d;&#x65;&#x6f;&#x6e;&#x65;&#x40;&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;">

Tuttavia, ciò lo offusca davvero. Chiunque può decodificare questo.

Se vuoi davvero nasconderlo hai bisogno della funzionalità lato server (PHP), in cui il modulo viene inviato al server e il server te lo invia per email.

11
Sjoerd

TL; DR: No.

Se capisco correttamente il tuo problema, non vuoi nascondere l'indirizzo e-mail agli utenti, ma dai bot che analizzano il codice sorgente per raccogliere gli indirizzi e-mail per lo spamming.

Certo, in JavaScript ci sono molti semplici modi per ridurre questo problema praticamente a zero, perché ha bisogno dell'esecuzione dello script che quasi nessuno spammer fa:

function getEMailAddr(user, domain) {
   return user + '@' + domain;
}

e poi:

link = document.createElement('A');
link.href = 'mailto:' + getEMailAddr('example', 'something.com');

Nel semplice HTML, non c'è modo di farlo. Tuttavia, ci sono alcune possibilità per rendere meno superficie d'attacco per stupidi parser. Il segno accattivante può essere espresso come entità HTML &at; o &#64;, in modo che i parser che cercano solo @ non riescono a trovarli. Queste entità HTML sono consentite anche nei valori degli attributi, come href.

7
rexkogitans

Per realizzare ciò che stai cercando di fare, ottieni un indirizzo Gmail o un indirizzo di inoltro che utilizzi nel tuo modulo, che serve al tuo scopo di mantenere segreto il tuo vero indirizzo e-mail.

6
Lort Fasd

Non puoi nascondere HTML dal browser. HTML è un linguaggio di markup sul lato client, il che significa che è caricato dal browser sul lato client, quindi il browser deve essere in grado di interpretarlo.

Come qualcuno ha accennato, non sarai in grado di realizzare ciò che stai cercando di ottenere con il modo in cui lo stai facendo. Potresti riuscire a realizzare qualcosa di simile codificando/decodificando gli elementi secondo necessità, tuttavia, la sicurezza attraverso l'oscurità non è una strategia consigliata e chiunque può facilmente decodificare una stringa codificata.

4
Justin

Risposta alternativa.

Sì, c'è, prova a visualizzare la fonte di https://samy.pl/ è quasi impossibile da trovare, devi essere piuttosto dedicato a trovarlo, ma il sito web funziona bene.

Ma più seriamente il codice è ancora visibile, è appena fuori dalla portata della maggior parte degli utenti, anche di quelli che hanno qualche idea di dove cercare.

HTML/JS è tutto eseguito sul lato client, quindi è impossibile non consegnarlo al client per l'elaborazione.

La parte che desideri nascondere in realtà si innesca nel browser del client, un collegamento mailto è un collegamento che dice al computer di aprire un client di posta e pre-compilare il modulo. Quindi, anche se hai fatto ciò che fa Samy, facendo clic sul collegamento si aprirà semplicemente nel client di posta e mostrerà all'utente l'indirizzo di posta elettronica.

Se si desidera mantenerlo segreto, l'e-mail deve essere inviata sul lato server

3
exussum

Come altri hanno già detto, non puoi nascondere l'HTML. Tuttavia sembra che tu non voglia nascondere in particolare l'HTML, vuoi solo che il destinatario del modulo non sia visibile nel tuo codice che è abbastanza semplice a seconda del tuo framework.

Ad esempio, se si utilizza PHP, PHP Mailer è un modo abbastanza semplice per inviare un'e-mail e poiché PHP è gestito lato server, quando il modulo invia l'utente non vedrà mai il tuo indirizzo email se non li desideri.

Se stai usando ASP.NET o qualsiasi altra cosa, semplicemente digitando il nome del tuo ambiente ed e-mail nel tuo motore di ricerca preferito probabilmente ti daranno molte opzioni su come inviare un'e-mail e puoi combinarlo con il tuo modulo per farlo lato server.

2
aslum

TL; DR: No, non puoi nascondere il codice sorgente HTML. È possibile offuscare l'indirizzo e-mail per rinviare gli spammer solo se non si utilizza il codice lato server.

Oltre a utilizzare entità HTML (&#x6d;) o Javascript, puoi anche usare XSLT per offuscamento, se usi XHTML invece di HTML.

XSLT è un linguaggio di programmazione basato su XML supportato da tutti i principali browser che può trasformare qualsiasi XML in un'altra forma (XML, HTML, Plaintext, ecc.). Un'applicazione sarebbe quella di passare attraverso la maggior parte del documento ad eccezione degli attributi action che contengono una parte magica, ad es. +rot13.

Un vantaggio è che funziona anche nei browser in cui Javascript è disabilitato. Un avvertimento è che devi scrivere XHTML, quindi al posto dei lenient i browser parser HTML usano il parser XML rigoroso, che causa messaggi di errore su ogni errore di sintassi.

Tieni inoltre presente che ogni tecnica di offuscamento HTML può solo rinviare gli spammer. Il browser ha bisogno del link mailto corretto per fare la cosa giusta quando invia il modulo, quindi alla fine l'utente vedrà l'indirizzo non offuscato.

index.xhtml

<?xml-stylesheet type="text/xsl" href="obfuscation.xsl" ?>
…
<form action="mailto+rot13:fbzrbar$rknzcyr.pbz">
    Email Adress:<br/>
    <input type="email" name="email_address" value="" maxlength="100" />
    <br/>
    <input type="submit" value="Submit" />
</form>

obfuscation.xsl

<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:html="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" encoding="UTF-8"/>

<!-- Identity Transformation for HTML nodes -->
<xsl:template match="@*|html:*">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

<!-- decode form actions with a ROT-13 variant  -->
<xsl:template match="@action[contains(substring(., 0, 16), '+rot13:')]">
    <xsl:attribute name="action"><xsl:value-of select="substring-before(., '+')"/>:<xsl:value-of select="translate(substring-after(., ':'),'[email protected]$6789012345', '[email protected]')" /></xsl:attribute>
</xsl:template>

</xsl:stylesheet>
1
cg909

Questo non può essere fatto per un collegamento mailto, tuttavia ci sono servizi come MailThis , Formspree , che ti consente di creare un modulo che pubblica sul loro server e convertiranno che per inviare una email. MailThis ti consente anche di creare un nome alias in modo da non esporre il tuo vero indirizzo e-mail sulla pagina HTML stessa.

1
Lie Ryan