<?xml version="1.0" encoding="utf-8"?>
<!-- name="GENERATOR" content="github.com/mmarkdown/mmark Mmark Markdown Processor - mmark.miek.nl" -->
<rfc version="3" ipr="trust200902" docName="draft-davids-forsalereg-21" submissionType="IETF" category="info" xml:lang="en" xmlns:xi="http://www.w3.org/2001/XInclude" indexInclude="true" tocDepth="3">

<front>
<title abbrev="_for-sale DNS Node Name">The "_for-sale" Underscored and Globally Scoped DNS Node Name</title><seriesInfo value="draft-davids-forsalereg-21" stream="IETF" status="informational" name="Internet-Draft"></seriesInfo>
<author initials="M." surname="Davids" fullname="Marco Davids"><organization abbrev="SIDN Labs">SIDN Labs</organization><address><postal><street>Meander 501</street>
<city>Arnhem</city>
<code>6825 MD</code>
<country>Netherlands</country>
</postal><phone>+31 26 352 5500</phone>
<email>marco.davids@sidn.nl</email>
</address></author><date/>
<area>Operations and Management</area>
<workgroup></workgroup>

<abstract>
<t>This document defines an operational convention that uses the reserved
underscored DNS leaf node name &quot;_for-sale&quot; to indicate the
parent domain name is available for purchase.</t>
<t>The convention can be
deployed without disrupting existing operations, and it may be
applied even when the domain name is still actively in use.</t>
</abstract>

<note removeInRFC="true"><name>About This Document</name>
<t>This note is to be removed before publishing as an RFC.</t>
<t>This document contains a &quot;Note to the RFC Editor&quot; requesting removal
of <xref target="implementation"></xref> prior to publication. Please also review the Status of
This Memo section and other relevant parts before publication,
particularly <xref target="ianaconsid"></xref>.</t>
</note>

</front>

<middle>

<section anchor="introsect"><name>Introduction</name>
<t>Well-established services <xref target="RFC3912"></xref><xref target="RFC9083"></xref> exist for determining whether a
DNS domain name is registered. However, the existence of a domain name does not necessarily
imply that it cannot be obtained; it may still be available for sale.</t>
<t>Some registrars and other parties offer brokerage services between domain name holders and interested buyers.
Such services are of limited value when the domain name is not available for purchase, but they may be
beneficial for domain names that are explicitly marked as for sale.</t>
<t>This document defines a simple method to explicitly signal that a
domain name, although registered, is available for purchase. It enables a domain name holder to
add a reserved underscored leaf node name <xref target="RFC8552"></xref> in the zone, indicating that the
domain name is for sale. The indicator can be turned on and off at will and, moreover,
it is immediately deployable and does not require significant changes in existing
services, allowing for a smooth introduction of the concept.</t>
<t>The TXT RR type <xref target="RFC1035"></xref> created for this purpose must follow the formal definition of
<xref target="conventions"></xref>. Its content may contain a pointer, such as a Uniform Resource Identifier (URI)
<xref target="RFC3986"></xref>, an Internationalized Resource Identifier (IRI) <xref target="RFC3987"></xref> or another string,
allowing interested parties to obtain information or contact the domain name holder for further negotiations.
Details about whether and how such negotiations occur are out of scope.</t>
<t>With due caution, such information can also be incorporated into automated availability services.
When checking a domain name for purchasability, the service may indicate whether it is for
sale and provide a pointer to the seller's information.</t>
<t>The TXT content defined by this document is intended primarily for human-readable informational display,
rather than for algorithmic string comparison or automated processing.</t>
<t>The operational convention described in this document does not require any protocol change.</t>
<t>Examples are provided in <xref target="examples"></xref>.</t>

<section anchor="terminology"><name>Terminology</name>
<t>The key words &quot;<bcp14>MUST</bcp14>&quot;, &quot;<bcp14>MUST NOT</bcp14>&quot;, &quot;<bcp14>REQUIRED</bcp14>&quot;, &quot;<bcp14>SHALL</bcp14>&quot;, &quot;<bcp14>SHALL NOT</bcp14>&quot;,
&quot;<bcp14>SHOULD</bcp14>&quot;, &quot;<bcp14>SHOULD NOT</bcp14>&quot;, &quot;<bcp14>RECOMMENDED</bcp14>&quot;, &quot;<bcp14>NOT RECOMMENDED</bcp14>&quot;, &quot;<bcp14>MAY</bcp14>&quot;, and
&quot;<bcp14>OPTIONAL</bcp14>&quot; in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"></xref> <xref target="RFC8174"></xref>
when, and only when, they appear in all capitals, as shown here.</t>
<t>Although the document defines an operational convention rather than a protocol extension, normative language is used
to promote consistent and unambiguous behaviours among entities that adopt the convention.</t>
<t>The term &quot;processor&quot; refers to an entity (person, system, or service)
that reads, interprets, and takes appropriate actions based on &quot;_for-sale&quot; DNS labels,
whether manually or automatically.</t>
<t>The term &quot;for sale&quot; is used in a broad sense and may also refer to cases
where the domain name is available for lease, or where the contractual right to
use the domain name is offered to another party.</t>
<t>DNS terminology in this document follows <xref target="RFC9499"></xref>.</t>
</section>
</section>

