Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Valid hostnames are consideres invalid with Umlaut and certain TLDs #4

Open
weierophinney opened this issue Dec 31, 2019 · 0 comments

Comments

@weierophinney
Copy link
Member

I initially encountered this problem while using the email validator. However the real origin is the hostname validator.

A simple testscript let's you reproduce this issue. In the example code I'm using an made up hostname, however the real one of my client is built up in the same manner: an german umlaut in the hostname as well as one of the newer tlds. Due to data privacy the script doesn't use the real hostname of my client.

The only thing you need to do is to install zend-validator via composer, create a script with the following code an run it within your browser:

<?php
require_once ('vendor/autoload.php');

// email validator tests

$validator = new \Zend\Validator\EmailAddress();

// this should return "success", but does not: umlaut & new tld
if (false === $validator->isValid('info@täst.tools')) {
    echo'<pre>';print_r($validator->getMessages());echo'</pre>';
} else {
    echo 'success';
}

// new tld, but no umlaut -> works
if (false === $validator->isValid('[email protected]')) {
    echo'<pre>';print_r($validator->getMessages());echo'</pre>';
} else {
    echo 'success<br>';
}

// umlaut but "classic" tld -> works
if (false === $validator->isValid('info@täst.com')) {
    echo'<pre>';print_r($validator->getMessages());echo'</pre>';
} else {
    echo 'success<br>';
}


// hostname validator

$validator = new \Zend\Validator\Hostname();


// this should return "success", but does not: umlaut & new tld
if (false === $validator->isValid('täst.tools')) {
    echo'<pre>';print_r($validator->getMessages());echo'</pre>';
} else {
    echo 'success<br>';
}

// new tld, but no umlaut -> works
if (false === $validator->isValid('test.tools')) {
    echo'<pre>';print_r($validator->getMessages());echo'</pre>';
} else {
    echo 'success<br>';
}

// umlaut but "classic" tld -> works
if (false === $validator->isValid('täst.com')) {
    echo'<pre>';print_r($validator->getMessages());echo'</pre>';
} else {
    echo 'success<br>';
}

Basically the upper three test, test the email validator, while the three later ones directly test the hostname validator.

The output of the script looks like the following:

Array
(
    [emailAddressInvalidHostname] => 'xn--tst-qla.tools' is not a valid hostname for the email address
    [hostnameInvalidHostnameSchema] => The input appears to be a DNS hostname but cannot match against hostname schema for TLD 'TOOLS'
    [hostnameLocalNameNotAllowed] => The input appears to be a local network name but local network names are not allowed
)
success
success
Array
(
    [hostnameInvalidHostnameSchema] => The input appears to be a DNS hostname but cannot match against hostname schema for TLD 'TOOLS'
    [hostnameInvalidLocalName] => The input does not appear to be a valid local network name
)
success
success

The first and fourth tests fail. And this is the issue. These are completely valid hostnames. Which are by the way not local.

Does anyone know how to fix this? I'm not deeply into the hostname validator. Installed was version 2.10 of the validator component.

For the background: we've developed a credential database application, with different types of credential-types and so on. One of the types is email credential which respectively requires the email address. There we encountered this issue.


Originally posted by @alexsawallich at zendframework/zend-validator#234

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant