web-dev-qa-db-ja.com

HTMLソースコードを非表示にして効果を維持する方法はありますか?

(PHPのようなHTMLコンストラクターの出力としてではなく)手動で作成されたクライアント側のHTML連絡先フォームを備えたWebサイトがあります。

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

それを隠したいmailto:[email protected]これを含むすべてのHTMLソースコードから。ユーザーがソースコード内で直接電子メールアドレスを見つけることができないようにします。
このように、通常、私にメールを送信して返信を得た顧客のみがメールアドレスを知っています(ユーザーが非表示の操作を元に戻さない限り)。

HTMLソースコードを非表示にする方法はありますか?

更新

すべての回答を冷静に読むことから、私の質問は誤った仮定を持っていたようです:mailtoは常に最終的にユーザーのメールクライアントのポップアップにメールを表示する(そしてその前のプレビューの前にも)ブラウザ画面ポートの左下のエッジ);ソースコードの難読化を示唆する応答と冗長な私の意見のような文章の組み合わせの認知バイアスが質問は概念的なレベルでも意味をなさない;編集で削除しようとしました(これは部分的に承認されましたが、残念ながら)。私は、ソースコードをどのように難読化するかに関係なく、何をするにしても理解しました。私がmailtoに入れた電子メールは、ブラウザに適用されたユーザーの電子メールクライアントに常に最終的に表示されます(存在する場合-存在しない場合、電子メール送信効果はありません)。

23
user123574

できません。この質問は、概念的なレベルでは意味がありません。 mailto:リンクは、エンドユーザーがメールを送信できるエンドユーザーと通信するための便利な方法です。 mailtoリンクが機能する場合、エンドユーザーは定義により電子メールの送信先を認識します。エンドユーザーが定義によりリンクがどこにあるかを認識しますクリックしていきます。

解決しようとしている問題を自問する必要があります。受信者の名前を非表示にしたい場合は、メールサーバーに隠されたメールアドレスまたは一時的なメールアドレスを作成し、URL短縮サービスを使用してメールを実際の受信者に転送する方法と同様に、URL短縮ツールを使用してこれを隠すことができます。 actualリンクの宛先ですが、ユーザーはalwaysに自分の電子メールアドレスを表示しますsendingがそれが電子メールのしくみであるためです。

56
Cubic

HTMLを非表示にすることはできず、ブラウザがHTMLを解釈できることを期待できます。サイトのすべての部分を表示するには、ブラウザがHTMLに完全にアクセスできる必要があります。ブラウザがアクセスできるようになるとすぐに、ユーザーもアクセスできるようになります。

さらに、JavaScriptはサイトのコンテンツを "非表示"にすることもできず、まったく同じ理由でブラウザー、つまりエンドユーザーがアクセスできるようにすることもできます。

130
MechMK1

まあ、私見ユーザーがメールアドレスを知るのを防ぐ唯一の信頼できる方法は、クライアント側ではなくサーバー側にメールを送信することです。別の言い方をすると、クライアントは自分のメールアドレスとテキストのみを提供し、フォームによってサーバーにアップロードされ、受信者アドレスを知っている唯一の部分であるサーバーアプリケーションによってメールが送信されます。

これは、ユーザーが内部アドレスを直接使用できないようにするためにヘルプセンターで一般的に使用されます。

101
Serge Ballesta

できません。また、Javascriptもできません。 3つのオプションがあり、それらはすべてバックエンド言語に依存しています。 2つのオプションがあります。1つは正しい方法で、もう1つはサーバーがない場合は2つの方法です。

正しい方法:サーバーにフォームを送信すると、サーバーがこの電子メールをSMTP経由で処理します。

大丈夫な方法:サーバーサイドで処理できる別のドメインまたはAPIに送信します。

クレイジーな方法:独自のカスタムURLプロトコルに登録されたデスクトップアプリケーションを作成し、パラメーターにフォームの本文を含めます。コンシューマーはこのデスクトップアプリケーションをインストールし、電子メールクライアントを開くのではなく、SMTP経由でこの電子メールをサイレントに処理します。宛先メールは、そのアプリケーション内でハードコード化でき、逆コンパイルまたはメモリダンプを行わない限り、取得できません。 「mailto:email.com」の代わりに「custom-mail:」になり、メールが削除されます。

これが「mailto」です。 OSに登録されているプロトコルです。ただし、クライアントと「mailto」に依存している場合は、何をしてもかまいません。クライアントが開く2番目に表示されるため、ここでは何も解決していません。

15
The Anathema

次のように、HTMLエンコードできます。

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

しかし、それは本当にそれを難読化するだけです。誰でもこれをデコードできます。

本当に非表示にしたい場合は、サーバー側の機能(PHP)が必要です。ここでは、フォームがサーバーに送信され、サーバーからメールで送信されます。

11
Sjoerd

TL; DR:いいえ。