<section anchor="conventions"><name>Conventions</name>

<section anchor="abnf"><name>General Record Format</name>
<t>Each &quot;_for-sale&quot; TXT record <bcp14>MUST</bcp14> begin with a version tag, optionally followed by a string containing content that follows a simple &quot;tag=value&quot; syntax.</t>
<t>The formal definition of the record format, using ABNF <xref target="RFC5234"></xref><xref target="RFC7405"></xref>, is as follows:</t>

<artwork><![CDATA[forsale-record  = forsale-version [forsale-content]
                  ; referred to as 'content' or RDATA
                  ; in a single character-string

forsale-version = %s"v=FORSALE1;"
                  ; %x76.3D.46.4F.52.53.41.4C.45.31.3B
                  ; version tag, case-sensitive, no spaces

forsale-content = fcod-pair / ftxt-pair / furi-pair / fval-pair
                  ; referred to as 'tag-value pairs'
                  ; only one tag-value pair per record

fcod-pair       = fcod-tag fcod-value
ftxt-pair       = ftxt-tag ftxt-value
furi-pair       = furi-tag furi-value
fval-pair       = fval-tag fval-value
                  ; the tags are referred to as 'content tags'
                  ; the values are referred to as 'content values'

fcod-tag        = %s"fcod="
ftxt-tag        = %s"ftxt="
furi-tag        = %s"furi="
fval-tag        = %s"fval="
                  ; all content tags case-sensitive lowercase

fcod-value      = 1*239OCTET

ftxt-value      = 1*239OCTET

furi-value      = URI / IRI
                  ; 'http', 'https', 'mailto' and 'tel' URI schemes
                  ; exactly one URI or IRI

URI             = <as defined in RFC3986, Appendix A>
IRI		= <as defined in RFC3987, Section 2.2>

fval-value      = fval-currency fval-amount
                  ; total length: 2 to 239 characters 
fval-currency   = 1*%x41-5A
                  ; one or more uppercase letters (A-Z)
                  ; indicating (crypto)currency
                  ; e.g., USD, EUR, BTC, ETH
                  ; standard three-letter fiat currencies recommended
fval-amount     = int-part [ %x2E frac-part ]
                  ; integer part with optional fractional part
                  ; e.g., 0.00010
int-part        = 1*DIGIT
frac-part       = 1*DIGIT
]]></artwork>
<t>See <xref target="tagdefs"></xref> for more detailed format definitions per content tag type.</t>
<t>Each &quot;_for-sale&quot; TXT record <bcp14>MUST NOT</bcp14> contain more than one tag-value
pair, but multiple TXT records <bcp14>MAY</bcp14> be present in a single RRset.</t>
<t>Every tag-value pair in the RRset <bcp14>MUST</bcp14> be unique, but multiple
instances of the same content tag <bcp14>MAY</bcp14> occur within a single RRset
(e.g., two &quot;fcod=&quot; content tags, each with a different content value).</t>
<t>See <xref target="rrsetlimits"></xref> for additional RRset limitations.</t>
<t>The <bcp14>OPTIONAL</bcp14> forsale-content provides information to interested parties as explained
in <xref target="introsect"></xref>.</t>
<t>If the forsale-content is absent or invalid, but a valid version tag
is present, processors <bcp14>SHOULD</bcp14> assume that the domain is for sale unless a local
policy indicates otherwise. For example:</t>

<artwork><![CDATA[_for-sale.example.com. IN TXT "v=FORSALE1;"
_for-sale.example.com. IN TXT "v=FORSALE1;fcod="
_for-sale.example.com. IN TXT "v=FORSALE1;foo=bar"
]]></artwork>
<t>In such cases, processors determine how to proceed.
An approach might be to signal that the domain is for sale and
to rely on conventional mechanisms (e.g., WHOIS or Registration Data Access
Protocol (RDAP)) to retrieve and present contact information.</t>
<t>TXT records in the same RRset that lack a version tag <bcp14>MUST NOT</bcp14> be interpreted as a valid &quot;_for-sale&quot; indicator.
However, they may still offer some additional information for humans when considered alongside a valid
record. For example:</t>

