rNote のオリジナルコードでは、単一記事モードで記事を閲覧したとき、
function RefererCheck()
の中で、有効なリファラか判定するために、
if(!ereg("^https?://.{6,}",$HTTP_REFERER)) return;
となっている。 ’//’ のあとに、任意の6文字以上があれば有効と見做している。
しかし、「ドメイン名の文字数と使える文字の制限」に書いたように、 http://a.cn/ など、1文字ドメインからのアクセスを考えると、これではまずい。
その部分を、
if (!preg_match("/^https?:\/\/([[:alnum:]-&#;%\.\\\\]+\.|)[[:alnum:]-&#;%\\\\]+\.[[:alnum:]-&#;%\\\\]+([\/]?|\/[[:alnum:]-_&=%#!?;~:@\/\$\.\"\']+|\.|)$/", $HTTP_REFERER)) return;
と変更する。
これで、少なくとも第2レベルドメインまで存在し、
http://foo.jp
http://foo.jp.
http://foo.jp/
http://www.foo.jp/
http://www.foo.bar.jp/
http://foo.jp/bar
http://foo.jp/bar.php
http://foo.jp/bar.php?u=sample
http://foo.jp/bar.php?u=sample&date=2018-12
http://foo.jp.
http://foo.jp/
http://www.foo.jp/
http://www.foo.bar.jp/
http://foo.jp/bar
http://foo.jp/bar.php
http://foo.jp/bar.php?u=sample
http://foo.jp/bar.php?u=sample&date=2018-12
などの形式の場合に有効なリファラと判断するようになる。
数値参照でエンコードされてきた場合などを考えて、ラベルには「%&#;\」などを追加してあるが、必要ないかもしれない。