it-swarm.com.de

Gibt es eine Möglichkeit, HTML-Quellcode auszublenden und dennoch effektiv zu halten?

Ich habe eine Website mit einem clientseitigen HTML-Kontaktformular, das manuell erstellt wurde (nicht als Ausgabe eines HTML-Konstruktors wie 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>

Ich möchte das verstecken mailto:[email protected] aus allen HTML-Quellcodes, die es enthalten, so dass Benutzer die E-Mail-Adresse selbst im Quellcode nicht direkt finden können;
Auf diese Weise kennen im Allgemeinen nur Kunden, die mir eine E-Mail gesendet und eine Antwort erhalten haben, die E-Mail-Adresse (es sei denn, der Benutzer hat das Ausblenden rückgängig gemacht).

Gibt es eine Möglichkeit, HTML-Quellcode auszublenden und dennoch effektiv zu halten?

Aktualisieren

Nachdem ich alle Antworten ruhig gelesen habe, scheint es, dass meine Frage eine falsche Annahme hatte: Ich habe große Zeit verpasst, dass mailto die E-Mail immer irgendwann so anzeigt, wie sie im E-Mail-Client-Popup eines Benutzers ist (und möglicherweise auch vorher in der Vorschau in der untere linke Rand des Browser-Bildschirmanschlusses); Ich glaube, ich habe das verpasst, weil eine kognitive Verzerrung der Kombination von Antworten, die auf eine Verschleierung des Quellcodes hindeuten, und ein meiner Meinung nach redundanter Satz wie Die Frage macht auf konzeptioneller Ebene nicht einmal Sinn; was ich versucht habe, in einer Bearbeitung zu entfernen (die leider teilweise genehmigt wurde). Ich verstehe jetzt, was auch immer ich tun werde, egal wie ich den Quellcode verschleiern werde; Die E-Mail, die ich in mailto geputtet habe, wird irgendwann immer in einem Benutzer-E-Mail-Client angezeigt, der auf einen Browser angewendet wird (falls vorhanden - wenn nicht, gibt es einfach keinen E-Mail-Sendeeffekt).

23
user123574

Das kannst du nicht. Die Frage macht konzeptionell nicht einmal Sinn. EIN mailto: link ist einfach eine bequeme Möglichkeit, mit einem Endbenutzer zu kommunizieren, an den er E-Mails senden kann. Wenn Ihr Mailto-Link funktioniert, weiß der Endbenutzer per Definition, wohin die E-Mail geht, genauso wie der Endbenutzer per Definition weiß, wo sich ein Link befindet Klicken wird zu.

Sie müssen sich fragen, welches Problem Sie lösen möchten. Wenn Sie den Namen der Empfänger ausblenden möchten, können Sie dies tun, indem Sie verdeckte oder sogar temporäre E-Mail-Adressen auf Ihrem Mailserver erstellen und E-Mails von diesen an die tatsächlichen Empfänger weiterleiten, ähnlich wie URL-Kürzungen verwendet werden können, um die - zu verdecken. tatsächlich Ziel eines Links, aber ein Benutzer wird immer die E-Mail-Adresse sehen, an die er sendet, weil E-Mail genau so funktioniert.

56
Cubic

Sie können HTML nicht ausblenden und erwarten, dass der Browser es interpretieren kann. Der Browser benötigt vollen Zugriff auf den HTML-Code, um alle Teile der Site anzeigen zu können. Sobald der Browser Zugriff darauf hat, kann der Benutzer auch darauf zugreifen.

Außerdem kann JavaScript den Inhalt der Website aus genau demselben Grund nicht "verbergen" und dennoch für den Browser und damit für den Endbenutzer zugänglich machen.

130
MechMK1

Nun, IMHO ist die einzige zuverlässige Möglichkeit, den Benutzer daran zu hindern, die E-Mail-Adresse zu kennen, damit die E-Mail auf der Serverseite anstatt auf der Clientseite gesendet wird. Anders gesagt, der Client gibt nur seine eigene E-Mail-Adresse und den Text an, er wird vom Formular auf den Server hochgeladen und die E-Mail wird von der Serveranwendung gesendet, die als einziger Teil die Empfängeradresse kennt.

Dies wird häufig in Hilfezentren verwendet, um zu verhindern, dass Benutzer ihre internen Adressen direkt verwenden.

101
Serge Ballesta

Das kannst du nicht. Und Javascript auch nicht. Sie haben drei Möglichkeiten, die alle von einer Backend-Sprache abhängen. Sie haben zwei Möglichkeiten, eine richtige und zwei verrückte Möglichkeiten, wenn Sie keinen Server haben:

Der richtige Weg : Sie senden ein Formular an einen Server, und der Server verarbeitet diese E-Mail über SMTP.

Der richtige Weg : Sie senden an eine andere Domain oder API, die serverseitig damit umgehen kann.

Der verrückte Weg : Sie schreiben eine Desktop-Anwendung, die in Ihrem eigenen benutzerdefinierten URL-Protokoll registriert ist und deren Parameter den Hauptteil des Formulars enthalten. Ihr Verbraucher installiert diese Desktop-Anwendung und verarbeitet diese E-Mail stillschweigend über SMTP, anstatt ihren E-Mail-Client zu öffnen. Die Zielmail kann in dieser Anwendung fest codiert werden und kann nur abgerufen werden, wenn sie dekompiliert oder einen Speicherauszug erstellt. Anstelle von "mailto: email.com" wird "custom-mail:" ohne E-Mail.

Dies ist, was "mailto" ist. Es ist ein Protokoll, das beim Betriebssystem registriert ist. Beachten Sie jedoch, dass es keine Rolle spielt, was Sie tun, wenn Sie sich auf den Client und "mailto" verlassen. Sie werden es sehen, sobald ihr Client öffnet, also haben Sie hier nichts wirklich gelöst.

15
The Anathema

Sie können es wie folgt in HTML codieren:

<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;">

Das verschleiert es jedoch nur wirklich. Jeder kann dies entschlüsseln.

Wenn Sie es wirklich ausblenden möchten, benötigen Sie serverseitige Funktionen (PHP), bei denen das Formular an den Server gesendet wird und der Server es Ihnen per E-Mail sendet.

11
Sjoerd

TL; DR: Nein.

Wenn ich Ihr Problem richtig verstehe, möchten Sie die E-Mail-Adresse nicht vor den Benutzern verbergen, sondern vor Bots, die den Quellcode analysieren, um E-Mail-Adressen für Spam zu sammeln.

Sicher, in JavaScript gibt es mehrere einfache Möglichkeiten, um dieses Problem auf praktisch Null zu reduzieren, da das Skript ausgeführt werden muss, was kaum ein Spammer tut:

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

und dann:

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

In einfachem HTML gibt es keine Möglichkeit, dies zu tun. Es gibt jedoch einige Möglichkeiten, weniger Angriffsfläche für dumme Parser zu schaffen. Das sehr eingängige At-Sign kann als HTML-Entitäten &at; Oder &#64; Ausgedrückt werden, sodass Parser, die nur nach @ Suchen, diese nicht finden. Diese HTML-Entitäten sind auch in Attributwerten wie href zulässig.

7
rexkogitans

Um das zu erreichen, was Sie versuchen, erhalten Sie eine Google Mail-Adresse oder Weiterleitungsadresse, die Sie in Ihrem Formular verwenden. Dies dient Ihrem Zweck, Ihre echte E-Mail-Adresse geheim zu halten.

6
Lort Fasd

Sie können HTML nicht vor dem Browser verbergen. HTML ist eine clientseitige Auszeichnungssprache, dh, sie wird vom Browser auf der Clientseite geladen, sodass der Browser sie interpretieren kann.

Wie jemand angedeutet hat, werden Sie nicht in der Lage sein, das zu erreichen, was Sie mit der Art und Weise erreichen möchten, wie Sie es tun. Möglicherweise können Sie etwas in der Nähe erreichen, indem Sie Elemente nach Bedarf codieren/decodieren. Sicherheit durch Dunkelheit ist jedoch keine empfohlene Strategie, und jeder kann eine codierte Zeichenfolge problemlos decodieren.

4
Justin

Alternative Antwort.

Ja, versuchen Sie, die Quelle von https://samy.pl/ anzuzeigen. Es ist fast unmöglich zu finden. Sie müssen ziemlich engagiert sein, um zu finden es funktioniert doch die website gut.

Aber im Ernst, der Code ist immer noch sichtbar. Er ist für die meisten Benutzer unerreichbar, selbst für diejenigen, die eine Vorstellung davon haben, wo sie suchen sollen.

HTML/JS wird alle clientseitig ausgeführt, daher ist es unmöglich, es dem Client nicht zur Verarbeitung zu geben.

Der Teil, den Sie speziell ausblenden möchten, wird tatsächlich im Client-Browser ausgelöst. Ein Mailto-Link ist ein Link, der den Computer auffordert, einen Mail-Client zu öffnen und das Formular vorab auszufüllen. Selbst wenn Sie das getan haben, was Samy tut, wird durch Klicken auf den Link einfach im E-Mail-Client geöffnet und dem Endbenutzer die E-Mail-Adresse angezeigt.

Wenn Sie es geheim halten möchten, muss die E-Mail serverseitig gesendet werden

3
exussum

Wie andere gesagt haben, können Sie HTML nicht ausblenden. Es hört sich jedoch so an, als ob Sie HTML nicht besonders verbergen möchten. Sie möchten lediglich, dass der Empfänger des Formulars in Ihrem Code nicht sichtbar ist, was je nach Framework einfach genug ist.

Wenn Sie beispielsweise PHP verwenden, ist PHP Mailer eine ziemlich einfache Möglichkeit, eine E-Mail zu senden, und da PHP wird serverseitig behandelt, wenn Ihr Formular gesendet wird Der Benutzer wird Ihre E-Mail-Adresse nie sehen, wenn Sie sie auch nicht möchten.

Wenn Sie ASP.NET oder was auch immer verwenden, können Sie durch einfaches Eingeben des Namens Ihrer Umgebung und Ihrer E-Mail-Adresse in Ihre bevorzugte Suchmaschine wahrscheinlich zahlreiche Optionen zum Senden einer E-Mail erhalten, die Sie mit Ihrem Formular kombinieren können Serverseite.

2
aslum

TL; DR: Nein, Sie können den HTML-Quellcode nicht ausblenden. Sie können die E-Mail-Adresse nur verschleiern, um Spammer aufzuschieben, solange Sie keinen serverseitigen Code verwenden.

Neben der Verwendung von HTML-Entitäten (&#x6d;) oder Javascript können Sie auch XSLT zur Verschleierung verwenden, wenn Sie XHTML anstelle von HTML verwenden.

XSLT ist eine XML-basierte Programmiersprache, die von allen gängigen Browsern unterstützt wird und jedes XML in eine andere Form (XML, HTML, Klartext usw.) umwandeln kann. Eine Anwendung wäre, den größten Teil des Dokuments zu durchlaufen, mit Ausnahme von action Attributen, die einen magischen Teil enthalten, z. +rot13.

Ein Vorteil ist, dass dies auch in Browsern funktioniert, in denen Javascript deaktiviert ist. Eine Einschränkung ist, dass Sie XHTML schreiben müssen. Verwenden Sie daher anstelle des milden HTML-Parser-Browsers den strengen XML-Parser, der bei jedem Syntaxfehler Fehlermeldungen verursacht.

Bitte beachten Sie auch, dass jede HTML-Verschleierungstechnik nur Spammer aufschieben kann. Der Browser benötigt den richtigen Mailto-Link, um beim Absenden des Formulars das Richtige zu tun, sodass der Benutzer möglicherweise die ungetrübte Adresse sieht.

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

Dies ist für einen Mailto-Link nicht möglich. Es gibt jedoch Dienste wie MailThis , Formspree , mit denen Sie ein Formular erstellen können, das auf ihrem Server veröffentlicht und konvertiert wird das, um eine E-Mail zu senden. MailDies können Sie auch einen Aliasnamen erstellen, damit Sie Ihre echte E-Mail-Adresse nicht auf der HTML-Seite selbst anzeigen.

1
Lie Ryan