2011-09-12 4 views
1

この問題に関しては、私は助けていただければ幸いです。PHP - サブドメインではなく、ドメインを許可する

登録フォームを作成していますが、私が確認するユーザードメインのフィールドはFILTER_VALIDATE_URLで有効であり、それはdns_check_recordで存在します。私がいる問題は、これらの2つの方法を使用しても、サブドメインが、私はしたくないフォームに提出することを可能にするということですが

誰もドメインを許可する方法を知っていますが、サブドメインは許可していませんか?

私はhttp://syntax.cwarn23.net/PHP/Strip_URL_to_Domainから、以下の機能をテストしてみた:

function domain($domainb) 
{ 
$bits = explode('/', $domainb); 
if ($bits[0]=='http:' || $bits[0]=='https:') 
    { 
    $domainb= $bits[2]; 
    } else { 
    $domainb= $bits[0]; 
    } 
unset($bits); 
$bits = explode('.', $domainb); 
$idz=count($bits); 
$idz-=3; 
if (strlen($bits[($idz+2)])==2) { 
$url=$bits[$idz].'.'.$bits[($idz+1)].'.'.$bits[($idz+2)]; 
} else if (strlen($bits[($idz+2)])==0) { 
$url=$bits[($idz)].'.'.$bits[($idz+1)]; 
} else { 
$url=$bits[($idz+1)].'.'.$bits[($idz+2)]; 
} 
return $url; 

しかし、このようなwww.domain.uk.comがuk.comとして表示されるように任意のドメインとして完璧ではありません(私は知りません共通ドメイン拡張)。

誰かが上記の機能よりも優れた方法を知っていますか?

+3

あなたはかなり緩く言葉*サブドメイン*を使用 –

+0

明示的な '.co.uk'、' .com.br'、などなど、物事をチェックする必要があります。 'john @ customers.example.com'のようなアドレスを拒否しますか? –

+0

申し訳ありません私はそれも何かをブロックしたいと思っていました。 – James

答えて

0

マイケルMIORで指摘したように、あなたは、.co.ukため.com.brや他の多くを確認する必要があります。 http://publicsuffix.org/

一部のブラウザベンダーが効果的TLDあるような非TLDのリストを維持しています。リストはquite hugeです。

この有効なTLDリストを使用して、探している機能(ダウンロードはhere)を実装するライブラリhereがあります。 (https://wiki.mozilla.org/Gecko:Effective_TLD_Service経由で発見。)

+0

...大きく変化し続けています。 IMHOそれは時間の無駄のように見えます。 –

+0

はい、それはリストが大規模だと思われます、私は手動で各ドメインを承認する必要があるように見えます。しかし、あなたの助けに感謝します。 – James

0

それらを結合します。

dns_check_recordは '.co.uk'に失敗するので、文字列をドットで分割し、最後の2つの部分を結合するときに得られるドメインを確認し、失敗した場合は3番目の部分も使用しますどれか。

無効なドメインをもう一度確認しますが、問題は発生しません。

+0

ありがとう、私はそれが.co.ukで失敗するかどうかはわかりませんでした。 – James

0

最初のホスト名のみを取得するためにparse_url()を使用することができます。http://www.stackoverflow.com - あなたは、ホスト名でのポイントの量を数えることができる

セカンド=「www.stackoverflow.com」> $のURL [「ホスト」]:爆発() - >数()またはsubstr_count()

がホストサブドメインが存在する可能性がより1ポイントを持っています。

今、あなたはGolezTrolまたはarnaud576875で言及したソリューションを使用することができます。

+0

ご協力いただきありがとうございます。これは私が使用していたよりもホスト名を取得する方がはるかに良い方法です。その機能を書き留めます。 – James

+0

しかし、ドットが1つしかない場合は、まだ無効なURLがある可能性があります。単にco.ukを入力した場合、有効なドメインとして許可しないように注意してください。だから実際には、ドットの数に関係なく、あなたは常にそれが有効なドメインであるかどうかをチェックする必要があります。 – GolezTrol

関連する問題