<artwork><![CDATA[_for-sale.example.com. IN TXT "I am for sale"
_for-sale.example.com. IN TXT "v=FORSALE1;fcod=XX-NGYyYjEyZWY"
]]></artwork>
<t>If no TXT records at a &quot;_for-sale&quot; leaf node name contain a valid version tag, processors
<bcp14>MUST</bcp14> consider the node name invalid and <bcp14>MUST</bcp14> ignore it.</t>
<t>See <xref target="contentlimits"></xref> for additional content limitations.</t>
</section>

<section anchor="tagdefs"><name>Content Tag Type Definitions</name>
<t>The following content tags are defined as valid content tags.</t>
<t>Content tags are optional. Providing at least one to give interested parties a pointer
for engagement is <bcp14>RECOMMENDED</bcp14>.</t>

<section anchor="fcoddef"><name>fcod</name>
<t>This content tag is intended to contain a code that is meaningful only to processors
that understand its semantics. The content value <bcp14>MUST</bcp14> consist of at least one octet.</t>
<t>The manner in which the &quot;fcod=&quot; content tag is used is determined by agreement
between cooperating parties.</t>
<t>For example, a domain name registry may allow registrars to enter a &quot;for sale&quot; URL into their
back-end system. From that URL, a unique code is generated. This code is inserted as the value of
the &quot;fcod=&quot; content tag of the &quot;_for-sale&quot; TXT record of a domain name, as shown in the example below.</t>
<t>When a user checks the availability of the domain name using a registry-provided tool
(e.g., a web interface), the domain name registry may use the code to redirect the user to the
appropriate &quot;for sale&quot; URL, which may include a query component containing the domain name, for example:</t>

<artwork><![CDATA[https://forsale-url.example.com/exco?d=example.org
]]></artwork>
<t>The rationale for this approach is that controlling parties retain
authority over redirection URLs and any other information derived
from the content tag, thereby preventing users from being sent
to unintended or malicious destinations or from being presented
with unintended content. This approach also allows the interpretation
of &quot;fcod=&quot; content values to be adjusted centrally in back-end systems,
such as determining which &quot;for sale&quot; URL to redirect to, without
modifying the &quot;_for-sale&quot; TXT records.</t>
<t>The following example shows a string encoded using Base64 <xref target="RFC4648"></xref>
preceded by the prefix &quot;EXCO-&quot; as the value of the content tag:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;fcod=EXCO-S2lscm95IHdhcyBoZXJl"
]]></artwork>
<t>See the <xref target="examples" format="title"></xref> section for other possible uses of this
content tag.</t>
<t>Note: As an implementation consideration, when multiple parties are involved in
the domain sale process and use the same mechanism, it may be difficult to identify
the relevant content in an RRset. Adding a recognisable prefix to the content (e.g.,
&quot;EXCO-&quot;) is one possible approach. However, this is left to the implementor,
as it is not enforced in this document. In this case, Example
Corporation (ExCo)  would recognise its content tag and interpret it as intended. This example uses Base64 encoding
to avoid escaping and ensure printable characters, though this is
<bcp14>OPTIONAL</bcp14> and not required.</t>
</section>

<section anchor="ftxt"><name>ftxt</name>
<t>This content tag is intended to contain concise, human-readable text that conveys additional information to interested parties. For example:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;ftxt=Call for info."
]]></artwork>
<t>While a single octet is the minimum, it is <bcp14>RECOMMENDED</bcp14> to provide more context.</t>
<t>While a URI in this field is not syntactically prohibited, its
interpretation as a URI is not guaranteed. Use of URIs in this
field <bcp14>SHOULD</bcp14> be avoided in favour of the &quot;furi=&quot; content tag.</t>
<t>See <xref target="fvalpar"></xref> for a way to explicitly indicate an asking price for easier machine parsing.</t>
<t>See <xref target="handlerdata"></xref> for considerations regarding the representation of non-ASCII data in the content value.</t>
</section>