私があなたの問題を正しく理解しているなら、あなたは電子メールアドレスをユーザーから隠すのではなく、ソースコードを解析してスパム用の電子メールアドレスを収集するボットから隠したくないでしょう。

確かに、JavaScriptには、この問題を実質的にゼロにする簡単な方法がいくつかあります。スパマーが行うことのないスクリプトの実行が必要だからです。

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

その後:

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

プレーンHTMLでは、これを行う方法はありません。ただし、愚かなパーサーの攻撃対象を少なくする可能性がいくつかあります。非常にキャッチーなアットマークは、HTMLエンティティ&at;または&#64;として表現できるため、@のみを検索するパーサーはそれらを見つけることができません。これらのHTMLエンティティは、hrefなどの属性値でも許可されます。

7
rexkogitans

あなたがしようとしていることを達成するには、フォームで使用するGmailアドレスまたは転送アドレスを取得します。これは、実際のメールアドレスを秘密に保つという目的に役立ちます。

6
Lort Fasd

ブラウザからHTMLを非表示にすることはできません。 HTMLはクライアント側のマークアップ言語です。つまり、HTMLはクライアント側のブラウザによって読み込まれるため、ブラウザはそれを解釈できる必要があります。

誰かがほのめかしたように、あなたはあなたがそれをしている方法で達成しようとしていることを達成することができません。必要に応じて要素をエンコード/デコードすることで、近いものを実現できる可能性がありますが、あいまいさによるセキュリティは推奨される戦略ではなく、誰でも簡単にエンコードされた文字列をデコードできます。

4
Justin

別の答え。

はい、あります。 https://samy.pl/ のソースを試して表示してください。見つけるのはほとんど不可能ですが、それを見つけるにはかなり熱心である必要がありますが、Webサイトは正常に機能します。

しかし、もっと真剣にコードはまだ見えています。どこを見ればいいのか考えているユーザーでさえ、ほとんどのユーザーには届きません。

HTML/JSはすべてクライアント側で実行されるため、クライアントに渡して処理しないようにすることは不可能です。

実際に非表示にしたい部分は、クライアントブラウザーで実際にトリガーされます。mailtoリンクは、コンピューターにメールクライアントを開いてフォームに事前に入力するように指示するリンクです。そのため、Samyが行った操作を行った場合でも、リンクをクリックするとメールクライアントが開き、エンドユーザーにメールアドレスが表示されます。

秘密にしたい場合は、サーバー側にメールを送信する必要があります

3
exussum

他の人が言ったように、HTMLを非表示にすることはできません。ただし、HTMLを特に非表示にする必要はないようですが、フォームの受信者がコードに表示されないようにするだけで、フレームワークに応じて簡単です。

たとえば、PHPを使用している場合、 PHP Mailer はメールを送信するための非常に簡単な方法であり、PHPはサーバー側で処理されるため、フォームが送信されるとあなたもそれらを望まない場合、ユーザーはあなたのメールアドレスを見ることはありません。

ASP.NETなどを使用している場合、環境の名前を入力してお気に入りの検索エンジンにメールを送信するだけで、メールを送信する方法に関する多くのオプションが表示され、フォームと組み合わせてそれを実行できます。サーバ側。

2
aslum

TL; DR:いいえ、HTMLソースコードを非表示にすることはできません。サーバー側のコードを使用しない限り、電子メールアドレスを難読化してスパマーを遅らせることができます。

HTMLエンティティ(&#x6d;)またはJavaScript、HTMLの代わりにXHTMLを使用する場合は、難読化のために[〜#〜] xslt [〜#〜]を使用することもできます。

XSLTは、あらゆるXMLを別の形式(XML、HTML、プレーンテキストなど)に変換できるすべての主要なブラウザーでサポートされているXMLベースのプログラミング言語です。 1つのアプリケーションは、マジックパーツを含むaction属性を除くほとんどのドキュメントを通過させることです。 +rot13

1つの利点は、これがJavaScriptが無効になっているブラウザーでも機能することです。注意点の1つは、XHTMLを記述する必要があることです。そのため、寛大なHTMLパーサーブラウザーの代わりに、厳密なXMLパーサーを使用すると、構文エラーごとにエラーメッセージが表示されます。

また、すべてのHTML難読化手法はスパマーを遅延させることしかできないことに注意してください。ブラウザは、フォームを送信するときに正しいことを行うために正しいmailtoリンクを必要とするため、最終的にユーザーには難読化されていないアドレスが表示されます。

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(., ':'),'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz@$6789012345', 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm$@1234567890')" /></xsl:attribute>
</xsl:template>

</xsl:stylesheet>
1
cg909

これはmailtoリンクでは実行できませんが、 MailThisFormspree のようなサービスがあり、サーバーに投稿するフォームを作成することができ、変換されますメールを送信します。 MailThisでは、エイリアス名を作成して、HTMLページ自体に実際のメールアドレスを公開しないようにすることもできます。

1
Lie Ryan