<section anchor="furipar"><name>furi</name>
<t>This content tag is intended to contain a human-readable and machine-parsable URI that can be used by interested parties to retrieve further information.</t>
<t>While the syntax allows any URI scheme, only the following schemes are <bcp14>RECOMMENDED</bcp14>
for use: '<tt>http</tt>' and '<tt>https</tt>' <xref target="RFC9110"></xref>, '<tt>mailto</tt>' <xref target="RFC6068"></xref><xref target="RFC6530" sectionFormat="parens" section="11.1"></xref>, and
'<tt>tel</tt>' <xref target="RFC3966"></xref>.</t>
<t>The content value <bcp14>MUST</bcp14> contain exactly one URI. For example:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;furi=https://example.com/foo%20bar"
]]></artwork>
<t>URIs <bcp14>MUST</bcp14> conform to the syntax and encoding requirements specified in
<xref target="RFC3986" sectionFormat="of" section="2.1"></xref>, including the percent-encoding of characters
not allowed unencoded (e.g., spaces must be encoded as <tt>%20</tt> in a URI).</t>
<t><xref target="handlerdata"></xref> provides additional guidelines on character encoding.</t>
<t>See the <xref target="security" format="title"></xref> section for possible risks.</t>
<t>Note: References to a URI in this document also encompass IRIs <xref target="RFC3987"></xref>.</t>
</section>

<section anchor="fvalpar"><name>fval</name>
<t>This content tag is intended to contain human-readable and machine-parsable
text that explicitly indicates an asking price in a certain currency.</t>
<t>Price information is commonly published by domain sellers. The
&quot;fval=&quot; content tag provides a structured format for this purpose, enabling
reliable machine parsing and reducing ambiguity compared to
embedding prices in free-form &quot;ftxt=&quot; content tags. For example:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;fval=EUR999"
]]></artwork>
<t>The information provided in &quot;fval=&quot; is not binding and is intended for indicative purposes only.
Current and reliable information can be obtained by engaging directly via
&quot;furi=&quot; or other available communication mechanisms.</t>
<t>See <xref target="currency"></xref> for additional operational guidelines and the <xref target="security" format="title"></xref>
section for possible risks.</t>
</section>

<section anchor="future-tags"><name>Future Tags</name>
<t>Future tags may be defined to accommodate operational needs. Future content
tags <bcp14>MUST NOT</bcp14> alter the semantics of existing content tags.</t>
<t>A tag name length of 4 characters is <bcp14>RECOMMENDED</bcp14> for consistency with the initial tag
set and to maintain compact record formats.</t>
</section>
</section>

<section anchor="contentlimits"><name>Content Limitations</name>
<t>The &quot;_for-sale&quot; TXT record <xref target="RFC8553" sectionFormat="parens" section="2.1"></xref> <bcp14>MUST</bcp14> contain content deemed valid under the operational convention defined in this document.</t>
<t>The &quot;_for-sale&quot; indicator is only to be used for domain names that are available for purchase. Any text suggesting
that a domain is not for sale is invalid content. When a domain name is no longer for sale, the
&quot;_for-sale&quot; indicator is to be removed.</t>
<t>The existence of a &quot;_for-sale&quot; leaf node name does not obligate the holder to sell the domain name;
it may have been published in error, or withdrawn later for other reasons.</t>
<t>This document does not dictate the exact use of any content values in the &quot;_for-sale&quot; TXT record.
Parties may use it in their tools, perhaps even by defining specific requirements that the content
value must meet. Content values can also be represented in a human-readable format for individuals to
interpret. See the <xref target="examples" format="title"></xref> section for clarification.</t>
<t>See <xref target="operationalcons"></xref> for additional guidelines.</t>
</section>

<section anchor="rrsetlimits"><name>RRset Limitations</name>
<t>This document does not impose a limit on the number of TXT records in the
RRset of &quot;_for-sale&quot; TXT records.</t>
<t>When multiple &quot;_for-sale&quot; TXT records are present in an RRset, the
processor <bcp14>MAY</bcp14> select one or more of them.</t>
<t>For example, a domain name registry might extract content from an RRset that includes
a recognisable &quot;fcod=&quot; content tag and use it to direct visitors to a sales page as
part of its services. An individual, on the other hand, might extract a
phone number (if present) from a &quot;furi=&quot; tag in the same RRset and use it to contact a potential seller.</t>
<t>An example of such a combined record is provided in <xref target="combiexample"></xref>.</t>
<t>The RDATA <xref target="RFC9499"></xref> of each &quot;_for-sale&quot; TXT record <bcp14>MUST</bcp14> consist of a single character-string
<xref target="RFC1035"></xref> with a maximum length of 255 octets, to avoid the need to concatenate multiple
character-strings during processing.</t>
<t>The following example illustrates an invalid &quot;_for-sale&quot; TXT record due to the presence of multiple
character-strings:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;" "ftxt=foo" "bar" "invalid"
]]></artwork>
</section>

<section anchor="wildcard-limitation"><name>Wildcard Limitation</name>
<t>Wildcards are only interpreted as leaf names, so &quot;_for-sale.*.example.&quot; is not a valid wildcard
<xref target="RFC4592"></xref> and is non-conformant. Hence, it is not possible to put all domains under a TLD for
sale with just one &quot;_for-sale&quot; TXT record.</t>
<t>The example below, however, shows a common use case where a &quot;_for-sale&quot; leaf node name exists alongside a wildcard:</t>

<artwork><![CDATA[*         IN A    198.51.100.80
          IN AAAA 2001:db8::80
_for-sale IN TXT  "v=FORSALE1;ftxt=Only $99 at ExCo"
]]></artwork>
</section>

<section anchor="placement-of-the-leaf-node-name"><name>Placement of the Leaf Node Name</name>
<t>The &quot;_for-sale&quot; leaf node name can be placed at any level of
the DNS except in the .arpa infrastructure TLD.</t>
<t><xref target="placements"></xref> illustrates this:</t>
<table anchor="placements"><name>Placements of TXT record </name>
<thead>
<tr>
<th>Name</th>
<th>Situation</th>
<th>Verdict</th>
</tr>
</thead>

<tbody>
<tr>
<td>_for-sale.example.</td>
<td>root zone</td>
<td>For sale</td>
</tr>

<tr>
<td>_for-sale.aaa.example.</td>
<td>second level</td>
<td>For sale</td>
</tr>

<tr>
<td>_for-sale.exco.bbb.example.</td>
<td>third level with public registry</td>
<td>For sale</td>
</tr>

<tr>
<td>_for-sale.www.ccc.example.</td>
<td>third level without public registry</td>
<td>See note 1</td>
</tr>

<tr>
<td>_for-sale.51.198.in-addr.arpa.</td>
<td>infrastructure TLD</td>
<td>See note 2</td>
</tr>

<tr>
<td>xyz._for-sale.example.</td>
<td>Invalid placement, not a leaf</td>
<td>Non-conformant</td>
</tr>
</tbody>
</table><t>Note 1:
When the &quot;_for-sale&quot; leaf node name is applied to a label under a subdomain,
there may not be a public domain name registry <xref target="RFC9499"></xref> capable of properly recording the rights associated with that label.
Nevertheless, this does not constitute a violation of this document.
One possible approach is for the involved parties to establish a mutual agreement to
formalise these rights.</t>
<t>Note 2:
If a &quot;_for-sale&quot; leaf node name were to appear under the .arpa infrastructure top-level
domain, it might be interpreted as an offer to sell IP address space, E.164
numbers or the like. However, such use is explicitly out of scope for this document, and processors
<bcp14>MUST</bcp14> ignore any such records.</t>
<t>The operational convention in this document is designed for the global DNS. Application to
Special-Use Domain Names <xref target="RFC6761"></xref> (e.g., .onion, .alt) is out of scope.</t>
</section>
</section>

<section anchor="operationalcons"><name>Operational Considerations</name>

<section anchor="dns-wildcards"><name>DNS Wildcards</name>
<t>DNS wildcards interact poorly with underscored names <xref target="RFC8552" sectionFormat="parens" section="1.4"></xref>,
but they may still be encountered in practice, especially with operators who
are not implementing this mechanism. This is why the version
tag is a mandatory element: it allows processors to distinguish
valid &quot;_for-sale&quot; records from unrelated TXT records.</t>
<t>Nonetheless, any assumptions about the content of &quot;_for-sale&quot; TXT
records should be made with caution, particularly in edge
cases where wildcard expansion - possibly combined with DNS aliases
(e.g., CNAMEs) or redirections (e.g., DNAMEs <xref target="RFC6672"></xref>) - might
result in misleading listings or unintended references to third-party domains.</t>
</section>

<section anchor="handlerdata"><name>Handling of RDATA</name>
<t>Since this method relies on DNS TXT records, standard content rules apply as
defined in <xref target="RFC1035" sectionFormat="parens" section="3.3.14"></xref>. This includes the possibility of
including non-ASCII data in the content value.</t>
<t>When non-ASCII data is used, interpretation may become ambiguous. For this reason,
it is <bcp14>RECOMMENDED</bcp14> that text in content values be encoded in UTF-8 <xref target="RFC3629"></xref>,
conform to the Network Unicode format <xref target="RFC5198"></xref>, and use a subset of Unicode
code points consistent with <xref target="RFC9839" sectionFormat="parens" section="4.3"></xref>, with the exception
of <tt>%x09</tt>, <tt>%x0A</tt>, and <tt>%x0D</tt>, which are best avoided.</t>
<t>Processors are <bcp14>RECOMMENDED</bcp14> to handle such encodings to ensure that non-ASCII
content values are correctly interpreted and represented.</t>
<t>Internationalized Domain Names (IDN) (e.g., in the &quot;furi=&quot; content tag) <bcp14>MAY</bcp14>
appear as A-labels as well as U-labels <xref target="RFC5890"></xref>, with U-labels encoded as described above.</t>
<t>Implementation Note: Some DNS query tools return DNS records in presentation format, rather than the underlying
RDATA content. Parsers of the ABNF in this document <bcp14>MUST</bcp14> ensure they operate on the raw
TXT RDATA content, not its escaped presentation format <xref target="RFC1035" sectionFormat="parens" section="5.1"></xref>.
If the TXT RDATA consists of multiple character-strings,
they <bcp14>SHOULD</bcp14> be concatenated into a single contiguous string prior to being interpreted
as a UTF-8 encoded value matching the ABNF.</t>
<t>See <xref target="robustness"></xref> for additional guidelines and the <xref target="security" format="title"></xref>
section for possible risks.</t>
</section>

<section anchor="currency"><name>Currency</name>
<t>The ABNF in <xref target="abnf"></xref> allows currency codes consisting of one or
more uppercase letters, providing flexibility to
accommodate both standard fiat currencies and other widely
recognised abbreviations, such as cryptocurrencies.</t>
<t>The use of standard fiat currencies is <bcp14>RECOMMENDED</bcp14>. When used,
they <bcp14>MUST</bcp14> be represented by three-letter uppercase currency
codes as specified in <xref target="ISO4217"></xref> (e.g., USD, EUR, GBP and JPY).</t>
<t>The amount component consists of an integer part, optionally
followed by a fractional part separated by a decimal point (<tt>%x2E</tt>, &quot;.&quot;).</t>
</section>

<section anchor="ttls"><name>TTLs</name>
<t>Long TTLs <xref target="RFC1035" sectionFormat="parens" section="3.2.1"></xref> increase the risk of outdated
data misleading buyers into thinking the domain is still available
or that advertised prices remain current.</t>
<t>A TTL of 3600 seconds (1 hour) or less is <bcp14>RECOMMENDED</bcp14> and the TTL values
of all records in an RRset have to be the same <xref target="RFC2181" sectionFormat="parens" section="5.2"></xref>.</t>
</section>

<section anchor="ambiguous-constructs"><name>Ambiguous Constructs</name>
<t>Ambiguous constructs in content values <bcp14>SHOULD</bcp14> be avoided, as illustrated by the following
example:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;fcod=TRIP-confusing;ftxt=dont_do_this"
]]></artwork>
<t>The above example is a valid &quot;fcod=&quot; content tag that includes the
string &quot;;ftxt=&quot; in the content value, which may be confusing,
as it does not actually represent an &quot;ftxt=&quot; content tag.</t>
</section>

<section anchor="robustness"><name>Robustness</name>
<t>Because the format of the content part is not strictly defined in this
document, processors <bcp14>MAY</bcp14> apply the robustness principle of being
liberal in what they accept. This also applies to space
characters (<tt>%x20</tt>) immediately following the version tag.</t>
<t>Alternatively, parties may agree on a more strictly defined proprietary format
for the content value to reduce ambiguity. However, it is out of scope to discuss
which mechanisms are put in place for such agreements.</t>
<t>When encountering unexpected, or prohibited control characters in &quot;ftxt=&quot; content
(e.g., <tt>%x09</tt>, <tt>%x0A</tt>, <tt>%x0B</tt>, <tt>%x0D</tt>, see <xref target="handlerdata"></xref>), processors
<bcp14>MAY</bcp14> sanitise them by replacing them with spaces (<tt>%x20</tt>) to ensure
correct representation, or replacing them with the Unicode REPLACEMENT CHARACTER U+FFFD
(<tt>%xEF.BF.BD</tt>) to signal the presence of problematic content.</t>
</section>

<section anchor="scope-of-application"><name>Scope of Application</name>
<t>The &quot;_for-sale&quot; mechanism  relies upon the domain name being resolvable in the DNS.
This is not guaranteed, for example, during a redemption period, in
pendingDelete status <xref target="STD69"></xref>, or when the domain is DNSSEC-signed but fails
validation (i.e., has a bogus state).</t>
</section>
</section>

<section anchor="security"><name>Security Considerations</name>
<t>One use of the TXT record type defined in this document is to parse the content
it contains and to publish certain information from it on a
website or elsewhere. However, there is a risk if the domain name holder
publishes a malicious URI or one that points to improper content.
This may result in reputational damage to the party parsing the record.</t>
<t>An even more serious scenario arises when the content of the TXT record is not
properly validated and sanitised, potentially enabling attacks such as XSS or SQL
injection, as well as spoofing techniques based on Unicode manipulation,
including bidirectional text attacks and homograph attacks.</t>
<t>Therefore, parsing and publishing this information requires careful validation to
ensure that only valid characters and formats are processed. Possible mitigation strategies
include output sanitisation, maintaining a curated and validated list of URIs,
or applying other validation methods, such as URI reputation checks before display.</t>
<t>Automatically following URIs from &quot;_for-sale&quot; records without user
consent creates security risks, including exposure to malware,
phishing pages, and scripted attacks. Processors <bcp14>MUST NOT</bcp14> automatically
redirect users when encountering &quot;furi=&quot; content tags without requiring
explicit confirmation before navigation. This allows users to inspect
the destination before proceeding.</t>
<t>Some URI schemes <bcp14>RECOMMENDED</bcp14> in <xref target="furipar"></xref> do not mandate transport security
(e.g., '<tt>http</tt>', '<tt>mailto</tt>'); therefore, more secure schemes such as
'<tt>https</tt>' are preferred.</t>
<t>There is also a risk that this method will be abused as a marketing tool, or to lure individuals into visiting certain sites or making contact by other
means, without there being any intention to actually sell the domain name.</t>
<t>Domain name holders may advertise artificially low prices and processors that present
&quot;fval=&quot; data to users <bcp14>SHOULD</bcp14> display appropriate disclaimers (e.g., &quot;Price
indicative only - verify with seller&quot;).  Automated systems <bcp14>SHOULD NOT</bcp14>
make purchase commitments based solely on advertised prices without human verification.</t>
</section>

<section anchor="privacy"><name>Privacy Considerations</name>
<t>The use of the &quot;_for-sale&quot; leaf node name publicly indicates the intent to sell a domain name.
Domain name holders should be aware that this information is accessible to anyone querying the
DNS and may have privacy implications.</t>
<t>There is a risk of data scraping, such as email addresses and phone numbers.</t>
<t>Publishing contact information may expose domain name holders to spam, or unwanted contact.</t>
</section>

<section anchor="implementation"><name>Implementation Status</name>
<t>The concept described in this document has been in use at the .nl ccTLD registry since 2022,
when it initially started as a pilot. Since then, hundreds of thousands of domain names have
been marked with the &quot;_for-sale&quot; indicator. See for example:</t>

<artwork><![CDATA[https://www.sidn.nl/en/whois?q=example.nl
]]></artwork>
<t>The Dutch domain name registry SIDN offers registrars the option to register a sales
landing page via its registrar dashboard following the &quot;fcod=&quot; method.
When this option is used, a unique code is generated, which can be included in the &quot;_for-sale&quot; record.
If such a domain name is entered on the domain finder page of SIDN, a &quot;for sale&quot;
button is displayed accordingly.</t>
<t>A simple demonstration of a validator is present at:</t>

<artwork><![CDATA[https://forsalereg.sidnlabs.nl/demo
]]></artwork>
<t>&lt;NOTE TO RFC EDITOR: Please remove this section before publication as per RFC7942.&gt;</t>
</section>

<section anchor="ianaconsid"><name>IANA Considerations</name>
<t></t>
<t>IANA is requested to add the following entry to the &quot;Underscored and Globally Scoped DNS Node Names&quot;
registry <xref target="RFC8552"></xref> :</t>
<table><name>Entry for the &quot;Underscored and Globally Scoped DNS Node Names&quot; registry
</name>
<thead>
<tr>
<th>RR Type</th>
<th>_NODE NAME</th>
<th>Reference</th>
</tr>
</thead>

<tbody>
<tr>
<td>TXT</td>
<td>_for-sale</td>
<td>&lt;this memo&gt;</td>
</tr>
</tbody>
</table></section>

</middle>

<back>
<references><name>References</name>
<references><name>Normative References</name>
<reference anchor="ISO4217" target="https://www.iso.org/iso-4217-currency-codes.html">
  <front>
    <title>ISO 4217 Currency Codes</title>
    <author>
      <organization>SIX Group</organization>
    </author>
  </front>
</reference>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2181.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3629.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3986.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3987.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5198.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5234.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5890.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7405.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9839.xml"/>
</references>
<references><name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3912.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3966.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4592.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4648.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6068.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6530.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6672.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6761.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8552.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8553.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9083.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9110.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9499.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml9/reference.STD.69.xml"/>
</references>
</references>

<section anchor="examples"><name>Additional Examples</name>

<section anchor="example-1-code-format"><name>Example 1: Code Format</name>
<t>A proprietary format, defined and used by agreement between parties - for example,
a domain name registry and its registrars - without a clearly specified meaning for third parties.
For example, it may be used to automatically redirect visitors to a web page, as described in
<xref target="fcoddef"></xref>:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;fcod=XX-aHR0cHM...wbGUuY29t"
]]></artwork>
<t>Note: the content value in the above example is truncated for readability.</t>
<t>The use of the &quot;fcod=&quot; content tag is, in principle, unrestricted, allowing implementers to define additional
uses as needed. For example, it may convey arbitrary formatting or conditional display
instructions, such as adding an extra banner (e.g., &quot;eligibility criteria apply&quot;) or
specifying a style, including color, font, emojis, or logos.</t>
</section>

<section anchor="example-2-free-text-format"><name>Example 2: Free Text Format</name>
<t>Free format text, with some additional unstructured information, aimed at
being human-readable:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;ftxt=Eligibility criteria apply."
]]></artwork>
<t>The content in the following example could be malicious, but it is not in violation of the convention in this document (see
the <xref target="security" format="title"></xref>):</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;ftxt=<script>...</script>"
]]></artwork>
</section>

<section anchor="example-3-uri-format"><name>Example 3: URI Format</name>
<t>The holder of &quot;example.com&quot; wishes to signal that the domain is for sale and adds this record to the &quot;example.com&quot; zone:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;furi=https://example.com/fs?d=eHl6"
]]></artwork>
<t>An interested party notices this signal and can visit the URI mentioned for further information. The TXT record
may also be processed by automated tools, but see the <xref target="security" format="title"></xref> section for possible risks.</t>
<t>As an alternative, a '<tt>mailto</tt>' URI could also be used:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;furi=mailto:hq@example.com?subject=foo"
]]></artwork>
<t>Or a telephone URI:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;furi=tel:+1-201-555-0123"
]]></artwork>
<t>There can be a use case for these URIs, especially since WHOIS (or RDAP) often has privacy restrictions.
But see the <xref target="privacy" format="title"></xref> section for possible downsides.</t>
</section>

<section anchor="example-4-asking-price-format"><name>Example 4: Asking Price Format</name>
<t>Consists of an uppercase currency code (e.g., USD, EUR), followed by a
numeric amount. See <xref target="currency"></xref> for additional guidelines.</t>
<t>In Bitcoins:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;fval=BTC0.000010"
]]></artwork>
<t>In US dollars:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;fval=USD750"
]]></artwork>
</section>

<section anchor="combiexample"><name>Example 5: Combinations</name>
<t>An example of multiple valid TXT records from which a processor can choose:</t>

<artwork><![CDATA[_for-sale IN TXT "v=FORSALE1;furi=https://fs.example.com/"
          IN TXT "v=FORSALE1;ftxt=This domain name is for sale"
          IN TXT "v=FORSALE1;fval=EUR500"
          IN TXT "v=FORSALE1;fcod=EXCO-ZGVhZGJlZWYx"
          IN TXT "v=FORSALE1;fcod=XYZ1-MTExLTIyMi0zMzMtNDQ0"
]]></artwork>
</section>
</section>

<section anchor="acknowledgements" numbered="false"><name>Acknowledgements</name>
<t>The author would like to thank Thijs van den Hout, Caspar Schutijser, Melvin
Elderman, Ben van Hartingsveldt, Jesse Davids, Juan Stelling, John R. Levine,
Dave Lawrence, Andrew Sullivan, Paul Hoffman, Eliot Lear (ISE), Viktor Dukhovni,
James Gannon, Watson Ladd, Tim Wicinski, Russ Housley, Takahiro Nemoto, Chongfeng
Xie, Joe Abley and Mohamed 'Med' Boucadair for their valuable feedback.</t>
</section>

</back>

</rfc>
